Redis的缓存过期淘汰策略

Mr.LR2022年7月18日
大约 3 分钟

Redis的缓存过期淘汰策略

Redis内存满了怎么办?

如何配置、修改redis的内存大小?

redis缓存淘汰策略?

redis内存

查看redis最大占用内存

redis.config文件

image-20220627232335531

设置maxmemory参数,maxmemory是bytes字节类型,注意转换。

如果不设置最大内存,或者设置为0,在64位操作系统下不限制内存大小,在32位操作系统下最多使用3gb内存。

配置redis内存

一般推荐redis设置内存为物理内存的四分之三

通过修改文件配置:

image-20220627232739835

通过命令修改

> config set maxmemory 1024
OK
> config get maxmemory
maxmemory
1024

查看redis内存使用情况

info memory

redis缓存淘汰策略

当redis的内存使用达到上限,会出现OOM 的问题,避免这种情况,引出redis缓存淘汰策略

redis如何删除数据

立即删除

立即删除能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放。但是立即删除对cpu是最不友好的。因为删除操作会占用cpu的时间,如果刚好碰上了cpu很忙的时候,比如正在做交集或排序等计算的时候,就会给cpu造成额外的压力,让CPU心累,时时需要删除。

这会产生大量的性能消耗,同时也会影响数据的读取操作。

总结:对CPU不友好,用处理器性能换取存储空间 (拿时间换空间)

惰性删除

数据到达过期时间,不做处理。等下次访问该数据时,如果未过期,返回数据 ;发现已过期,删除,返回不存在。

总结:对memory不友好,用存储空间换取处理器性能(拿空间换时间)

定期删除

定期抽样key,判断是否过期

redis缓存淘汰策略

有哪些淘汰策略(redis6.0.8版本)

默认配置: noeviction

image-20220627235144099

  • noeviction: 不会驱逐任何key
  • allkeys-lru: 对所有key使用LRU算法进行删除
  • volatile-lru: 对所有设置了过期时间的key使用LRU算法进行删除
  • allkeys-random: 对所有key随机删除
  • volatile-random: 对所有设置了过期时间的key随机删除
  • volatile-ttl: 删除马上要过期的key
  • allkeys-lfu: 对所有key使用LFU算法进行删除
  • volatile-lfu: 对所有设置了过期时间的key使用LFU算法进行删除

总结:2个维度,4个方面

2个维度:过期键中筛选、所有键中筛选

4个方面:LRU、LFU、random、ttl

建议:allkeys-lru

命令修改

> config set maxmemory-policy allkeys-lru
OK
> config get  maxmemory-policy
maxmemory-policy
allkeys-lru

配置文件

image-20220627235507424

上次编辑于: 2022/7/20 23:34:39
贡献者: liurui_60837