-
Redis 淘汰策略的概念
- Redis 是一个内存数据库,当存储的数据量超过了配置的内存限制时,就需要一种机制来决定哪些数据应该被删除,以释放空间来存储新的数据。这种机制就是 Redis 的淘汰策略。
-
常见的淘汰策略类型
- noeviction(默认策略)
- 当内存使用达到设置的上限时,Redis 不再接收新的写入操作(但读操作仍可正常进行),这可能会导致写入命令返回错误。这种策略主要用于对数据准确性要求较高,不希望丢失任何数据的场景。例如,在一些对数据完整性要求苛刻的配置存储场景中,如果内存已满,就禁止新的数据写入,以保证已有数据的完整性。
- volatile - lru(Least Recently Used)
- 此策略仅对设置了过期时间的数据有效。Redis 会根据数据的最后访问时间来淘汰最近最少使用的数据。在缓存场景中应用广泛,例如,一个电商平台的商品详情缓存,使用 volatile - lru 策略可以确保经常被访问的商品详情缓存数据得以保留,而那些长时间未被访问且带有过期时间的缓存数据会被优先淘汰,为新的缓存数据腾出空间。
- volatile - ttl(Time To Live)
- 同样仅适用于设置了过期时间的数据。该策略按照数据的剩余存活时间(TTL)来淘汰数据,剩余存活时间越短的越先被淘汰。例如,在一个限时促销活动的缓存场景中,即将过期的促销活动相关缓存数据会被优先清除,以便为其他更有价值的限时缓存数据腾出空间。
- volatile - random
- 也是针对设置了过期时间的数据。Redis 会随机地选择设置了过期时间的数据进行淘汰。这种策略在一些对数据访问频率和存活时间不太敏感的场景下可能会被使用,不过相对来说效率可能不如 LRU 和 TTL 策略高。
- allkeys - lru
- 这个策略会考虑所有的键(不管是否设置了过期时间),根据数据的最后访问时间来淘汰最近最少使用的数据。适用于缓存场景,尤其是当缓存数据没有严格区分是否有过期时间,并且希望保留访问频率高的数据时。例如,在一个内容分发网络(CDN)的缓存系统中,通过 allkeys - lru 策略可以确保热门内容的缓存数据一直保留,而那些不常被访问的缓存数据则会被淘汰。
- allkeys - random
- 针对所有的键进行随机淘汰。这种策略在对数据访问模式不太明确,且没有特殊要求的场景下可能会被使用,但由于是随机淘汰,可能会导致一些经常使用的数据也被意外淘汰。
- volatile - lfu(Least Frequently Used)
- 仅对设置了过期时间的数据起作用。与 LRU 不同的是,LFU 是根据数据的访问频率来淘汰数据的,访问频率最低的数据最先被淘汰。在某些对数据访问频率统计比较精确的场景下很有用,例如,一个在线音乐平台的歌曲缓存,通过 volatile - lfu 策略可以淘汰那些很少被用户播放的歌曲缓存,为热门歌曲缓存腾出更多空间。
- allkeys - lfu
- 考虑所有的键,按照访问频率来淘汰访问频率最低的数据。这对于一些希望整体优化数据存储,根据访问频率来动态调整数据保留情况的场景比较适用。
- noeviction(默认策略)
redis的淘汰策略
最新推荐文章于 2025-10-11 10:08:07 发布
1482

被折叠的 条评论
为什么被折叠?



