一、介绍

redis学了有一段时间了,以前都是看视频,看教程,很少看官方的东西。现在redis的东西要看的都差不多看完了。网上的东西也不多了。剩下来就看看官网的东西吧,一遍翻译,一遍测试。不错的使用体验,今天开始就写一下redis的客户端的使用,也就是redis-cli工具类,这个文件的内容真不少,一次写完有点吃力。分多次写吧。

二、使用详解

 1、redis-cli,Redis命令行界面

redis-cli是Redis命令行界面,它是一个允许向Redis发送命令、并直接从终端读取服务器发送的回复的简单的程序。

它有两种主要模式:一种交互模式,其中有一个REPL(读取评估打印循环),用户输入命令并获取回复;另一种模式是将命令作为redis-cli的参数发送,执行并打印在标准输出中。

在交互模式下,redis-cli具有基本的行编辑功能,可以提供良好的打字体验。

然而,redis-cli不仅仅具有以上功能,还有更高级的用法。有些选项可用来启动程序并将其置于特殊模式之下,以便redis-cli可以完成更复杂的任务,如模拟从站并打印从主站接收到的复制流,检查Redis服务器的延迟,并显示统计数据,甚至是延时采样和频率的ASCII-art频谱图,以及其他许多事情。

本指南将涵盖redis-cli的不同方面,从最简单到最高级的结尾。

如果您要广泛使用Redis,或者您已经这么做了,那么很可能会碰巧使用redis-cli。 花一些时间熟悉它可能是一个非常好的主意,一旦你知道了命令行界面的所有技巧,你就会更有效地使用Redis。

 2、命令行的用法

只需运行一个命令并在标准输出上打印其答复就如同输入要作为redis-cli的分隔参数执行的命令一样简单:

        $ redis-cli -h 192.168.127.130 -p  incr mycounter
(integer)

该命令的结果是“7”。 由于Redis的结果是强类型的(它们可以是字符串,数组,整数,NULL,错误等等),您可以看到括号之间的就是结果的类型。 但是,当redis-cli的输出必须用作另一个命令的输入,或者我们希望将它重定向到一个文件时,这并不是一个好的做法。

实际上,redis-cli当检测到标准输出是一个tty设备时就会来显示这些附加信息以帮助提高人们的可读性。 否则,它将通过 auto-enable 启用原始输出模式,如下例所示:

        $ redis-cli -h 192.168.127.130 -p  incr mycounter > /tmp/output.txt
$ cat /tmp/output.txt

由于CLI检测到输出不再写入终端,因此这次输出中才省略了(整数)这个显示。 你甚至可以在终端上用--raw选项强制原始输出:

        $ redis-cli -h 192.168.127.130 -p  --raw incr mycounter
        

同样,通过使用--no-raw,可以在写入文件或将管道传送到其他命令时强制读取可读的输出。

 3、主机,端口,密码和数据库

默认情况下,redis-cli在127.0.0.1端口6379连接到服务器。正如您所猜测的,您可以使用命令行选项轻松更改此设置。 要指定不同的主机名或IP地址,请使用-h。 为了设置不同的端口,请使用-p。

        $ redis-cli -h 192.168.127.130 -p  ping
PONG

如果您的实例受密码保护,-a <密码>选项将执行身份验证,以保证明确使用AUTH命令的需要:

        $ redis-cli -h 192.168.127.130 -p  -a myUnguessablePazzzzzword123 ping
PONG

最后,可以通过使用-n <dbnum>选项发送一个命令,该命令对除默认数字零以外的数据库号进行操作:

        $ redis-cli -h 192.168.127.130 -p  flushall
OK $ redis-cli -h 192.168.127.130 -p -n incr a
(integer) $ redis-cli -h 192.168.127.130 -p -n incr a
(integer) $ redis-cli -h 192.168.127.130 -p -n incr a
(integer)

部分或全部信息也可以通过使用-u <uri>选项和一个有效的URI来提供:

        $ redis-cli -u redis://p%40ssw0rd@redis-16379.hosted.com:16379/0 ping
PONG

4、从其他程序获取输入

有两种方法可以使用redis-cli来获取来自其他命令的输入(基本上来自标准输入)。 一种是使用我们从标准输入读取的有效数据作为最后一个参数。 例如,假设在我的电脑里,为了将Redis的key设置到文件/etc/services的内容里,我可以使用-x选项:

        $ redis-cli -h 192.168.127.130 -p  -x set foo < /etc/services
OK
$ redis-cli -h 192.168.127.130 -p getrange foo
"#\n# Network services, Internet style\n#\n# Note that "

正如您在上述会话的第一行中看到的那样,SET命令的最后一个参数未被指定。 参数只是SET foo,并没有为我希望的key设置的实际的值。

相反,指定了-x选项,并将文件重定向到CLI的标准输入。所以输入被读取,并被用作命令的最后一个参数。这对编写脚本很有用。

另一种不同的方法是为redis-cli提供一个写在文本文件中的命令序列:

       $ cat /tmp/commands.txt
set foo
incr foo
append foo xxx
get foo $ cat /tmp/commands.txt | redis-cli -h 192.168.127.130 -p
OK
(integer)
(integer)
"101xxx"

command.txt中的所有命令都由redis-cli一个接一个地执行,就好像它们是由用户交互式键入的一样。 如果需要,可以在文件内使用双引号来标识字符串,这样在字符串中间就可以包含空格或换行符或其他特殊字符,但是此字符串是作为一个参数使用的:

        $ cat /tmp/commands.txt
set foo "This is a single argument"
strlen foo
$ cat /tmp/commands.txt | redis-cli -h 192.168.127.130 -p
OK
(integer)

5、连续运行相同的命令

在执行过程中,当用户选择暂停的情况下执行相同命令的指定次数是可行的。这在不同情况下很有用,例如,当我们想要持续监视一些 key 的内容或INFO字段输出时,或者当我们想模拟一些重复写入事件时(比如每5秒将一个新项目推入列表)。

该功能由两个选项控制:-r <count>和-i <delay>。 第一种选项表示运行命令的次数,第二种表示不同命令调用之间的延迟,以秒为单位(能够指定十进制数字,如0.1表示100毫秒)。

默认情况下,间隔(或延迟)被设置为0,所以命令只是尽快执行:

        $ redis-cli -h 192.168.127.130 -p  -r  incr foo
(integer)
(integer)
(integer)
(integer)
(integer)

要长时间运行相同的命令,请使用-1作为计数。 因此,为了随时监控RSS存储器的大小,可以使用如下的命令:

        $ redis-cli -h 192.168.127.130 -p   -r - -i  INFO | grep rss_human
used_memory_rss_human:1.38M
used_memory_rss_human:1.38M
used_memory_rss_human:1.38M
... a new line will be printed each second ...

    6、使用redis-cli大量插入数据

使用redis-cli进行大数据量插入会使用单独的章节来说,因为它本身就是一个有价值的话题。请参阅我们的《批量插入指南》。

    7、CSV输出

有时候您可能想要使用redis-cli来快速将数据从Redis导出到外部程序。 这可以使用CSV(逗号分隔值)输出功能来完成:

        $ redis-cli -h 192.168.127.130 -p  lpush mylist a b c d
(integer) $ redis-cli -h 192.168.127.130 -p --csv lrange mylist -
"d","c","b","a"

目前无法像这样导出整个数据库,但只能用CSV输出运行单个命令。

    8、运行Lua脚本

redis-cli对使用Lua脚本编写的新Lua调试工具提供了广泛的支持,稳定版本是从Redis 3.2开始。有关此功能,请参阅《Redis Lua调试器文档》https://redis.io/topics/ldb。

但是,即使不使用调试器,与以交互方式将脚本输入到shell或作为参数相比,您可以使用redis-cli从文件运行脚本,这种方式更加舒适:

        $ cat /tmp/script.lua return redis.call('set',KEYS[],ARGV[])
$ redis-cli -h 192.168.127.130 -p --eval /tmp/script.lua foo , bar
OK

Redis EVAL命令将脚本使用的键列表和其他非键参数作为不同的数组。在调用EVAL命令时,您可以将key的数量作为一个数字提供。 但是,使用redis-cli并使用上面的--eval选项,并没有明确指定key的数量。相反,它使用用逗号分隔键和参数。这就是为什么在上面的调用中你看到foo,bar作为参数。

所以foo会填充KEYS数组,bar会填充ARGV数组。

编写简单脚本时,--eval选项很有用。对于更复杂的工作,使用Lua调试器肯定更适合。可以混合使用这两种方法,因为调试器也使用来自外部文件的执行脚本。

    9、交互模式

到目前为止,我们探讨了如何使用Redis CLI作为命令行程序。 这对于脚本和某些类型的测试非常有用,但是大多数人的大部分时间将会使用redis-cli的交互模式。

在交互模式下,用户在提示符下键入Redis命令。该命令被发送到服务器,进行处理,回复被解析回来并呈现为更简单的形式来阅读。

