Redis 数据持久化策略和数据过期策略

01- 你们项目中哪里用到了Redis ?

在我们的项目中很多地方都用到了Redis , Redis在我们的项目中主要有三个作用 :

  1. 使用Redis做热点数据缓存/接口数据缓存

  2. 使用Redis存储一些业务数据 , 例如 : 验证码 , 用户信息 , 用户行为数据 , 数据计算结果 , 排行榜数据等

  3. 使用Redis实现分布式锁 , 解决并发环境下的资源竞争问题

02- Redis的常用数据类型有哪些 ?

Redis 有 5 种基础数据结构,它们分别是:string(字符串)、list(列表)、hash(字典)、set(集 合) 和 zset(有序集合)

03- Redis的数据持久化策略有哪些 ?

Redis 提供了两种方式,实现数据的持久化到硬盘。

  1. RDB 持久化(全量),是指在指定的时间间隔内将内存中的数据集快照写入磁盘。

  2. AOF持久化(增量),以日志的形式记录服务器所处理的每一个写、删除操作

RDB和AOF一起使用, 在Redis4.0版本支持混合持久化方式 ( 设置 aof-use-rdb-preamble yes )

04- Redis的数据过期策略有哪些 ?

  1. 惰性删除 :只会在取出 key 的时候才对数据进行过期检查。这样对 CPU 最友好,但是可能会造成太多过期 key 没有被删除。

    数据到达过期时间,不做处理。等下次访问该数据时,我们需要判断

    1. 如果未过期,返回数据

    2. 发现已过期,删除,返回nil

  2. 定期删除 : 每隔一段时间抽取一批 key 执行删除过期 key 操作。并且,Redis 底层会通过限制删除操作执行的时长和频率来减少删除操作对 CPU 时间的影响。

    默认情况下 Redis 定期检查的频率是每秒扫描 10 次,用于定期清除过期键。当然此值还可以通过配置文件进行设置,在 redis.conf 中修改配置"hz"即可,默认的值为hz 10

    定期删除的扫描并不是遍历所有的键值对,这样的话比较费时且太消耗系统资源。Redis 服务器采用的是随机抽取形式,每次从过期字典中,取出 20 个键进行过期检测,过期字典中存储的是所有设置了过期时间的键值对。如果这批随机检查的数据中有 25% 的比例过期,那么会再抽取 20 个随机键值进行检测和删除,并且会循环执行这个流程,直到抽取的这批数据中过期键值小于 25%,此次检测才算完成

    Redis 服务器为了保证过期删除策略不会导致线程卡死,会给过期扫描增加了最大执行时间为 25ms

定期删除对内存更加友好,惰性删除对 CPU 更加友好。两者各有千秋,所以 Redis 采用的是 定期删除+惰性删除

相关推荐
Emma歌小白1 分钟前
完整后台模块模板
后端
得物技术4 分钟前
MySQL单表为何别超2000万行?揭秘B+树与16KB页的生死博弈|得物技术
数据库·后端·mysql
Emma歌小白5 分钟前
配套后端(Node.js + Express + SQLite)
后端
isysc129 分钟前
面了一个校招生,竟然说我是老古董
java·后端·面试
uhakadotcom40 分钟前
静态代码检测技术入门:Python 的 Tree-sitter 技术详解与示例教程
后端·面试·github
幂简集成explinks1 小时前
e签宝签署API更新实战:新增 signType 与 FDA 合规参数配置
后端·设计模式·开源
River4161 小时前
Javer 学 c++(十三):引用篇
c++·后端
RoyLin1 小时前
TypeScript设计模式:迭代器模式
javascript·后端·node.js
爱海贼的无处不在1 小时前
一个需求竟然要开14个会:程序员的日常到底有多“会”?
后端·程序员