使用下面的命令可以查到一堆 key
redis-cli -a myPassword -h redis-host -p 6379 --scan --pattern '*myKey*'
但使用下面的命令,却无法删除成功
redis-cli -a myPassword -h redis-host -p 6379 --scan --pattern '*myKey*' | xargs redis-cli -a myPassword -h redis-host -p 6379 unlink
(integer) 0
当然了, 把 unlink
改成 del
也是一样的效果, 不知道大家有没有解决过一样的问题?
1
Azone 2023-07-14 16:37:08 +08:00
xargs 是不是少个 -n 1 的参数
|
2
JimmyChan1506 OP @Azone 加了试了一下还是没有能成功删除
|
3
Red998 2023-07-14 16:55:23 +08:00
用 lua 脚本删除呗 、数据不多 就直接 del
|
4
Red998 2023-07-14 16:59:10 +08:00
unlink 可不一样 虽然是卸载了查询不到 但是 redis 还没有真正释放内存、有定时任务会清理。del 就是直接释放内存空间。但是如果大 key 删除就会阻塞其他命令
|
5
aaronkk 2023-07-14 17:10:46 +08:00
据量大的话要避免阻塞,用 unlink 异步删除比 del 更安全
|
6
8355 2023-07-14 17:13:05 +08:00
用 lua 脚本
local keys = redis.call('KEYS', 'aaa*') for i, key in ipairs(keys) do redis.call('UNLINK', key) end |
8
JimmyChan1506 OP @Red998 主要是想知道这种命令应该怎么写, 删 key 倒不是目的了
|
9
aaronkk 2023-07-14 17:26:35 +08:00
集群,带上-c 参数试试
|
10
JimmyChan1506 OP @aaronkk 加了, 没用
|
11
JimmyChan1506 OP @Azone 加了-t 和-n 1 参数后, 发现是把 key 按空格键对一个 key 进行多行分割了, 不明白为何加了 -n 1 之后还是会出现这种情况 .....
|
12
JimmyChan1506 OP key 是类似于 "aaa::bb{cc='a', id=null } theReqeust[id=null;no=aa;]" 这样的形式
|
13
rrfeng 2023-07-14 18:07:39 +08:00 via Android
先看看 scan 。的输出啊,不一定是只有 key
xargs 直接干也是够大胆… |
14
yangxx 2023-07-14 18:26:18 +08:00
用这样的命令试下,redis-cli -h localhost --scan --pattern '*test*' |xargs -n 1 echo unlink |redis-cli -h localhost
|
15
pubby 2023-07-14 20:50:59 +08:00 via iPhone
按行读取试试
SCAN | while read k; do DEL $k; done |
16
dorothyREN 2023-07-14 21:46:51 +08:00
redis-cli -a myPassword -h redis-host -p 6379 keys '*myKey*' | | xargs redis-cli -a myPassword -h redis-host -p 6379 DEL
|
17
worldOnlyYou 2023-07-15 10:54:34 +08:00
redis-cli scan 返回的 key 前面还有序号的,你这样直接删肯定不行
|
18
JimmyChan1506 OP @worldOnlyYou 那应该怎么搞呢?
|
19
JimmyChan1506 OP @worldOnlyYou 我把 xargs 前面的部分执行, 取其中一个 key 来 del, 是没有问题的
|
20
JimmyChan1506 OP @rrfeng 测试环境, 为开发方便
|