Redis删除大集合操作(Lists,Sets)

Redis删除大集合操作(Lists,Sets),如果使用del命令,可能会导致redis卡死。毕竟redis是单线程执行的,遇到删除大数据命令,这个命令就会卡住,无法处理其他命令。

del

时间复杂度:O(N),其中N是要删除的密钥数。当要删除的键包含字符串以外的值时,该键的单个复杂性为O(M),其中M是列表、集合、排序集合或哈希中的元素数。删除包含字符串值的单个键是O(1)。

方案一:先rename,再用脚本逐批删除

rename,时间复杂度:O(1)这个命令可以执行非常快

将密钥重命名为newkey。当键不存在时返回错误。如果newkey已经存在,它将被覆盖,当发生这种情况时,RENAME将执行一个隐式DEL操作,因此,如果删除的key包含一个非常大的值,那么即使RENAME本身通常是一个常量时间操作,它也可能导致高延迟。

在集群模式下,key和newkey必须在同一个哈希槽中,这意味着实际上只有具有相同哈希标记的密钥才能在集群中可靠地重命名。

方案二:UNLINK

unlink

时间复杂度:对于每个移除的密钥,无论其大小为0(1)。然后该命令在不同的线程中执行O(N)操作以回收内存,其中N是已删除对象所组成的分配数。

这个命令与DEL非常相似:它删除指定的键。就像DEL a键不存在时被忽略一样。但是,该命令在另一个线程中执行实际的内存回收,因此它没有阻塞,而DEL是。这就是命令名的来源:该命令只是从键空间中取消键的链接。实际删除将在稍后异步进行

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值