我们已经了解到了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. django基础(web框架,http协议,django安装)

    学习Django之前我们先来看什么是OSI七层模型: 应用层 表示层       应用层(五层模型中把这三层合成一个应用层) http协议 会话层 传输层                  提供端口对 ...

  2. appium+python自动化-xpath定位

    基本属性定位 以淘宝app为例,定位左上角扫一扫按钮 1.可以通过text文本定位到 //*[@text='text文本属性'] # 定位text driver.find_element_by_xpa ...

  3. sqoop导数据出现问题

    执行下面命令的时候报错 ./sqoop import \ --connect jdbc:mysql://mini1:3306/userdb \ --username root \ --password ...

  4. [android开发篇]自定义权限

    有时候,我们可能遇到如下需求场景:当用户在一个应用程序中进行某项操作时,会启动另外一个应用程序,最常见的时直接打开了另外一个应用程序,并进入其中某个Activity(如:有的应用中有推荐应用列表,当用 ...

  5. Axure:从简单搜索到联想搜索的部件制作

    导读:最近一直都在整理原型部件,要说准备的最有感触的,当属搜索框无疑.搜索框的整理,前后加起来共耗时两天多.从最开始的按钮和文本框,到后来的图示,提示和联想查询.耗费了不少的心血,有必要总结一下,留个 ...

  6. URAL Formula 1 ——插头DP

    [题目分析] 一直听说这是插头DP入门题目. 难到爆炸. 写了2h,各种大常数,ural垫底. [代码] #include <cstdio> #include <cstring> ...

  7. SPOJ GSS6 Can you answer these queries VI ——Splay

    [题目分析] 增加了插入和删除. 直接用Splay维护就好辣! 写了一个晚上,(码力不精),最后发现更新写挂了 [代码] #include <cstdio> #include <cs ...

  8. response.sendRedirect()使用注意事项

    用response.sendRedirect做转向其实是向浏览器发送一个特殊的Header,然后由浏览器来做转向,转到指定的页面,所以用sendRedirect时,浏览器的地址栏上可以看到地址的变化. ...

  9. Ansible进阶

    YAML YAML简介 YAML是一个可读性高,并用来表达资料序列的格式.YAML参考了其它多种语言,包括:XML.C语言.Python.Perl以及电子邮件格式RFC2822等 它是一种直观的能够被 ...

  10. Mac OS X 下安装python的MySQLdb模块

    参考资料: mac os x下python安装MySQLdb模块   http://www.codeif.com/post/1073/ MAC OSX使用Python安装模块有关问题  http:// ...