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 采用的是 定期删除+惰性删除

相关推荐
Asthenia0412几秒前
AtomicMarkableReference如何解决ABA问题:深入分析
后端
JhonKI1 分钟前
【从零实现高并发内存池】内存池整体框架设计 及 thread cache实现
java·redis·缓存
嘉嘉king8 分钟前
Mysql联表查询
数据库
Asthenia041218 分钟前
Fail-Fast与快照机制深入解析及并发修改机制拷打
后端
Pasregret27 分钟前
观察者模式:从博客订阅到消息队列的解耦实践
后端·观察者模式
镜舟科技40 分钟前
NoSQL 与 NewSQL 全面对比:如何选择适合你的数据库方案?
数据库·starrocks·nosql·newsql·技术架构·实时数据分析
TDengine (老段)1 小时前
TDengine 语言连接器(Node.js)
大数据·c语言·数据库·物联网·node.js·时序数据库·tdengine
考虑考虑1 小时前
Springboot捕获feign抛出的异常
spring boot·后端·spring
洛神灬殇1 小时前
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 时间事件处理部分)
redis·后端
Sunlight_7771 小时前
第五章 SQLite数据库:3、SQLite 常用语法及使用案例
jvm·数据库·sqlite