redis中关于过期键的删除策略
我们已经了解到了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中关于过期键的删除策略的更多相关文章
- redis学习笔记——Redis过期键的删除策略
Redis过期键的删除策略 对于过期键一般有三种删除策略 定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作: 惰性删除:放任键过期 ...
- redis 过期键的删除策略?
1.定时删除:在设置键的过期时间的同时,创建一个定时器 timer). 让定时器在键 的过期时间来临时,立即执行对键的删除操作. 2.惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的 ...
- Redis 中的过期删除策略和内存淘汰机制
Redis 中 key 的过期删除策略 前言 Redis 中 key 的过期删除策略 1.定时删除 2.惰性删除 3.定期删除 Redis 中过期删除策略 从库是否会脏读主库创建的过期键 内存淘汰机制 ...
- Redis详解(四)——删除策略
Redis详解(四)--删除策略 Redis中的数据特征 Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令来获取其状态,当 key 不存在时,返回 -2 . 当 k ...
- Redis 中的过期元素是如何被处理的?视频+图文版给你答案——面试突击 002 期
本文以面试问题「Redis 中的过期元素是如何被处理的?」为切入点,用视频加图文的方式和大家聊聊 Redis 过期元素被处理的相关知识点. 涉及的知识点 过期删除策略有哪些? 这些过期策略有哪些优缺点 ...
- 深入理解Redis中的主键失效及其实现机制
参考:http://blog.sina.com.cn/s/articlelist_1221155353_0_1.html 作为一种定期清理无效数据的重要机制,主键失效存在于大多数缓存系统中,Reids ...
- ASP.NET缓存中Cache过期的三种策略
原文:ASP.NET缓存中Cache过期的三种策略 我们在页面上添加三个按钮并双击按钮创建事件处理方法,三个按钮使用不同的过期策略添加ASP.NET缓存. <asp:Button ID=&quo ...
- redis中key过期事件
刚到新公司一个月左右,有个新需求,想做定时任务,比如在用户注册时间的3天后推送用户一条消息. 从刚开始脑子里面闪现的数据库轮询,立马否定掉(浪费资源),再到linux系统的定时任务,但是当用户量过大时 ...
- Redis中关于Hash键的一些问题
Hash键存在的意义: 1.Hash键可以将信息凝聚在一起,而不是直接分散的存储在整个Redis中,这不仅方便了数据管理,还可以尽量避免一定的误操作: 2.避免键名冲突: 3.减少内存占用.(最重要的 ...
随机推荐
- 原生js实现 table表格列宽拖拽
查看效果 <!DOCTYPE html> <html> <head> <meta charset="gbk"> <title& ...
- 【转载】linux之sed用法
linux之sed用法 原文地址:http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html sed是一个很好的文件处理工具 ...
- 【LeetCode】Maximum Depth of Binary Tree(二叉树的最大深度)
这道题是LeetCode里的第104道题. 给出题目: 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例: 给定 ...
- pytorch中的math operation: torch.bmm()
torch.bmm(batch1, batch2, out=None) → Tensor Performs a batch matrix-matrix product of matrices stor ...
- 【bzoj4237】稻草人 分治+单调栈+二分
题目描述 JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典. 有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地.和启示中的一样,田地需要满足以下条件: ...
- BZOJ 3850: ZCC Loves Codefires【贪心】
Though ZCC has many Fans, ZCC himself is a crazy Fan of a coder, called "Memset137". It wa ...
- BZOJ 1260: [CQOI2007]涂色paint【区间DP】
Description 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续 ...
- Spoj-NPC2015A Eefun Guessing Words
Eefun Guessing Words Eefun is currently learning to read. His way of learning is unique, by trying ...
- noj 2068 爱魔法的露露 [线性扫一遍]
njczy2010 2068 Accepted 325MS 8052K 1450Byte G++ 2014-11-13 11:20:40.0 爱魔法的露露 时间限制(普通/Java) : 1200 ...
- MYsql 锁详解 锁 与索引的关系
原文:http://blog.csdn.net/xifeijian/article/details/20313977#t10 mysql innodb的锁是通过锁索引来实现的. select ...