我们已经了解到了Redis是一种内存数据库,Redis中数据都是以key-value的形式存储在内存中。由Redisserver来维护和管理这部分内存,内存是何足珍贵,不须要的数据或者是已经使用过的无用的数据是不会让它长久的存在于内存中的,毕竟我们还是要建设节约型社会的。所以我们能够通过给键设置生存时间或者过期时间来权衡有限的内存和不断增长的数据。设置过期时间的命令为:【expire key 时间长度(秒)】或者是【pexpire key 时间长度(毫秒)】 同一时候也能够通过【expireat key
时间点(Unix时间戳)】,能够通过TTL命令或者是pttl命令查看这个键还有多少剩余时间。

数据库中键的过期时间是保存在一个字典中的,这在Redis_字典中提到过了,本文主要说明的问题是过期键删除的问题。一个过期的键肯定不会让它长久的再存在于内存中,肯定是要对它进行删除的。建设节约型社会嘛,那么什么时候删除它呢?这里有三种不同的删除策略。我们逐一简单说明,非常easy理解。

1,定时删除

什么是定时删除?顾名思义。就是我定个时间,到点就删除,有什么优点呢,对内存是最友好的,能够保证过期键会被尽快的删除掉,内存被尽早的释放出来,可是硬币都有两面啊,内存友好了,CUP时间呢。到点就删除到点就删除,CUP不干别的事了,光做删除过期键操作了,不现实,而且server还要创建大量的定时器,来实现定时删除。假设内存如今并不缺少,有空暇的内存,而这个时候有大量的命令请求在等待server处理,那么server也应该优先把CUP时间给处理client请求上。而不是删除过期键上。

所以定时删除不是一个完美的策略。

2。懒惰删除

相同,什么是懒惰删除。懒惰,懒得做删除操作,逼不得已我是不会去删除过期键的,懒到家了。

那么什么时候是逼不得已的时候呢,client如今取这个数据了。这个key已经过期了。明显不能返回给client。这个时候也就是懒到家的时候了。不删不行啊,client那边不愿意啊,能够看出。这个策略对内存是极不好的,没有建设节约型社会,可是CUP时间是最友好的,不会轻易动用CUP时间去删除过期键。

3,定期删除

定期?比定时时间长一点,不会时刻的去检查过期键。删除过期键,定期删除。是每隔一段时间检查一次数据库。删除里面的过期键,非常明显定期删除是定时删除和懒惰删除的一个折中。

那么Redis中採用什么过期删除策略呢?

Redis时间上採用了惰性删除和定期删除两种策略配合使用,能够更好的使CUP时间和内存区的平衡

本文讨论Redis的过期键删除策略就不能不提AOF和RDB两种备份策略对过期键的处理

首先说一下RDB

我们知道server启动的时候假设开启了RDB功能,server会对RDB文件进行加载

这里分两种情况

1,主server模式,会被文件里的键进行检查,过期的键忽略,所以过期键对主server不会造成影响,

2,从server模式,不管过期只是期所有加载数据库中,只是主server在进行数据同步的时候,从server的数据会被清空,所以一般来说,对从server来说也不会造成影响

然后是AOF

记住一点,在运行AOF重写的时候,过期键不会被保存到重写后的AOF文件里,所以过期键不会对AOF造成影响。

还有就是主从复制的时候

主删除一个过期键,会显示的告诉从

从在运行client发送的读命令时,即使是过期键也不会删除过期键,而是像处理未过期键一样处理。从仅仅有介绍到主的Del命令才会删除

