网上搜索,一般三种方法:
一.使用命令行批量删除redis的key
二.使用图形界面工具RedisDesktopManager
三.使用jedis批量删除keys
今天记录第一种方式(命令行批量删除)删除
测试环境,数据量2百多万
1.ssh登录redis服务器(root)
cd /opt/redis/ (redis安装目录,自行修改)
2. ./redis-cli -h host -p 6379 keys 'CL*' | xargs -0 ./redis-cli -h host -p 6379 del
语句含义:删除以CL前缀开头的key 但是非常遗憾,因为这个key有特殊字符,删除报错:
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
eg:这两种格式的key有特殊字符,删除不掉,导致上面语句报错
CL_DETAIL_NAME_В'ячеслав Степанович Тімченко_SET
CL_DETAIL_NAME_北京多氪信息科技有限公司(krkr)_SET
3.将./redis-cli -h host -p 6379 keys 'CL*' > xn.sh
语句含义:将CL开头的key导入文件xn.sh
vim xn.sh
:%s/^/" (key左边加双引号)
:%s/$/" (key又边加双引号)
:%s/^/.\/redis-cli -h host -p 6379 DEL /g
:wq!
4. 查看xn.sh,每行语句格式变成这样即可 ./redis-cli -h host -p 6379 del "CL_DETAIL_NAME_埃利特航空科技(河北)有限公司_SET"
5.chmod +x xn.sh
语句含义:变成可执行文件
6. ./xn.sh
语句含义:执行可执行文件
shell端显示
(integer) 1
(integer) 1
(integer) 1
(integer) 1
(integer) 1
(integer) 1
(integer) 1
(integer) 1
(integer) 1
(integer) 1
(integer) 1
(integer) 1
完成!
同事解决方式,效率高:/opt/redis/bin/redis-cli -c --raw -a ecBskzn10akf --no-auth-warning -p 6001 -h host keys CL_*_SET|sed 's/^/del "/g;s/$/"/g'|/opt/redis/bin/redis-cli -c --raw -a ecBskzn10akf --no-auth-warning -p 6001 -h host --pipe
解决问题过程中学到的命令:
1.vim
vim 模式中,查看总行数
:set number
shift+g 调到最后一行就是总条数
vim +行号 文件名
2.xargs
xargs,是一个在Linux系统中比较常用的一个命令,它可以将标准输入的每行中的字符串拼成一个命令行,并执行它。