redis过期策略和内存淘汰机制

过期策略

Redis的过期策略采用的是定期删除 和惰性删除相结合的方式。

定期删除:Redis默认每100ms就机抽取一些设置了过期时间的key,并检具是否过,如果过期就删除。

定期删除是Redis主动删除策略策略.它可以确保过的key能够及时删除,但是会占用CPU资源去扫描key,可能会影响Redis的性能。

惰性删除:当一个key过时,不会立即从内存中删除.而是在访问这个key的时候才会触发删除操作。

惰性删除是Redis的被动删除策略,它可以节省CPU资源,但是会导致过期的key始终保存在内存中,占用存空间。

内存淘汰

Redis支持8种不同的内存淘汰策略:

noeviction: 不淘汰任何key,但是内存满时不允许写入新数据,默认就是这种策略

volatile``-ttl: 对设置了TTL的key,比较key的剩余TTL值,TTL越小越先被淘汰

allkeys``-random:对全体key ,随机进行淘汰。也就是直接从db->dict中随机挑选

volatile-random:对设置了TTL的key ,随机进行淘汰。也就是从db->expires中随机挑选

allkeys-lru: 对全体key,基于LRU算法进行淘汰

volatile-lru: 对设置了TTL的key,基于LRU算法进行淘汰

allkeys-lfu: 对全体key,基于LFU算法进行淘汰

volatile-lfu: 对设置了TTL的key,基于LFI算法进行淘汰

以下是腾讯针对Redis的淘汰策略设置给出的建议:

当Redis作为缓存使用的候,推荐使用allkeys-lru淘汰策略。该策略会将最近最少使用的Key淘汰。默认倩况下,使用频率最低则后期命中的概率也低.所以将其淘汰。

当Redis作为半缓存半持久化使用,可以使用volatile-lru.但因为Redis本身不建议保存持久化数据,所以只作为备选方案。

相关推荐
isNotNullX7 分钟前
智能问数技术路线怎么选?从Text-to-SQL到Data Agent一次讲清
数据库·oracle
鸽芷咕9 分钟前
换库不申请停机窗口?金仓KFS数据集成软件双轨并行,还真行
数据库
鸽芷咕20 分钟前
月底报表又把库拖垮了?聊聊金仓数据库KES的列存储和真本事
数据库
Juicedata23 分钟前
面向 EB 级 AI 存储:JuiceFS 企业版架构演进
数据库·人工智能·架构
数据库小学妹29 分钟前
MySQL表碎片与 OPTIMIZE TABLE:空间回收的代价与边界
数据库·后端·mysql
java_logo34 分钟前
Docker 部署 Hue:轻松搭建数据库与数据仓库 SQL 查询平台
数据库·数据仓库·sql·docker·hue·部署教程·轩辕镜像
Davina_yu38 分钟前
1、count(*)、count(1) 和 count(单个字段) 的区别
数据库
锦衣夜行?38 分钟前
Oracle 数据库安装失败清理残留步骤
数据库·oracle
时间售卖铺1 小时前
MySQL 表的约束
运维·数据库·mysql·云原生
一条泥憨鱼1 小时前
【Redis | 黑马点评】基于Redis的消息队列 | stream消息队列 源码解读
java·数据库·redis·缓存·lua