从Redis中删除大集合对象的方法

本文介绍了一种在Redis中优雅删除大集合对象的方法,避免了直接使用del命令可能引起的高并发阻塞问题。通过Lua脚本逐批删除元素,有效防止了对系统造成过大压力。

Redis中的大集合对象,如set、zset等,如果有上千万个元素,一般是不能直接用del命令来删除的,因为del命令可能会耗时几秒钟,而redis本身是单线程的,在高并发的情况下会阻塞大量的请求,严重时可能引起雪崩。

那我们要怎么来删除它呢?

这里我们给出一个解决方案,即结合lua脚本来实现删除大对象。

先写如下lua脚本,保存为test_del.lua文件。

<<test_del.lua>>

local count=redis.call('zcard', 'big_obj_key')

while count>0 do

        redis.call('zremrangebyrank', ' big_obj_key', 0, 500)  // 每次删除500个元素

        count=redis.call('zcard', ' big_obj_key')

        print("Current count: ", count)

end

最后,在命令行使用如下命令执行该lua脚本即可。

bin/redis-cli -p 6370  -a  yourpasswd  --eval   /usr/local/redis/lua/test_del.lua

是不是很方便啊?

 

转载于:https://www.cnblogs.com/lightarc/p/redisdel.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值