在不影響效能的情況下,怎麼快速批次刪除redis資料?
黄舟
黄舟 2017-04-21 11:15:52
0
4
802

業務場景:
redis數據切換到Oracle,取消持久化,redis隻做緩存

具體需求:
從redis從庫裏獲得了400w個無過期時間的hashkey,需要在主庫中將其刪除

矛盾點:
1.如果直接批量刪除會導致redis擁塞,影響正常業務
2.如果每刪除一個key,sleep50ms,不會影響業務,但是根據經驗要跑兩天

最終問題:
在不影響性能的情況下,怎麼快速批量刪除redis數據?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回覆(4)
Peter_Zhu

Redis刪key刪得飛快,400w也不在話下。我懷疑其實瓶頸在於網路。

如果你是一個key刪的,每次發送一個命令都會導致客戶端等待redis的回复,浪費了大量網路頻寬。

可以試試用pipelining/transactions。在不飽和redis端網路頻寬的前提下,以最大速度發送命令,然後一次執行。

如果這都不行的話,可以寫一個Lua腳本,識別並刪除無用的key,發送到redis用eval執行。這樣應該不會阻塞網路。

如果這樣還是影響業務的話。 。終極解決方案是建立一個master/slave,在slave上刪除key,而將請求用master處理。刪完key之後把slave升遷成master,再將請求轉向它。

迷茫

嘗試下 redis 的 eval 指令。

例如刪除 old-fashioned: 開頭的所有 KEY

eval "redis.call('del', unpack(redis.call('keys','old-fashioned:*')))" 0

如果單次刪除效能消耗大,可以考慮分批刪除。

伊谢尔伦

小弟愚見,可半夜2點刪一下,大概卡頓最長時間可能也就是1min吧,這個時間點應該不會有幾個人用,除非是百度淘寶之類的24小時流量網站!不用感謝我,我叫雷鋒

巴扎黑

雷雷

從 Redis 3.4 開始:

雷雷
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板