Redis03-过期策略和淘汰策略

目录

Redis数据过期策略

Redis数据淘汰策略


Redis数据过期策略

Redis使用一种基于过期策略来处理键的过期和自动失效。这种策略可以确保不再需要的数据被自动删除,以释放内存并避免数据过期后仍然在缓存中存留。

Redis的过期删除策略主要有两种:

  1. 惰性删除(Lazy Expiration):只在访问key的时候判断是否过期,如果过期就删除,不会主动检查。

    • 优点:对CPU友好,只在使用的时候检查是否过期。

    • 缺点:对内存不友好,即使过期了的Key也不会被删除,会浪费内存。

  2. 定期删除(TTL-Based Expiration):一段时间对数据库中的一些key进行检查,删除其中过期的key。

    定期删除有两种模式:

    SLOW模式是定时任务,执行频率是10hz(1秒10次),每次不超过25ms,可以通过redis.conf设置hz配置。

    FAST模式执行频率不固定,但两次间隔不低于2ms,每次耗时不超过1ms。

    • 优点:可以通过限制频率和时长减少删除操作对CPU的影响,定期删除也可以减少内存的占用。

    • 缺点:删除操作的频率和时长难以确定,短了消耗CPU,长了和惰性删除差不多,浪费内存。

Redis数据淘汰策略

Redis支持多种数据淘汰策略,用于管理内存中的数据,以便在内存不足时删除部分数据。

LRU(Least Recently Used,最近最少使用):当内存不足时,Redis会优先删除最久未被访问的键。

LFU(Least Frequently Used,最不经常使用):Redis会在内存不足时删除访问频率最低的键。

TTL(Time To Live,生存时间):当键的生存时间过期时,Redis会自动删除该键。

以下是Redis中常见的8种数据淘汰策略:

# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory
# is reached. You can select one from the following behaviors:
#
# volatile-lru -> Evict using approximated LRU, only keys with an expire set.
# allkeys-lru -> Evict any key using approximated LRU.
# volatile-lfu -> Evict using approximated LFU, only keys with an expire set.
# allkeys-lfu -> Evict any key using approximated LFU.
# volatile-random -> Remove a random key having an expire set.
# allkeys-random -> Remove a random key, any key.
# volatile-ttl -> Remove the key with the nearest expire time (minor TTL)
# noeviction -> Don't evict anything, just return an error on write operations.
  1. noeviction:不淘汰任何key,当内存满时不允许写入新数据。这是默认策略。(内存不足会报错的)

  2. volatile-ttl:对设置了TTL的key,计算剩余TTL值,越小的先被淘汰。

  3. volatile-lru:对设置了TTL的key,基于LRU算法进行淘汰。

  4. allkeys-lru:对所有的key,基于LRU算法进行淘汰。

  5. volatile-lfu:对设置了TTL的key,基于LFU算法进行淘汰。

  6. allkeys-lfu:对所有的key,基于LFU算法进行淘汰。

  7. volatile-random:对设置了TTL的key,随机淘汰。

  8. allkeys-random:对所有的key,随机淘汰。

使用建议:

  • 业务对缓存的数据有冷热数据区分的时候,建议使用allkeys-lru删除最久未被访问的key的策略。

  • 业务没有冷热数据区分,使用allkeys-random就行。

  • 业务中有置顶要求,可以设置volatile-lru,对置顶数据不设过期时间,这些数据就会一直保留。

  • 业务中有频率要求,可以使用volatile-lfu或者allkeys-lfu策略。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1、什么是 Redis?简述它的优缺点? 2、Redis 相比 memcached 有哪些优势? 3、Redis 支持哪几种数据类型? 4、Redis 主要消耗什么物理资源? 5、Redis 的全称是什么? 6、Redis 有哪几种数据淘汰策略? 7、Redis 官方为什么不提供 Windows 版本? 8、一个字符串类型的值能存储最大容量是多少? 9、为什么 Redis 需要把所有数据放到内存中? 10、Redis 集群方案应该怎么做?都有哪些方案? 11、Redis 集群方案什么情况下会导致整个集群不可用? 12、MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 13、Redis 有哪些适合的场景? 14、Redis 支持的 Java 客户端都有哪些?官方推荐用哪个? 15、RedisRedisson 有什么关系? 16、Jedis 与 Redisson 对比有什么优缺点? 17、Redis 如何设置密码及验证密码? 18、说说 Redis 哈希槽的概念? 19、Redis 集群的主从复制模型是怎样的? 20、Redis 集群会有写操作丢失吗?为什么? 21、Redis 集群之间是如何复制的? 22、Redis 集群最大节点个数是多少? 23、Redis 集群如何选择数据库? 24、怎么测试 Redis 的连通性? 25、Redis 中的管道有什么用? 26、怎么理解 Redis 事务? 27、Redis 事务相关的命令有哪几个? 28、Redis key 的过期时间和永久有效分别怎么设置? 29、Redis 如何做内存优化? 30、Redis 回收进程如何工作的?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elaine202391

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值