Redis的缓存过期淘汰策略
2022年7月18日
Redis的缓存过期淘汰策略
Redis内存满了怎么办?
如何配置、修改redis的内存大小?
redis缓存淘汰策略?
redis内存
查看redis最大占用内存
redis.config文件
设置maxmemory参数,maxmemory是bytes字节类型,注意转换。
如果不设置最大内存,或者设置为0,在64位操作系统下不限制
内存大小,在32位操作系统下最多使用3gb内存。
配置redis内存
一般推荐redis设置内存为物理内存的四分之三
通过修改文件配置:
通过命令修改
> 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
- 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
配置文件