本篇博客是Redis系列的第5篇,主要讲解下Redis的过期键删除策略. 本系列的前4篇可以点击以下链接查看: Redis系列(一):Redis简介及环境安装 Redis系列(二):Redis的5种数据结构及其常用命令 Redis系列(三):Redis的持久化机制(RDB.AOF) Redis系列(四):Redis的复制机制(主从复制) 划重点:Redis的过期键删除策略也是面试中经常会被问的,我最近面试,被问到了好几次. 对于Redis服务器来说,内存资源非常宝贵,如果一些过期键一直不被删除,…
Redis过期键删除策略 Redis key过期的方式有三种: 被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key 主动删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动淘汰一批已过期的key 当前已用内存超过maxmemory限定时,触发主动清理策略 被动删除 只有key被操作时(如GET),REDIS才会被动检查该key是否过期,如果过期则删除之并且返回NIL. 1.这种删除策略对CPU是友好的,删除操作只有在不得不的情况下才会进行,…
Redis过期键删除策略 Redis中所有的键都可以设置过期策略,就像是所有的键都可以上"生死簿",上了生死簿的键到时间后阎王就会叉掉这个键.同一时间大量的键过期,阎王就会忙不过来.同时因为Redis是单线程的,导致阎王的处理时间会变得很长,而且处理繁忙,Redis就会出现卡顿现象. Redis有三种策略删除过期Key 相关命令 expire key seconds # 过期时间为秒数,key不存在时返回(integer) 0,key存在的时返回(integer) 1 pexpire…
文章首发于公众号:蘑菇睡不着,欢迎来看看 前言 Redis 中都是键值对的存储形式,键都是字符串类型的,而值有很多种类型,如 string.list.hash.set.sorted set等类型.当设置键值对时我们还应该为其设置过期时间,通过 expire 以及 pexpire 命令:还可以通过 setnx 命令设置.那么,当设置过期时间之后,到底是怎么将过期的键值对删除的那?想知道答案的话,我们就一起看看 Redis 的过期键删除策略.   在说删除策略之前有个点带大家先了解下,那就是如果确定…
Redis 过期键策略和内存淘汰策略 目录 Redis 过期键策略和内存淘汰策略 设置Redis键过期时间 Redis过期时间的判定 过期键删除策略 定时删除 惰性删除 定期删除 Redis过期删除策略 内存淘汰策略 设置Redis最大内存 设置内存淘汰方式 设置Redis键过期时间 Redis有四个不同的命令来设置生存时间(键可以存在多久)或过期时间(键什么时候会被删除). EXPIRE <key> <ttl> :表示将键 key 的生存时间设置为 ttl 秒. PEXPIRE…
Redis 中数据库键的过期时间都保存在过期字典中,当一个键过期了,Redis 存在三种不同的删除策略:定时删除.惰性删除和定期删除 定时删除 定义 在设置键的过期时间的同时创建一个计时器,让定时器在键过期时间来临时,立即执行对键的删除操作. 定时删除策略对内存是最友好的:通过使用定时器,定时删除策略可以保证过期键会尽快被删除,并且释放过期键所占用的内存. 但是另一方面,它对 CPU 时间是嘴不友好的:在过期键比较多的情况下,删除过期键这一行为可能会占用相当一部分的 CPU 时间,在内存不紧张但…
今天遇到了一个前同事挖的坑,刷新缓存中商品信息时先让key过期,然后从数据库里取最新数据然后再放到缓存中,他是这样写的 redisTemplate.expire(CacheConst.GOOGS_PREFIX,1,TimeUnit.MILLISECONDS); 设置key过期为一毫秒,导致缓存中有时没有商品信息,因为在这一毫秒内有可能已经从数据库中取到了最新数据,并且又放到了缓存中,一毫秒过后key过期了,缓存中就没了商品信息. 正确的应该这样写redisTemplate.expire(Cach…
Redis的过期键的过期时间都保存在过期字典中,过期键的删除策略有三种,分别是定时删除.惰性删除和定期删除. 定时删除 定时删除策略,是指在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间到的时候,立即执行对键的删除操作. 定时删除策略的优点 对内存友好,通过定时器可以保证过期键能尽可能快地被删除,并释放过期键占用的空间. 定时删除策略的缺点 1.对CPU不友好.在过期键较多的情况下,删除过期键可能会占用相当一部分的CPU执行时间.在内存不紧张而CPU紧张的情况下,将CPU资源用在…
Redis持久化 一.RDB(Redis DataBase) 1.介绍 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里. Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件.整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能 如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式…
Redis的过期时间机制和内存淘汰策略    Redis的数据是存储在内存中的,而服务器的内存大小是有限制的,除非宕机,否则这些数据会一直存在,对于一些不再使用的key,也应当进行删除,否则会浪费内存空间.而且有些场景需要这种有失效性的数据,比如限时优惠活动.用户session.验证码等.过了一定的时间就需要删除这些数据.为了解决这个问题,Redis提供了可以为这个值设置一个过期的时间功能,当达到这个过期时间后,将这个数据进行删掉来释放内存空间. 一.过期时间机制    redis对存储值的过期…