【Redis】redis 安装与客户端 redis-cli 的使用 (批量操作)
Part1、在 Centos 中安装 Redis
安装步骤
先创建一个文件夹用于存放 redismkdir /data/redis & cd /data/redis
1.使用以下命令下载,提取和编译 Redis:
最新稳定版本请看 https://redis.io/download
2. 配置
在 make 成功以后,会在 src 目录下多出一些可执行文件:redis-server
,redis-cli
等等。方便使用用 cp 命令复制到 usr 目录下运行。
然后新建目录,存放配置文件
3.修改配置文件 redis.conf
修改一些参数
4.启动 redis
在这里插入图片描述
5. 使用客户端/usr/local/bin/redis-cli
安装可能出现的问题
问题 1
异常原因:没有安装 gcc 解决方案:yum install gcc-c++
上面安装完 gcc 之后执行一下make distclean
清理 一下 再执行make
;
问题二
问题原因: redis 和 gcc 版本问题解决方法 升级一下gcc版本
上面安装完 gcc 之后执行一下make distclean
清理 一下 再执行make
;
make
执行成功之后 会提示It's a good idea to run 'make test'
所以接下来我们make test
问题三You need tcl 8.5 or newer in order to run the Redis test
异常原因:没有安装 tcl 解决方案 yum install -y tcl
。
Part2、redis-cli,Redis 命令行界面
客户端回复结果作为其他的输出
我们只想命令的时候通常需要先 /usr/local/bin/redis-cli
链接到 redis 的客户端上去再操作;但是有的时候 我不想那么麻烦 ,能不能直接执行客户端的命令,并且将输出 输出到别的地方
加上--no-raw 将类型也打印出来/usr/local/bin/redis-cli --no-raw incr mycounter > /tmp/output.txt
注意 如果不想要带类型 则 --raw
主机,端口,密码和数据库
如果我们要连接指定的客户端并且还有密码怎么办,带上参数/usr/local/bin/redis-cli -h localhost -p 6379 ping
如果您的实例受密码保护,则该-a <password>
选项将执行身份验证,从而省去了显式使用 AUTH 命令的需要:/usr/local/bin/redis-cli -a myUnguessablePazzzzzword123 ping
统计
从其他程序获取内容当做 redis 的输入
假如我想把某个文件作为 value 存到 redis 中; 那么有两种方式
1.将我们从 stdin 读取的有效负载用作最后一个参数/usr/local/bin/redis-cli -x set incrcount < /tmp/output.txt
2.另一种方法是提供 redis-cli 一系列写入文本文件的命令:vim /tmp/commands.txt
创建这个文件,并写入一系列 redis 中的命令
然后执行cat /tmp/commands.txt | /usr/local/bin/redis-cli
如果想打印出来不想带类型 记得在后面加上--raw
上面依次 commands.txt 执行 所有命令,redis-cli
就像它们是由用户交互键入的一样。如果需要,可以在文件内用字符串引号,以便可以在其中包含带空格或换行符的单个参数或其他特殊字符
可以在最后加上 > /tmp/output.txt
将输出结果存放到别的文件中
连续运行相同的命令
此功能由两个选项控制:-r <count>和-i <delay>
。第一个说明运行命令的次数,第二个说明配置不同命令调用之间的延迟(以秒为单位)(可以指定十进制数(如 0.1,以表示 100 毫秒)。
默认情况下,间隔(或延迟)设置为 0,因此命令会尽快执行:
例如 我想每 2 秒执行一个自增操作
除了上面的方式 还可以在交互模式中前面加数字用于重复执行命令
随时间监视 RSS 内存大小
redis-cli -r -1 -i 1 INFO | grep rss_human
批量操作
vim /tmp/commands.txt
我们先把批量命令放到一个文件中
然后执行批量执行的命令cat /tmp/commands.txt | /usr/local/bin/redis-cli --pipe > /tmp/batchout.tx
使用命令 --pipe
使用管道模式 进行批量插入;执行完毕之后我们可以看到输出结果
全部执行成功;
如何批量删除指定的数据
如果我想删掉所以以 1 为前缀的 key 应该怎么实现/usr/local/bin/redis-cli keys '1*' |xargs /usr/local/bin/redis-cli del
连续统计模式
请使用该--stat
选项来实时监控
Redis 实例-i
: 更改发出新行的频率。默认值为一秒钟。
在这种模式下,每秒钟都会打印一条新行,其中包含有用的信息以及旧数据点之间的差异。您可以轻松了解内存使用情况,连接的客户端等情况
扫描大键
在这种特殊模式下,它 redis-cli 充当键空间分析器。它在数据集中扫描大键,但也提供有关数据集所包含的数据类型的信息。该模式通过该--bigkeys 选项启用,并产生非常详细的输出:
先设置一个大值,将之前一个大文件设置为一个值/usr/local/bin/redis-cli -x set bigkeyname < /tmp/commands.txt
那么这个 key 为 bigkeyname 的值应该一会扫出来肯定是大键了;
redis-cli --bigkeys
该命令的扫描是使用的SCAN命令
,因此不会影响操作
获取按键列表
redis-cli --scan | head -10
扫描 并打印前面 10 行使用带有该选项的 SCAN 命令的基础模式匹配功能--pattern。redis-cli --scan --pattern '*-11*'
可以过滤指定的 key
监控 Redis 中的操作命令
redis-cli monito
redis 的所有命令都会实时打印出来
还可以加上|grep
进行过滤
RDB 文件的远程备份
在 Redis 复制的第一次同步期间,主服务器和从服务器以 RDB 文件的形式交换整个数据集。redis-cli 为了提供远程备份功能,可以利用此功能,该功能允许将 RDB 文件从任何 Redis 实例传输到运行的本地计算机
redis-cli --rdb /tmp/redisdump.rdb
;
执行 LRU 模拟
警告:该测试使用流水线操作,并且会对服务器造成压力,请勿将其用于生产实例。
如果批量删除 带\n 后缀的 key
有个坑,就是我在执行了这个操作之后,redis 有很多测试数据 'lru:*'的数据;如何批量删除是一个问题; 用上面的批量删除不行;
返回的都是 0 说明删除失败;
查看xargs详解的文档; 我们加上一个 -t
的参数-t 表示先打印命令,然后再执行。
看看我们执行的是什么
可以了解到我们只想的是下面的命令redis-cli -a daimler1818 del lru:17288 lru:3818127
看起来貌似没有问题,难道是这个 key 有问题?那我们get
一下看看有没有问题; get
查询之后也是没有数据;那就奇怪了; 我们连上交互模式上去看看;keys 'lru:*'
可以看到这个 key 是带有\n
的并且还是有双引号的;如果获取值的话 应该get "lru:3717577\n"
这样子才行;
解决方法
第一步 将 key 拼接成我们想要的样子
命令解释/data/codis/codis/redis-cli -a password keys "lru*"
是过滤我们的数据head -10
是只取上面过滤数据的前 10 行; 也可以去掉这句 就是全部xargs -I {} -t echo 'del "{}\n"'
: 中的{}
是占位符 就是过滤出来的每一项数据; 前后的{}要一致;你也可以用其他的字符来代替; echo 'del "{}\n"'
表示输出字符串 最终输出的是拼接好的比如输出 del "lru:3717577\n"
> /tmp/lrutest.txt
是将上面输出的存放到文件中
第二步 批量执行
cat /tmp/lrutest.txt | ./redis-cli -a password -x
结果
最好使用--pipe 管道来进行批量操作
cat /tmp/lrutest.txt | ./redis-cli -a password --pipe
Part3 参考文档
Redis批量执行命令redis-cli,Redis命令行界面
在这里插入图片描述
版权声明: 本文为 InfoQ 作者【石臻臻的杂货铺】的原创文章。
原文链接:【http://xie.infoq.cn/article/fcd0ae03d8e3b0e14f46b1489】。未经作者许可,禁止转载。
评论