在交互模式下运行CLI不需要什么特别的东西 - 在没有任何参数的情况下运行即可,并且您处于:

        $ redis-cli -h 192.168.127.139 -p
192.168.127.130:> ping
PONG

字符串192.168.127.130:6379>是提示符。它提醒您,您已连接到给定的Redis实例。
        
            当连接的服务器发生更改时,或者当您在与数据库编号0不同的数据库上运行时,提示会发生的更改:

        192.168.127.130:> select
OK
192.168.127.130:[]> dbsize
(integer)
192.168.127.130:[]> select
OK
192.168.127.130:> dbsize
(integer)

   9.1、处理连接和重新连接

在交互模式下使用connect命令可以通过指定我们要连接的主机名和端口来连接到不同的实例:

            192.168.127.130:> connect metal
metal:> ping
PONG

正如你所看到的以下的提示也会有相应的改变。如果用户尝试连接到无法访问的实例,则redis-cli将进入断开连接模式,并且准备使用新命令尝试重新连接:

            192.168.127.130:> connect 192.168.127.130
Could not connect to Redis at 192.168.127.130:: Connection refused not connected> ping
Could not connect to Redis at 192.168.127.130:: Connection refused not connected> ping
Could not connect to Redis at 192.168.127.130:: Connection refused

通常在检测到断开连接后,CLI始终尝试以透明方式重新连接:如果尝试失败,则会显示错误并进入断开连接状态。 以下是断开和重新连接的示例:

            192.168.127.130:> debug restart
Could not connect to Redis at 192.168.127.130:: Connection refused
not connected> ping
PONG
192.168.127.130:> (now we are connected again)

当执行重新连接时,redis-cli会自动重新选择所选的上一个数据库编号。然而,关于连接的所有其他状态都会丢失,例如,事务的状态信息就会丢失,当我们处于事务的执行过程中的时候:

            $ redis-cli -h 192.168.127.130 -p
192.168.127.130:> multi
OK 192.168.127.130:> ping
QUEUED ( here the server is manually restarted ) 192.168.127.130:> exec
(error) ERR EXEC without MULTI

在交互模式下使用CLI进行测试时,这通常不是问题,但您应该了解这一限制。

     9.2、编辑,历史和完成

由于redis-cli使用《linenoise行编辑库》,因此它一直具有行编辑功能,而不依赖于libreadline或其他可选库。

您可以访问已执行的命令的历史记录,以便通过按方向键(上和下)来避免重复键入它们。在用户主目录内的一个名为.rediscli_history的文件中,指定HOME环境变量,在重新启动CLI的时候保留历史记录。  可以通过设置 REDISCLI_HISTFILE 环境变量来使用不同的历史文件名,并通过将其设置为 /dev/null 来禁用它。

CLI客户端还能够通过按TAB键执行命令名称的补全操作,<TAB>表示按TAB键,如下例所示:

            192.168.127.130:> Z<TAB>
192.168.127.130:> ZADD<TAB>
192.168.127.130:> ZCARD<TAB>

 9.3、运行相同的命令N次

可以通过在命令名前添加一个数字来多次运行相同的命令:

            192.168.127.130:>  incr mycounter
(integer)
(integer)
(integer)
(integer)
(integer)

9.4、显示有关Redis命令的帮助

Redis有很多命令,有时候,当你测试的时候,你可能不记得参数的确切顺序。redis-cli使用help命令为大多数Redis命令提供联机帮助。 该命令可以以两种形式使用:

1、help @ <category>显示关于给定类别的所有命令。 类别包括:@generic,@list,@set,@sorted_set,@hash,@pubsub,@transactions,@connection,@server,@scripting,@hyperloglog。

2、help <commandname>显示作为参数给出的命令的特定帮助。

例如,为了显示PFADD命令的帮助,使用:

            192.168.127.130:> help PFADD

             PFADD key element [element ...]
summary: Adds the specified elements to the specified HyperLogLog.
since: 2.8.
group: hyperloglog

PFADD key element [element ...]
                  摘要:将指定的元素添加到指定的HyperLogLog。
                  从版本:2.8.9

请注意,帮助也支持TAB补全功能。

9.5、清除终端屏幕

在交互模式下使用 clear 命令将清除终端屏幕。

        后面还有很多高级内容,就放在下篇文章里面了。

三、总结

好了,今天就写到这里了,剩下还有很多高级的内容需要些,慢慢来,一口不能吃一个胖子,而且翻译起来也挺耗时间的。剩下的内容就留到下一篇文章吧。继续努力,不能松懈。如果想看原文,地址如下:https://redis.io/topics/rediscli。

