從Redis中刪除大集合對象的方法


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

是不是很方便啊?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM