首页 > 代码库 > redis过期键删除策略以及大key删除方法
redis过期键删除策略以及大key删除方法
今天遇到了一个前同事挖的坑,刷新缓存中商品信息时先让key过期,然后从数据库里取最新数据然后再放到缓存中,他是这样写的
redisTemplate.expire(CacheConst.GOOGS_PREFIX,1,TimeUnit.MILLISECONDS);
设置key过期为一毫秒,导致缓存中有时没有商品信息,因为在这一毫秒内有可能已经从数据库中取到了最新数据,并且又放到了缓存中,一毫秒过后key过期了,缓存中就没了商品信息。
正确的应该这样写redisTemplate.expire(CacheConst.GOOGS_PREFIX,-1,TimeUnit.MILLISECONDS)立马让key过期。
redis中对于有设置过期的key有三种处理方式
- 被动删除:这个key下一次被访问到的时候才会删除。
- 主动删除:Redis会定期主动淘汰一批已过期的key
- 当前已用内存超过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个元素
redis过期键删除策略以及大key删除方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。