Redis进阶实践之十四 Redis-cli命令行工具使用详解第一部分的更多相关文章

  1. Redis进阶实践之十六 Redis大批量增加数据

    一.介绍      有时,Redis实例需要在很短的时间内加载大量先前存在或用户生成的数据,以便尽可能快地创建数百万个键.这就是所谓的批量插入,本文档的目标是提供有关如何以尽可能快的速度向Redis提 ...

  2. Redis进阶实践之十四 Redis-cli命令行工具使用详解

    转载来源:http://www.cnblogs.com/PatrickLiu/p/8508975.html 一.介绍 redis学了有一段时间了,以前都是看视频,看教程,很少看官方的东西.现在redi ...

  3. Redis进阶实践之十二 Redis的Cluster集群动态扩容

    一.引言     上一篇文章我们一步一步的教大家搭建了Redis的Cluster集群环境,形成了3个主节点和3个从节点的Cluster的环境.当然,大家可以使用 Cluster info 命令查看Cl ...

  4. Redis进阶实践之十五 Redis-cli命令行工具使用详解第二部分(结束)

    一.介绍           今天继续redis-cli使用的介绍,上一篇文章写了一部分,写到第9个小节,今天就来完成第二部分.话不多说,开始我们今天的讲解.如果要想看第一篇文章,地址如下:http: ...

  5. Redis进阶实践之十九 Redis如何使用lua脚本

    一.引言               redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运行在任何平台上,也可以嵌入 ...

  6. Redis进阶实践之十八 使用管道模式加速Redis查询

    一.引言             学习redis 也有一段时间了,该接触的也差不多了.后来有一天,以为同事问我,如何向redis中批量的增加数据,肯定是大批量的,为了这主题,我从新找起了解决方案.目前 ...

  7. Redis进阶实践之十八 使用管道模式提高Redis查询的速度

    原文:Redis进阶实践之十八 使用管道模式提高Redis查询的速度 一.引言             学习redis 也有一段时间了,该接触的也差不多了.后来有一天,以为同事问我,如何向redis中 ...

  8. Redis进阶实践之九 独立封装的RedisClient客户端工具类(转载9)

    Redis进阶实践之九 独立封装的RedisClient客户端工具类 一.引言 今天开始有关Redis学习的第九篇文章了,以后肯定会大量系统使用Redis作为缓存介质,为了更好的更好的Redis,自己 ...

  9. “全栈2019”Java第八十四章:接口中嵌套接口详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. ActiveMQ入门练习

    ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久 ...

  2. Java集合分析

    Java集合分析 前言 从开始接触Java的时候, 就在强调的一个重要版块, 集合. 终于能够开始对它的源码进行分析, 理解, 如果不懂得背后的思想, 那么读懂代码, 也仅仅是读懂了 if else ...

  3. 使用sed替换一行内多个括号内的值

    1. 括号在同一行 # cat test2good morning (good afternoon) (good evening) (goodgood) (good morning) # cat se ...

  4. JS-使用工厂方法创建对象

    function createPerson(name,age,gender){ //创建新对象 var obj=new Object(); //向对象中添加属性 obj.name=name; obj. ...

  5. 面向对象_06【抽象类:abstract、接口:interface、实现:implements】

    抽象类:abstract抽象:没有足够的描述功能,事物不具体的描述,却又有共性. 特点: 1,方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰,抽象方法必须定义在抽象类中,该类也 ...

  6. 循环while 、do…while 、for

    循环while .do-while .for 循环结构的选择? - 当对一个条件进行一次判断时,用if语句: - 当对一个条件进行多次判断时,用while语句: 1.While 循环条件成立就会执行循 ...

  7. python之在线平台与量化投资

    0. 第一个量化策略 # 初始化函数,设定基准等等 def initialize(context): set_benchmark('000300.XSHG') g.security = get_ind ...

  8. VSFTPD 源码安装升级

    /usr/local/sbin/vsd -v cp /usr/local/sbin/vsd /usr/sbin/vsd 制作启动脚本 vim /etc/xinetd.d/vsd disable = y ...

  9. 备忘:Junit单元测试

    junit 目前测试都是在main方法中调用目前的结果都需要人工对比是否是想要的 1.使用Junit测试方法,绿色条条代表方法测试成功,没有bug,如果是红色条条代表有异常,测试不通过2.点击方法名. ...

  10. HashMap原理总结

    来总结一下HashMap的原理 1.HashMap当中有一个内部类,它叫Node,然后这个Node呢,它其实是实现了Map.Entry接口,这个接口当中有几个抽象的方法和几个具体的方法.其中Map.E ...