redis运维(六)redis-cli命令
wzj_110 2024-07-29 17:37:03 阅读 73
一 redis-cli
<code>注意: 'redis-cli'核'redis-server'版本必须适配 --> '见' redis-cli --version
提示: 不过一般安装服务端 redis-server 时'内置'了客户端 redis-cli
说明: redis-cli 是 redis 的一种命令行的'客户端'工具
备注: 'redis-server'的安装过程这里'不再'赘述
① redis-cli的命令行参数
优点:redis-cli 实现'非交互',意味者'批量',可以'自动化'
案例讲解
<code>细节:redis-cli客户端和redis-server版本'不适配',导致'-c'集群模式参数'不生效'
② 测试连通性
<code>1、ping 是'redis的命令' --> 检验'是否连接上'redis
2、说明:输入命令ping,返回'PONG',表示'已连接redis-server'
③ 环境变量登入
<code>方式1: redis-cli -a '指定密码'
方式2: auth '指定密码'
方式3: REDISCLI_AUTH '环境变量'
④ -i 定时任务
<code>1、-r 参数: 重复执行'一个命令'指定的'次数'
2、-i 参数: 设置命令'执行的间隔'
<code>案例: 每隔'1秒'执行一次,一共执行3次'info cpu'命令
⑤ -c 集群模式 重要
<code>1、与前面'单机/主从/哨兵'模式'不同'的是,客户端命令 redis-cli 需要增加一个'-c'参数
2、表示是'连接到集群',这样客户端的'读写行为'才是在'整个集群中可见'的
特点: 查询和删除的'solt'槽位'不在'当前节点,会'自动跳转'到目标节点
3、若'不加-c参数'虽然也可连接,但是仅仅是连接到'当前的节点',是无法进行数据读写的
备注: 除非所读写的数据的键值,经过'Hash 计算'得到的 slot 槽号,'刚好在这个节点'里面
其中:
1、'-c选项'表示开启'集群'模式
2、'-h 和-p 选项'指定redis集群'某一节点'的ip和端口
思考: 登录客户端'使用-c'与'不使用'的区别
解读: redis-cli -c -p 端口号 或者 redis-cli -p 端口号
1、使用-c会'自动重定向'key对应插槽的'服务端'
2、不使用-c'不会'自动重定向,会'报错',并告诉你应前往的'redis实例地址和端口'
场景: 批量删除前,查询'集群中对应pattern'的key
redis '5.0 +' 才提供了 '-c'的参数
redis集群的梦游模式/事务/槽位转移
<code>背景: Redis本身并'不支持批量删除key'的操作
redis-cli -c keys key* | awk -FS '{system("redis-cli -c del \"" $1 "\"")}'
redis-cli -c scan 0 MATCH key* COUNT 10000 \
| awk -FS '{system("redis-cli -c del \"" $1 "\"")}'
++++++++++++++ '分割线' ++++++++++++++
del命令'不支持通配符',所以当要'同时删除多个键'时比较麻烦,暂时只了解以下'两种'方法;
1: 结合linux的'管道'和xargs命令自行实现删除'所有符合pattern规则'的键
需求: 要删除'DIC:开头的键',可到redis目录下后执行
./redis-cli -h redis的ip -p redis端口 -a redis密码 KEYS "DIC:*" \
| xargs ./redis-cli -h redisip -p redis端口 -a redis密码 DEL;
2: 因为redis的del命令也支持多个建作为参数,所以也可以用如下命令:
./redis-cli -c -h redisip -p redis端口 -a redis密码 DEL \
`./redis-cli -c -h redisip -p redis端口 -a redis密码 KEYS "DIC*"`
备注: 第二个指令的'性能'更好一点
Redis实用小技巧:批量删除指定的key
<code>1、xargs后面的 '-n1' 是集群情况下要加的,不然当'集群key的数量大于1'时
会'报错' (error) CROSSSLOT Keys in request don’t hash to the same slot
redis集群批量模糊删除key
⑥ -x
<code>-x '参数': 从'标准输入'读取一个参数
echo -n 'wzj' | redis-cli -x set hello
细节: echo命令是'默认'带有'回车\n'的
⑦ --eval 运行外部文件lua脚本
<code>说明: 编写'简单'脚本时,'--eval'选项很'有用'
cat /tmp/script.lua --> '内容'
return redis.call('set',KEYS[1],ARGV[1])
redis-cli -h 127.0.0.1 -p 6379 --eval /tmp/script.lua wzj,tony
补充: 它使用'逗号'分隔'键'和'参数',所以'wzj'会填充'KEYS数组','tony'会填充'ARGV数组'
redis的eval命令使用
⑧ 批量删除 key 报错
1、问题'现象': java做'序列化'的时候生成了一些'特殊的key'
Warning: a NUL character occurred in the input
根因:key是JDK序列化后的字符串,xargs读取出来是乱码,无法删除
<code>2、问题'根因'
linux shell 删除key \xAC\xED\x00\x05t\x00\x04${key} 序列化16进制
<code>3、解决'策略1'
<code>注意: redis-cli一定要与redis-server '版本适配'
后续: 模拟'序列化'和'删除'的操作
redis解决key乱码
4、解决'策略2'
说明: '不推荐',因为'以此开头'的key可能'不符合'我们的预期
redis批量删除key 批量删除指定的key
<code>redis-cli -c -a 123456 keys '条件' | xargs -I {} redis-cli -c -a 123456 delete
备注: xargs -I {} 参数可以避免'key 中存在空格'导致的'参数拆分'异常问题
⑨ redis-cli --cluster 集群管理命令
强调:redis-cli -c 与 redis-cli --cluster '不同'
⑩ redis-cli 安全问题
<code>redis操作历史: '~/.rediscli_history'
<code>可以设置环境变量'REDISCLI_HISTFILE=/dev/null',它将'阻止'保存redis操作历史记录.
两种方式禁止redis记录
⑪ --bigkeys参数 --latency参数 -pipe参数 --scan --pattern参数
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。