起因
用户登录时如果是手机号登录,key会带国际区号和空格,
格式:user_detail::+86 15659810000
且当Redis识别到key包含特殊符号时,会在头尾都加上双引号,
导致实际存入Redis的key为 “user_detail::+86 15659810000”
当数据量大时,如果需要删除,一般都会使用Redis-Cli来进行批量删除
就会使用到keys/scan命令,这时候返回的结果,结果其实是有包含双引号的
但是接收结果时会用到linux命令 xargs, 关键就是这个xargs命令,它在接收时会把特殊符号过滤掉
查阅资料说 -0 参数可以将特殊字符普通化,但是试了没效果
这时候我的使用的-I 参数,重新将双引号拼接起来然后再执行命令,这时候就能删除头尾带有双引号的缓存了
最后Redis-Cli命令为
redis-cli -h [host] -p [port] -a [password] -n [database] keys "user_detail::*" | xargs -I {} echo '"{}"' | xargs redis-cli -h [host] -p [port] -a [password] -n [database] del
如果帮到你,请点个赞吧 O(∩_∩)O~