為啥會有這篇文章呢? 在redis裡我需要批量刪除一些 "特殊" 的資料...這些特殊的資料用正常方法比較難刪除...所以記錄一下我的刪除方法..
我再用springboot整合spring的@cacheable的時候遇到了一些比較麻煩的事情...
第乙個是序列化問題...相信大家一般都會遇到過..
redistemplate預設用的是jdkserializationredisserializer
所以會生成這個樣子的字串...
其實這個樣子的字串也沒關係......只要他能正常刪除就行了...可是偏偏很多視覺化工具都不支援...
redis本身是沒有批量刪除命令的...可是話工具是提供批量刪除的..原理是把所有滿足條件的key找出來1個1個刪除...那現在問題就是他key不認識...是亂碼..所以也就刪除不了了..
在命令列1個1個刪除是沒問題的...但是key多了就gg了.......
用這種jdk自帶的序列化來序列化string的key我覺得是不合理的...這個key看都看不懂...所以我們可以指定用其他方法來序列化key...
spring本身提供了string的序列化方式(stringredisserializer)...所以我們可以用這個序列化類來序列化key
這樣生成的key很正常..很美觀...也是我們想要的
方法1是一種解決辦法...但是最為學習來說我希望能有一種不是迴避而是通過技術手段來解決這個問題的方法...方法1的解法是可行的.也是不錯的...但到底是有沒有辦法批量去刪除redis的key...
有的...網上大部分給的解法是這樣的:
1 redis-cli -h 192.168.0.8 -p 6380 keys "這樣是一種解決辦法...但是可能是我linux命令不太好吧...這種刪除方法對於key裡面有\xac等jdk序列化生成的字元的時候是會報錯的...如果這種方法不報錯...那視覺化工具也是能刪除的...所以這就很尷尬了...obj_base_*
" |xargs redis-cli -h 192.168.0.8 -p 6380 del
xargs: warning: a nul character occurred in the input. it cannot be passed through in the argument list. did you mean to use the --null option?可能精通linux命令的小朋友會有什麼命令可以處理這些字元吧...但是我還不太會....= =
所以我自己用另外1種辦法...
我想:在命令列可以刪除.那再命令列可以獲取真正的帶引號的字串..那只要批量執行這個命令列就ok了吧..
redis是支援lua指令碼的...那我自己寫個lua指令碼就行了吧
花了十幾分鐘學習了語法以後成功寫出了1個非常簡單的指令碼...但是還是蠻實用的..
這樣就比較完美的解決了批量刪除問題.
redis可以支援lua指令碼真的很好...通過這個指令碼可以做一些擴充套件功能...
那麼我能不能自定義一些dels命令去呼叫lua指令碼做批量刪除呢? 值得嘗試.....
redis批量刪除
redis中沒有批量刪除資料的指令,但可以借助linux的指令xargs來批量刪除 如果redis cli沒有設定成系統變數,需要指定redis cli的完整路徑,如 如果要指定 redis 資料庫訪問密碼,使用下面的命令 如果要訪問 redis 中特定的資料庫,使用下面的命令 刪除所有key,可以...
redis批量刪除keys
刪除 go mytopicindex開頭的key.刪除指定ip鏈結的 redis伺服器的keys redis cli h host keys xargs redis cli h host del 例如 redis cli h redis1.cloud.golomee.com keys go myto...
redis批量刪除Key
批量刪除key redis 中有刪除單個 key 的指令 del,但好像沒有批量刪除 key 的指令,不過我們可以借助 linux 的 xargs 指令來完成這個動作 redis cli keys xargs redis cli del 如果redis cli沒有設定成系統變數,需要指定redis ...