我们已经了解到了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. Hibernate的Session的get()和load()方法区别

    hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别. get Session接口提供了4个重载的get方法,分别通过“持 ...

  2. UIDatePicker 显示时间和打印时间不一样

    默认是时区为0,如下格式化一下就好啦 UIDatePicker *datePiker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 100, ...

  3. Linux快捷键列表

    Linux快捷键列表 快捷键 功能描述 快捷键 功能描述 control+p 查询命令历史纪录的上一条命令 方向上键 查询命令历史纪录的上一条命令 control+n 查询命令历史纪录的下一条命令 方 ...

  4. Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) 一夜回到小学生

    我从来没想过自己可以被支配的这么惨,大神讲这个场不容易掉分的啊 A. Carrot Cakes time limit per test 1 second memory limit per test 2 ...

  5. 【软考2】Java语言的基本知识汇总

    导读:现在对于java这一模块,还没有相应的项目经验,只是通过各种类型的资料,对java有一个面上的了解.现在,对此做一个罗列总结,在以后的学习过程中,逐步完善! 一.语言的发展 1.1,机器语言 在 ...

  6. 【JavaScript 14—学习总结】:从小事做起

    导读:花了将近两个月,JavaScript的学习视频算是做完了.里面的例子,都敲过一遍,但有少数的几个就是实现不了,比如:百度分享侧栏随着滚动条移动:菜单切换只对第一个起作用等,也就先放着了.现在,就 ...

  7. OSQL 用法

    osql中的启动参数如下: -?:列出osql各个参数的语法摘要. -U login_id:用来指出登录名称,登录名区分大小写. -P password:用来指出登录名称所对应的密码. -E:表示采用 ...

  8. 【Luogu】P2331最大子矩阵(DP)

    题目链接 这题的状态转移方程真是粗鄙. f[i][j][k]表示前i行用了j个矩阵状态为k的时候的最大值. k=0:两列都不选. k=1:取左弃右. k=2:选右弃左. k=3:左右都选,但分属于两个 ...

  9.  为什么上传文件的表单里要加个属性enctype----摘录

    上传文件的表单中<form>要加属性enctype="multipart/form-data",很多人只是死记硬背知道上传表单要这么写,知其然而不知其所以然.那到底为什 ...

  10. __new__ 与 __init__的区别

    原文地址:http://www.cnblogs.com/ifantastic/p/3175735.html 单例模式 class Singleton(object): def __new__(cls, ...