在不影响性能的情况下,怎么快速批量删除redis数据?
黄舟
黄舟 2017-04-21 11:15:52
0
4
757

业务场景:
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 開始:

雷雷
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!