{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

redis怎样设计缓存的淘汰机制?

社区管理员社区管理员 回答1 收藏3
收藏问题
温馨提示
该问题目前已经被作者或者管理员关闭, 无法添加新回复

1条回答

社区管理员

社区管理员

回答于2022-10-19 11:56

1)业务数据在不断地增长,不可能将所有数据全部存储在 Redis 缓存中,内存的价格远远大于磁盘。所以需要做淘汰机制的设计;
(2)缓存的淘汰就是根据一定的策略,将不太重要的数据从缓存中进行删除;
(3)Redis 一共有 8 种淘汰策略,在 Redis 4.0 之前有 6 种,4.0 之后又增加了 2 种,如下图:

image.png

(4)缓存策略的解释:
   ◆ volatile-random:在设置了过期时间的数据中,进行随机删除;
   ◆ volatile-ttl:根据过期时间,越早过期的数据越先删除;
   ◆ volatile-lru:在设置了过期时间的数据中,根据 LRU 算法进行数据删除;
   ◆ volatile-lfu:在设置了过期时间的数据中,根据 LFU 算法进行数据删除;
   ◆ allkeys-lru:在所有数据中,根据 LRU 算法进行数据删除;
   ◆ allkeys-random:在所有数据中,进行随机删除;
   ◆ allkeys-lfu:在所有数据中,根据 LFU 算法进行数据删除;
(5)默认情况下,当 Redis 的使用空间超过 maxmemory 设置的大小时,并不会淘汰数据,也就是执行的 noeviction 策略,如果写满,再有写请求时就会出错;
(6)如果业务中有明显的热数据和冷数据,优先使用 allkeys-lru 策略,让热数据保留在缓存中;
(7)如果业务中没有明显冷热数据,可以使用 volatile-random 或 allkeys-random。


评论0 赞同0
  •  加载中...

社区管理员

|打造一个专业,规范,活跃的社区

TA的文章

阅读更多

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<