码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-04-13 23:35:35      阅读:699      评论:0      收藏:0      [点我收藏+]

标签:不同的   http   字段   prefix   类型   cond   并且   数据   过期   

今天遇到了一个前同事挖的坑,刷新缓存中商品信息时先让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个元素

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

标签:不同的   http   字段   prefix   类型   cond   并且   数据   过期   

原文地址:http://www.cnblogs.com/akaneblog/p/6706717.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!