• 【Redis过期策略/内存淘汰机制/对过期Key的处理】


    我是廖志伟,一名Java开发工程师Java领域优质创作者CSDN博客专家幕后大佬社区创始人。拥有多年一线研发经验,研究过各种常见框架中间件的底层源码,对于大型分布式微服务、三高架构(高性能高并发高可用)有过实践架构经验。

    博主:java_wxid
    博主:Java廖志伟
    社区:幕后大佬



    本文内容:

    Redis过期策略


    redis

    Redis采用的过期策略

    惰性删除+定期删除

    惰性删除流程

    在进行get或setnx等操作时,先检查key是否过期,若过期,删除key,然后执行相应操作;若没过期,直接执行相应操作

    定期删除流程

    对指定个数个库的每一个库随机删除小于等于指定个数个过期key,遍历每个数据库(就是redis.conf中配置的"database"数量,默认为16),检查当前库中的指定个数个key(默认是每个库检查20个key,注意相当于该循环执行20次,循环体时下边的描述),如果当前库中没有一个key设置了过期时间,直接执行下一个库的遍历,随机获取一个设置了过期时间的key,检查该key是否过期,如果过期,删除key,判断定期删除操作是否已经达到指定时长,若已经达到,直接退出定期删除。

    问题:定期删除漏掉了很多过期 key,然后你也没及时去查,也就没走惰性删除,此时会怎么样?如果大量过期 key 堆积在内存里,导致 Redis 内存块耗尽了,怎么解决呢?走内存淘汰机制

    内存淘汰机制

    Redis 内存淘汰机制有以下几个:

    noeviction: 当内存不足以容纳新写入数据时,新写入操作会报错,这个一般没人用吧,实在是太恶心了。 allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key(这个是最常用的)。

    allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 key,这个一般没人用吧,为啥要随机,肯定是把最近最少使用的 key 给干掉啊。

    volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 key(这个一般不太合适)。

    volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 key。

    volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 key 优先移除。

    RDB对过期key的处理

    过期key对RDB没有任何影响,从内存数据库持久化数据到RDB文件:持久化key之前,会检查是否过期,过期的key不进入RDB文件 从RDB文件恢复数据到内存数据库:数据载入数据库之前,会对key先进行过期检查,如果过期,不导入数据库(主库情况)

    AOF对过期key的处理

    过期key对AOF没有任何影响 从内存数据库持久化数据到AOF文件:当key过期后,还没有被删除,此时进行执行持久化操作(该key是不会进入aof文件的,因为没有发生修改命令)当key过期后,在发生删除操作时,程序会向aof文件追加一条del命令(在将来的以aof文件恢复数据的时候该过期的键就会被删掉) AOF重写:重写时,会先判断key是否过期,已过期的key不会重写到aof文件


    总结

    以上就是今天要讲的内容,还希望各位读者大大能够在评论区积极参与讨论,给文章提出一些宝贵的意见或者建议,合理的内容,我会采纳更新博文,重新分享给大家。

    四连 关注点赞收藏⭐️留言

    感谢大家的支持,用心写博文分享给大家,你的支持(点赞收藏⭐️留言)是对我创作的最大帮助。
    微信公众号:南北踏尘
    主页地址:java_wxid
    社区地址:幕后大佬

    给读者大大的话

    我本身是一个很普通的程序员,放在人堆里,除了与生俱来的盛世美颜、所剩不多的发量,就剩下180的大高个了。就是我这样的一个人,默默坚持写博文也有好多年了,有句老话说的好,牛逼之前都是傻逼式的坚持。希望自己可以通过大量的作品,时间的积累,个人魅力、运气和时机,可以打造属于自己的技术影响力。同时也希望自己可以成为一个懂技术懂业务懂管理的综合型人才,作为项目架构路线的总设计师,掌控全局的团队大脑,技术团队中的绝对核心是我未来几年不断前进的目标。


    提示:以下都是资源分享,求个一键三连。

    面试资料

    福利大放送,欢迎关注点赞收藏⭐️留言,拜托了,这对我真的很重要。
    点击:面试资料
    提取码:2021

    200套PPT模板

    福利大放送,欢迎关注点赞收藏⭐️留言,拜托了,这对我真的很重要。
    点击:200套PPT模板
    提取码:2021

    提问的智慧

    福利大放送,欢迎关注点赞收藏⭐️留言,拜托了,这对我真的很重要。
    点击:提问的智慧
    提取码:2021

    Java开发学习路线

    名称链接
    JavaSE点击: JavaSE
    MySQL专栏点击: MySQL专栏
    JDBC专栏点击: JDBC专栏
    MyBatis专栏点击: MyBatis专栏
    Web专栏点击: Web专栏
    Spring专栏点击: Spring专栏
    SpringMVC专栏点击: SpringMVC专栏
    SpringBoot专栏点击: SpringBoot专栏
    SpringCould专栏点击: SpringCould专栏
    Redis专栏点击: Redis专栏
    Linux专栏点击: Linux专栏
    Maven3专栏点击: Maven3专栏
    Spring Security5专栏点击: Spring Security5专栏
    更多专栏更多专栏,请到 java_wxid主页 查看

    P5学习路线图
    p5学习路线图P6学习路线图
    P6学习路线图P7学习路线图
    P7学习路线图P8学习路线图
    P8学习路线图

    以上四张图详细介绍了作为Java开发工作者所需要具备的知识技能,同学们学废了嘛,有想法系统学习的同学可以私聊我,欢迎关注点赞收藏⭐️留言。
    博主:java_wxid
    博主:Java廖志伟
    社区:幕后大佬

  • 相关阅读:
    linux 声音大小调整的命令
    Linux下cron的使用
    MySql中添加用户,新建数据库,用户授权,删除用户,修改密码
    yii 删除内容时增加ajax提示
    git 忽略权限
    yii CGridView colum 链接
    yii cgridview 对生成的数据进行分页
    yii cgridview 默认的筛选如何做成选择框
    db2 Reorgchk:重组检查,是否需要重组
    Linux 下文件
  • 原文地址:https://www.cnblogs.com/javawxid/p/15644336.html
Copyright © 2020-2023  润新知