redis过期键删除策略以及大key删除方法

今天遇到了一个前同事挖的坑,刷新缓存中商品信息时先让key过期,然后从数据库里取最新数据然后再放到缓存中,他是这样写的

redisTemplate.expire(CacheConst.GOOGS_PREFIX,1,TimeUnit.MILLISECONDS);

设置key过期为一毫秒,导致缓存中有时没有商品信息,因为在这一毫秒内有可能已经从数据库中取到了最新数据,并且又放到了缓存中,一毫秒过后key过期了,缓存中就没了商品信息。

正确的应该这样写redisTemplate.expire(CacheConst.GOOGS_PREFIX,-1,TimeUnit.MILLISECONDS)立马让key过期。

redis中对于有设置过期的key有三种处理方式

  1. 被动删除:这个key下一次被访问到的时候才会删除。
  2. 主动删除:Redis会定期主动淘汰一批已过期的key
  3. 当前已用内存超过maxmemory限定时,触发主动清理策略

直接删除大key是有风险的,key过大,直接删除时会导致Redis阻塞,不同类型的大key有不同的删除方式,

Large Hash Key 可使用hscan命令,每次获取500个字段,再用hdel命令,每次删除1个字段。

Large Set Key 可使用sscan命令,每次扫描集合中500个元素,再用srem命令每次删除一个键。

Large List Key可通过ltrim命令每次删除少量元素

Large Sorted Set Key使用sortedset自带的zremrangebyrank命令,每次删除top 100个元素

时间: 2024-12-18 06:29:38

redis过期键删除策略以及大key删除方法的相关文章

Redis 过期键的设置、获取和删除过期时间

Redis 过期键的设置.获取和删除过期时间 转自http://blog.51cto.com/littledevil/1813956 设置过期 默认情况下键是没有生存时间的,也就是永不过期,除非清空内存. 设置的键的生存时间也很容易,可以通过4个命令设置(任选一即可):EXPIRE.PEXPIRE.EXPIREAT.PEXPIREAT命令,这4个命令看起来不同但是背后实现原理都是一样的.常用的其实就是EXPIRE和PEXPIRE这两个,前者是以秒设置过期时间,后者是以毫秒. 以秒来设置,设置aa

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

Redis过期键的删除策略 对于过期键一般有三种删除策略 定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作: 惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键:如果没有过期,那就返回该键: 定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键.至于删除多少过期键,以及要检查多少个数据库,则由算法决定. 下面我们来看看三种策略的优缺比较: 定时删除策略对内存是

Redis过期键删除策略

三种删除策略: 定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作. 惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键:如果没有过期,就返回该键. 定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键.至于要删除多少过期键,以及要检查多少个数据库,则由算法决定. 在这三种策略中,第一种和第三种为主动删除策略,而第二种则为被动删除策略. 定时删除策略是对内存最友

Redis过期键删除策略及回收策略

一.前言 Redis的所有键都可以设置过期策略,Redis的每个设置了过期时间的key都会被放在一个独立的字典中,用于遍历删除. 二.过期策略 1.先区分两个概念,被动删除与主动删除 1)被动删除:key再被操作时,Redis主动检查key是否过期,过期则删除:   优劣:对CPU友好,只有CPU在被操作时删除,不浪费CPU时间:对内存不友好,如果同时大量key过期,这些key在被使用前不会被删除造成资源浪费: 2)主动删除:Redis会定期随机扫描一批设置了过期时间的key并进行删除处理:当已

redis 过期键删除策略

redis 的过期键的过期时间都保存在过期字典中,过期键的删除策略有3种 定时删除:在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即删除对键的删除操作. 惰性删除:放任键过期不管,但每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键.如果没有过期,就返回该键. 定期删除:每隔一段时间,程序对数据库进行一次检查,删除里面的过期键.至于删除多少过期键,以及检查多少数据库,有算法决定. 1 定时删除特点 优点:对内存友好,通过定时器可以保证过期键过期键

(五)关于过期键(1)过期键的设置、获取和删除过期时间

设置过期 默认情况下键是没有生存时间的,也就是永不过期,除非清空内存. 设置的键的生存时间也很容易,可以通过4个命令设置(任选一即可):EXPIRE.PEXPIRE.EXPIREAT.PEXPIREAT命令,这4个命令看起来不同但是背后实现原理都是一样的.常用的其实就是EXPIRE和PEXPIRE这两个,前者是以秒设置过期时间,后者是以毫秒. 以秒来设置,设置aaa这个键1秒后过期,1秒中以后再获取aaa这个键则返回空. 以毫秒来设置,设置bbb这个键10毫秒后过期. 命令 说明 EXPIREk

redis过期key的清理策略

一,有三种不同的删除策略(1),立即清理.在设置键的过期时间时,创建一个回调事件,当过期时间达到时,由时间处理器自动执行键的删除操作. (2),惰性清理.键过期了就过期了,不管.当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key (3),定期清理.每隔一段时间,对expires字典进行检查,删除里面的过期键. 二,详细说明三种清理方式的优劣(1)立即清理立即删除能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放.但是立即删除

redis过期策略和内存淘汰机制

目录 常见的删除策略 redis使用的过期策略:定期删除+惰性删除 定期删除 惰性删除 为什么要采用定期删除+惰性删除2种策略呢? redis内存淘汰机制 常见的删除策略 1.定时删除:在设置键的过期时间的同时,创建一个timer,让定时器在键的过期时间到达时,立即执行对键的删除操作.(主动删除) 对内存友好,但是对cpu时间不友好,有较多过期键的而情况下,删除过期键会占用相当一部分cpu时间. 2.惰性删除:放任过期键不管,但是每次从键空间中获取键时,都检查取到的键是否过去,如果过期就删除,如

redis的超时删除策略

这个问题有三种可能的答案,它们分别代表了三种不同的删除策略: ·定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作. ·惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键:如果没有过期,就返回该键. ·定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键.至于要删除多少过期键,以及要检查多少个数据库,则由算法决定. 在这三种策略中,第一种和第三种为主动删除策略,