LRU (Least recently used, 最近很少使用)
思想: 越最近使用过的数据,接下来使用的机会越大,越应该保留,剔除哪些很久之前使用过的数据
- 新数据插入到列表头部;
- 每当缓存命中(即缓存数据被访问),则将数据移到列表头部;
- 当列表满的时候,将列表尾部的数据丢弃。
LFU(Least Frequently Used 最近频繁使用算法)
思想:使用的次数越高(频率),接下来使用的机会就越高,越应该保留.剔除哪些使用次数少的
- 定期衰减 (例如:每隔一定的时间次数减半)
redis中的淘汰策略
- noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。 默认
- allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。
- allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。
- volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。
- volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。
- volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。
redis 4.x后支持LFU策略,最少频率使用
- allkeys-lru
- volatile-lru
可以通过redis的配置文件来控制
- maxmemory-policy volatile-lru
- maxmemory bytes 控制redis最大能使用多少内存
结论:
- redis作为缓存 可以不用配置持久化 但是需要配置内存淘汰策略
- redis作为业务数据存储 要配置持久化策略 但是内存淘汰一定要用默认的noeviction