1)过期删除

大家都知道可以对redis的的key设置过期时间,一到时间key就失效。但是redis是怎么对失效的key进行删除的?
答案是:定期删除+惰性删除

定期删除

redis默认会每秒进行是过期扫描。过期扫描不是遍历过期字典里面所有的key,而是采用一种简单的贪心策略。
  1. 从过期的字典中随机20个key
  2. 删除20个key中已经过期的
  3. 如果过期的key比例超过四分之一,就重复步骤一
为了保证扫描不会循环过度,还增加了扫描的时间上限25毫秒。
但是定期删除可能会导致很多过期key到了时间并没有被删除掉,就需要惰性删除兜底了。

惰性删除

在你获取某个key的时候,redis会检查一下 ,这个key如果设置了过期时间那么是否过期了?如果过期了此时就会删除,不会给你返回任何东西。、
从库的过期策略:从库对过期的处理是被动的,当主库key到期时会在AOF文件里面加一条del指令,同步到所有的从库中去,从库通过这个指令进行过期删除
因为主库过期的key的del指令是 异步进行的,会存在主从数据不一致问题。分布式锁的漏洞就是因为这个问题导致的

总结

问题:如果定期删除+惰性删除还是漏掉了许多key,导致内存耗尽怎么办
答案:走内存淘汰机制。

2)内存淘汰

如果redis的内存占用过多的时候,此时会进行内存淘汰,有如下一些策略:
  1. noeviction:当内存不足以容纳新写入数据时,新写入操作会报错,这个一般没人用吧,实在是太恶心了
  2. allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(这个是最常用的)
  3. allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key,这个一般没人用吧,为啥要随机,肯定是把最近最少使用的key给干掉啊
  4. volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key(这个一般不太合适)
  5. volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key
  6. volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除

(十四)redis过期策略相关推荐

  1. @cacheable 设置过期时间_缓存面试三连击——聊聊Redis过期策略?内存淘汰机制?再手写一个LRU 吧!...

    大家好,今天我和大家想聊一聊有关redis的过期策略的话题. 听到这里你也许会觉得:"我去,我只是个日常搬砖的,这种偏底层的知识点,我需要care吗?" 话虽如此·,但是兄die, ...

  2. PyTorch框架学习十四——学习率调整策略

    PyTorch框架学习十四--学习率调整策略 一._LRScheduler类 二.六种常见的学习率调整策略 1.StepLR 2.MultiStepLR 3.ExponentialLR 4.Cosin ...

  3. redis 过期策略

    redis 过期策略是:定期删除+惰性删除. 所谓定期删除,指的是 redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除. 假设 redis 里放 ...

  4. Redis 过期策略和淘汰策略

    1.Redis 过期策略 Redis 过期策略用于处理设置了缓存时间的数据,使用定时扫描和惰性删除机制删除到期的缓存数据. Redis 将设置了过期时间的 key 保存在一个独立的字典中,定时扫描就是 ...

  5. redis过期策略与淘汰策略

    redis过期策略与淘汰策略 1.过期策略 2.淘汰策略 3.在哪里配置? 4.Lazy Free 1.过期策略 1.redis中所有的key都可以通过expire命令来设置过期时间,所有被设置了过期 ...

  6. redis过期策略和持久化

    Redis过期策略 注:本文主要参考自<Redis设计与实现> 1.设置过期时间 expire key time(以秒为单位)--这是最常用的方式 setex(String key, in ...

  7. Redis过期策略与内存淘汰机制

    参考博客:https://blog.csdn.net/u010006156/article/details/124914082 Redis过期策略与内存淘汰机制 过期策略简介 作用 redis数据都是 ...

  8. 【带你重拾Redis】Redis过期策略 和 内存淘汰策略(key回收)

    过期策略 我们set key的时候,都可以给一个expire time,就是过期时间,指定这个key比如说只能存活1个小时,我们自己可以指定缓存到期就失效. 如果假设你设置一个一批key只能存活1个小 ...

  9. Redis过期策略及实现原理

    2019独角兽企业重金招聘Python工程师标准>>> 我们在使用redis时,一般会设置一个过期时间,当然也有不设置过期时间的,也就是永久不过期. 当我们设置了过期时间,redis ...

最新文章

  1. Dropout也能自动化了,谷歌大神Quoc Le等人利用强化学习自动找寻模型专用Dropout...
  2. Spring data redis应用示例
  3. CodeBlocks 20.03 配置 wxWidgets 3.1.4
  4. 小ck活动机器人包包_别只知道小 CK!这 5 款小众包包更值得买
  5. 微型计算机可以处理的二进制数据长度,可以处理二进制数据长度的是
  6. 如何在Kubernetes上运行PostgreSQL
  7. 推特股东起诉马斯克逾期披露推特持股信息
  8. raid5 合适 多少块硬盘_分析Linux raid6同步成raid5导致数据丢失的情况
  9. 使用Visual Studio Code + Node.js搭建TypeScript开发环境
  10. 设备参数—支持网络外部的通信
  11. JIRA数据库的迁移,从HSQL到MYSQL/Oracle
  12. 下、Hadoop环境搭建——通过Xshell6连接VMware正式配置Hadoop
  13. python绘制人物关系图,Python来袭,教你用Neo4j构建“复联4”人物关系图谱!
  14. 收藏 | 机器学习分类算法
  15. 长沙民政职业技术学院计算机网络技术专业,长沙民政职业技术学院计算机网络技术专业...
  16. 淘宝系商品详情系统架构设计
  17. 19【numpy中的nan和常用方法】01numpy中的nan和常用统计方法
  18. S32K144烧写程序记录
  19. 你们要的线上GC问题案例来啦
  20. 2014年教育领域五大事件立业公信

热门文章

  1. Hook DirectInput-CreateDevice-GetDeviceData解决方案
  2. 开源项目推荐:主流RPC开源框架及知识科普
  3. 基于微信小程序的社区垃圾回收管理系统小程序
  4. python读取整个txt文件-python读取一个目录下所有txt里面的内容方法
  5. 今天是2022年5月21日
  6. 【K8S系列】快速初始化⼀个最⼩集群
  7. 已知一条斜边,求直角三角形的另外两条边
  8. Python Class 05-字符串
  9. Excel如何删除合并单元格列后的空单元格
  10. Mysql 学习教程