背景就是
要查询一批键值对进行删除
通过keys
k
e
y
∗
匹配出来要删除的
k
e
y
然后通过
d
e
l
命令删除想着用
s
h
e
l
l
直接把查询出来键
{key}* 匹配出来要删除的key 然后通过del命令删除 想着用shell直接把查询出来键
key∗匹配出来要删除的key然后通过del命令删除想着用shell直接把查询出来键{key}通过管道 执行xargs 进行删除 发现 16进制字符进去socket管道时字符编码导致redis中key匹配不一致导致无法删除
redisTemplate 序列化进去的key值变成
\xAC\xED\x00\x05t\x00\x04${key}
导致在shell 执行 redis-cli 删除命令不成功
原本bash
redis-cli -p ${prot} -a ${password} --csv --no-auth-warning keys "*${key}*" |xargs redis-cli -p ${prot} -a ${password} --no-auth-warning del
针对序列化进去 key变成了16进制,普通shell 执行通过xargs 时 转入进去redis key不相对应
修改后
redis-cli -p ${prot} -a ${password} --csv --no-auth-warning keys "*${key}*" | sed 's#,#\n#g' | awk '{print "del " $1}' | redis-cli -p ${prot}-a ${password} --no-auth-warning