Redis批量删除key

Redis大约 822 字

需求背景

Java使用RedisTemplate时会把key存入\xac\xed\x00\x05w\x03这种格式,原因是因为RedisTemplate默认使用JdkSerializationRedisSerializer。可使用StringRedisTemplate代替之。

需批量删除\xac\xed\x00\x05w\x03开头的key。

解决方法

方法一

redis-cli -h 127.0.0.1 -p 6379 keys "*keys*" | xargs redis-cli -h 127.0.0.1 -p 6379 del

因为key是JDK序列化后的字符串,xargs读取出来是乱码,无法删除。故使用了方法二(适用于key不多的情况下)

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?

方法二

编写lua文件

local key=KEYS[1]
local list=redis.call("keys", key);
for i,v in ipairs(list) do
    redis.call("del", v);
end

redis调用lua脚本

redis-cli -h 127.0.0.1 -p 6379 --eval ./del.lua "*keys*" 

备注

如果批量删除的不是JDK序列化后的key,而key又很多的情况下,可使用scan扫描删除

redis-cli -h 127.0.0.1 -p 6379 --scan --pattern '*keys*' | xargs -L 100 redis-cli -h 127.0.0.1 -p 6379 del
阅读 936 · 发布于 2019-10-21

————        END        ————

扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看换一批