首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

每日一问:常见的redis内存的淘汰策略有哪些,如何实现?

Redis 提供了几种内存淘汰策略来处理当可用内存不足时如何自动删除键以释放空间的问题。以下是 Redis 中常见的几种内存淘汰策略:

1. noeviction默认的

这是默认的策略。当内存使用达到上限并且客户端尝试执行会导致更多内存使用的命令(比如添加新数据)时,Redis 会返回错误。

实现方式:Redis 直接拒绝执行可能导致内存增加的命令。

例子:假设 Redis 已经达到内存上限,此时执行SET命令添加新的键值对,Redis 会返回错误并拒绝该操作。

2. volatile-lru

从设置了过期时间的键值对中,移除最近最少使用的键值对。

实现方式:Redis 会维护一个记录设置了过期时间的键的访问时间的队列,当需要淘汰数据时,从队列尾部移除元素。

例子:有多个设置了过期时间的键key1、key2和key3,其中key1最近访问最少,当内存不足时,key1会被淘汰。

3. volatile-ttl

移除即将过期的键值对,也就是剩余生存时间(TTL)最短的键值对。

实现方式:Redis 会遍历设置了过期时间的键,比较它们的 TTL,选择 TTL 最小的进行淘汰。

例子:键keyA的 TTL 为 10 秒,键keyB的 TTL 为 5 秒,当内存不足时,keyB会被优先淘汰。

4. volatile-random

在设置了过期时间的键值对中,随机移除某个键值对。

实现方式:通过随机算法从设置了过期时间的键集合中选择一个进行淘汰。

例子:在一组设置了过期时间的键中,随机选取一个如keyX进行淘汰。

5. allkeys-lru

从所有键值对中,移除最近最少使用的键值对。

实现方式:Redis 维护一个所有键的访问时间队列,淘汰时从队列尾部移除。

例子:包括设置了过期时间和未设置过期时间的多个键,如keyC最近访问最少,当内存不足时,keyC被淘汰。

6. allkeys-random

从所有键值对中,随机移除某个键值对。

实现方式:通过随机算法从所有键集合中选择一个进行淘汰。

例子:在所有键中,随机选择如keyY进行淘汰。

7:其他lua脚本等实现,非Redis内置的

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OrjKMct51QkcE2uRYIxmsGtg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券