Redis 淘汰策略

当redis内存超出物理内存限制时,内存的数据会开始和磁盘产生频繁的交换(swap)。交换会让redis的性能急剧下降,对于访问量较大的redis来说,这样的龟速存取效率基本上等于不可用。
在生产环境中我们是不允许redis出现交换行为的,为了限制最大使用内存,redis提供了配置参数maxmemory来限制可用最大物理内存。
当实际使用内存超出maxmemory时,redis提供了几种可选策略(maxmemory-policy)来让用户自己决定改如何腾出新的空间用以继续提供读写服务。

  • noeviction:不会继续服务写请求(del请求可以继续服务),读请求可以继续服务。这样可以保证不会丢失数据,但是会让线上的业务不能继续进行。这是默认的淘汰策略。
  • volatile-lru:检查设置了过期时间的key,最少使用的key优先淘汰。没有设置过期时间的key不会被淘汰,这样可以保证需要持久化的数据不会突然丢失。
  • volatile-ttl:检查设置了过期时间的key,比较key剩余寿命的ttl值,ttl越小越优先被淘汰。
  • volatile-random:在设置了过期时间的key中随机淘汰。
  • allkeys-lru:尝试所有的key,最少使用的key优先淘汰。这意味着一些没有设置过期时间的key也会被淘汰。
  • allkeys-random:在所有的key中随机淘汰。

volatile-xxx策略只会针对设置了过期时间的key进行淘汰,allkeys-xxx策略会对所有的key进行淘汰。如果只拿redis做缓存,那么应该是用allkeys-xxx策略,客户端写缓存时不必携带过期时间。如果还想用redis的持久化给你,那就是用volatile-xxx策略,这样就可以保留没有设置过期时间的key。

posted @ 2020-04-03 18:19  ghx_kevin  阅读(145)  评论(0编辑  收藏  举报