redis缓存的淘汰策略

redis是项目缓存大户,可以说90以上的项目都用它。但是redis也好比一个容器,如果满了总是需要处理后续流入的数据,是该将前面流入的数据删除,还是直接不让后面的数据流入,又或者将最久没有使用的数据删除,或将使用频率低的数据删除,或删除剩余生存时间短的数据?这些都需要按实际情况进行选择?

1 直接不让后面的数据流入(noeviction)

这种适合数据不能被容许被丢弃的情况,也就是将redis作为持久化存储了。目前在我做的项目中还是有用到这种情况。

2 最久没有使用的数据删除(allkeys-Iru)

对所有key做LRU淘汰,不管有没有设置TTL。这是最常用的策略之一,适合纯缓存场景。

3 使用频率低的数据删除(allkeys-lfu)

是基于访问频率淘汰,比LRU更能应对突发流量。allkeys-lfu现在是推荐的默认策略。

4 删除剩余生存时间短的key(volatile-ttl)

优先删除剩余生存时间短的key,适用于大量短期key的堆积场景。

如何设置:直接设置redis配置文件永久生效

js
复制代码
# 先设置最大内存(必须先设 maxmemory,淘汰策略才会生效) maxmemory 1gb # 比如限制 Redis 最多用 1G 内存 # 然后设置淘汰策略 maxmemory-policy allkeys-lfu

以上内容只做记录,如有错误还请各位鱼友版帮忙指出。

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
不知足的yu
下载 APP