Redis删除一个比较大的Key会发生什么?

15 篇文章 1 订阅
14 篇文章 0 订阅

什么是Redis大Key

我认为可以从Space Complexity和Time complexity两个方向定义一个大Key。

            1.Space Complexity,指的就是这个Key所占用的空间大小,Redis是对内存的操作所以这里是在内存中占用空间的大小。一个string类型的Key最大为512MB,你的string Key占用了400MB,这就是一个比较大的Key了。

            2.Time complexity,指的就是一个Key,存储了太多的字段,虽然所有的字段加起来也没有占用多大的内存,但是由于数量的原因它的对应访问模式时间复杂度较高,而你要删除这个字段比较大的Key就要格外注意千万不能直接删除,因为Redis进程会阻塞10秒的时间。

下面截取Redis官网的一句话:

Time complexity: O(N) where N is the number of keys that will be removed. When a key to remove holds a value other than a string, the individual complexity for this key is O(M) where M is the number of elements in the list, set, sorted set or hash. Removing a single key that holds a string value is O(1).

时间复杂度:O(N),其中N是将被删除的密钥数。当要删除的键持有字符串以外的值时,此键的单独复杂度是O(M),其中M是列表、集合、排序集或散列中的元素数量。移除包含字符串值的单个键是O(1)。

说了这么多,那么该如何正确的删除大 Key 呢?

说到这里那么我们如何删除掉一个比较大的Key呢:

Redis的过期策略就是一个比较好的方式,其中有三种:

  1. 当前内存使用超过maxmemory限定出发清理策略。
  2. 被动删除:Key下一次被访问到的时候才会删除。
  3. 主动删除:Redis定期主动删除过期的Key。

说到这里,我们应该去避免产生一个不合理的大Key去产生需要手动删除的情况,再有大家千万不要未经测试直接就去删除掉生产环境上的大Key,连锁反应、蝴蝶效应可不是闹着玩的!!!

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值