redis中关于过期键的删除策略的更多相关文章

  1. redis学习笔记——Redis过期键的删除策略

    Redis过期键的删除策略 对于过期键一般有三种删除策略 定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作: 惰性删除:放任键过期 ...

  2. redis 过期键的删除策略?

    1.定时删除:在设置键的过期时间的同时,创建一个定时器 timer). 让定时器在键 的过期时间来临时,立即执行对键的删除操作. 2.惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的 ...

  3. Redis 中的过期删除策略和内存淘汰机制

    Redis 中 key 的过期删除策略 前言 Redis 中 key 的过期删除策略 1.定时删除 2.惰性删除 3.定期删除 Redis 中过期删除策略 从库是否会脏读主库创建的过期键 内存淘汰机制 ...

  4. Redis详解(四)——删除策略

    Redis详解(四)--删除策略 Redis中的数据特征 Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令来获取其状态,当 key 不存在时,返回 -2 . 当 k ...

  5. Redis 中的过期元素是如何被处理的?视频+图文版给你答案——面试突击 002 期

    本文以面试问题「Redis 中的过期元素是如何被处理的?」为切入点,用视频加图文的方式和大家聊聊 Redis 过期元素被处理的相关知识点. 涉及的知识点 过期删除策略有哪些? 这些过期策略有哪些优缺点 ...

  6. 深入理解Redis中的主键失效及其实现机制

    参考:http://blog.sina.com.cn/s/articlelist_1221155353_0_1.html 作为一种定期清理无效数据的重要机制,主键失效存在于大多数缓存系统中,Reids ...

  7. ASP.NET缓存中Cache过期的三种策略

    原文:ASP.NET缓存中Cache过期的三种策略 我们在页面上添加三个按钮并双击按钮创建事件处理方法,三个按钮使用不同的过期策略添加ASP.NET缓存. <asp:Button ID=&quo ...

  8. redis中key过期事件

    刚到新公司一个月左右,有个新需求,想做定时任务,比如在用户注册时间的3天后推送用户一条消息. 从刚开始脑子里面闪现的数据库轮询,立马否定掉(浪费资源),再到linux系统的定时任务,但是当用户量过大时 ...

  9. Redis中关于Hash键的一些问题

    Hash键存在的意义: 1.Hash键可以将信息凝聚在一起,而不是直接分散的存储在整个Redis中,这不仅方便了数据管理,还可以尽量避免一定的误操作: 2.避免键名冲突: 3.减少内存占用.(最重要的 ...

随机推荐

  1. 03004_Web开发

    1.Web开发中常见的概念 (1)B/S系统和C/S系统 ①Brower/Server:浏览器 服务器 系统------网站: ②Client/Server:客户端 服务器 系统------QQ.大型 ...

  2. i++和++i的区别,及其线程安全问题

    i++和++i都是i=i+1的意思,但是过程有些许区别: i++:先赋值再自加.(例如:i=1:a=1+i++:结果为a=1+1=2,语句执行完后i再进行自加为2) ++i:先自加再赋值.(例如:i= ...

  3. Jmeter性能指标分析-下载了服务器监控插件的各个组件的功能介绍

    1.jp@gc - Actiive Threads Over Time:不同时间的活动用户数量展示(图表) 当前的时间间隔是1毫秒,在setting中可以设置时间间隔以及其他的参数 2.jp@gc - ...

  4. WordPress 编辑器没有可视化

    第一次安装wordpress后出现文章编辑器只有一行按钮的问题,即使我安装了其他的编辑插件也是一样只有一行, 解决方法: 原来是再Users->All Users 中勾选了Disable the ...

  5. Leetcode 363.矩形区域不超过k的最大数值和

    矩形区域不超过k的最大数值和 给定一个非空二维矩阵 matrix 和一个整数 k,找到这个矩阵内部不大于 k 的最大矩形和. 示例: 输入: matrix = [[1,0,1],[0,-2,3]], ...

  6. Leetcode 335.路径交叉

    路径交叉 给定一个含有 n 个正数的数组 x.从点 (0,0) 开始,先向北移动 x[0] 米,然后向西移动 x[1] 米,向南移动 x[2] 米,向东移动 x[3] 米,持续移动.也就是说,每次移动 ...

  7. Leetcode 327.区间和的个数

    区间和的个数 给定一个整数数组 nums,返回区间和在 [lower, upper] 之间的个数,包含 lower 和 upper.区间和 S(i, j) 表示在 nums 中,位置从 i 到 j 的 ...

  8. .NET重构(五):存储过程、触发器和函数的区别

    导读:在触发器的学习过程中,师傅讲了它的耦合性高,建议我能用存储过程,那到底什么是存储过程呢,自己也不是特别了解,还有就是,触发器也算是一种特殊的存储过程,为什么就不建议多用呢?接下来,就谈谈触发器. ...

  9. Thread.getContextClassLoader() is null

    Java threads created from JNI code in a non-java thread have null ContextClassloader unless the crea ...

  10. Understanding performance, load and stress testing

    What are performance, load and stress testing? Performance testing, load testing and stress testing ...