Redis: 内存回收

文章目录

一、过期键删除策略

1、惰性删除

顾名思义并不是在TTL到期后就立即删除,而是在访问一个key的时候,检查该key的存活时间,如果已经过期才执行删除,并且删除的目标仅限于当前处理的键。

  • 优点:节约cpu性能,使用时发现过期键才删除。
  • 缺点:如果过期键不被访问,就不会被删除,会一直保留在内存中,存在内存泄漏的风险。

2、定时删除

创建一个定时器(timer),当将过期时立即对该键进行删除操作。

  • 优点:对内存友好,过期的键会立即删除。
  • 缺点:对CPU时间不友好,当某一时刻处在大量的键过期,那么CPU的大部分时间就会在处理删除过期键上,会对服务器的响应时间和吞吐量产生影响。

3、定期删除

每隔一段时间执行一次删除过期键操作,并通过限制执行时长和频率来减少对CPU时间的影响。

  • 难点:很难确定执行时长和频率的取值

4、Redis的过期键删除策略

使用惰性删除+定期删除策略,使得CPU时间和内存使用可以取得平衡。

二、内存淘汰策略

1、设置过期键的内存淘汰策略

  • volatile-lru
    使用LRU算法移除key,只对设置了过期时间的键(最近最少使用)。
  • volatile-random
    在过期集合中移除随机的key,只对设置了过期时间的键。
  • volatile-ttl
    移除那些TTL值最小的key,即那些最近要过期的key。

2、全库键的内存淘汰策略

  • allkeys-lru
    在所有集合key中,使用LRU算法移除key
  • allkeys-random
    在所有集合key中,移除随机的key
  • noeviction
    不进行移除,针对写操作,只返回错误信息
相关推荐
Achou.Wang12 分钟前
Redis过期时间和SORT命令的高级用法
数据库·redis·bootstrap
XMYX-01 小时前
Redis 在实际业务中的高效应用
redis
桃园码工2 小时前
3-测试go-redis+redsync实现分布式锁 --开源项目obtain_data测试
redis·分布式·golang
zybsjn3 小时前
MongoDB 和 Redis 是两种不同类型的数据库比较
数据库·redis·mongodb
克鲁德战士5 小时前
【Java并发编程的艺术3】Java内存模型(下)
java·开发语言·redis
NiNg_1_2346 小时前
Redis中的数据结构详解
数据结构·数据库·redis
NiNg_1_2348 小时前
Redis中的zset底层实现
数据库·redis·缓存
冧轩在努力11 小时前
【redis 】string类型详解
数据库·redis·缓存
痞老板A小安装C420 小时前
redis的大key和热key问题解决方案
数据库·redis·bootstrap
飞升不如收破烂~20 小时前
Redis的String类型和Java中的String类在底层数据结构上有一些异同点
java·数据结构·redis