zoukankan      html  css  js  c++  java
  • Redis进阶实践之十四 Redis-cli命令行工具使用详解

    转载来源:http://www.cnblogs.com/PatrickLiu/p/8508975.html

    一、介绍

           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 6379 incr mycounter         (integer) 7

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

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

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


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

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


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


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

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

            $ redis-cli -h 192.168.127.130 -p 6379 ping         PONG


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

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


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

    复制代码
            $ redis-cli -h 192.168.127.130 -p 6379 flushall         OK          $ redis-cli -h 192.168.127.130 -p 6379 -n 1 incr a         (integer) 1          $ redis-cli -h 192.168.127.130 -p 6379 -n 1 incr a         (integer) 2          $ redis-cli -h 192.168.127.130 -p 6379 -n 2 incr a         (integer) 1
    复制代码


               部分或全部信息也可以通过使用-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 6379 -x set foo < /etc/services         OK         $ redis-cli -h 192.168.127.130 -p 6379 getrange foo 0 50         "#
    # Network services, Internet style
    #
    # Note that "


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

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

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

    复制代码
           $ cat /tmp/commands.txt         set foo 100         incr foo         append foo xxx         get foo          $ cat /tmp/commands.txt | redis-cli -h 192.168.127.130 -p 6379         OK         (integer) 101         (integer) 6         "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 6379         OK         (integer) 25
    复制代码



        5、连续运行相同的命令

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

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

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

    复制代码
            $ redis-cli -h 192.168.127.130 -p 6379 -r 5 incr foo         (integer) 1         (integer) 2         (integer) 3         (integer) 4         (integer) 5
    复制代码

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

            $ redis-cli -h 192.168.127.130 -p 6379  -r -1 -i 1 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 6379 lpush mylist a b c d         (integer) 4          $ redis-cli -h 192.168.127.130 -p 6379  --csv lrange mylist 0 -1         "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[1],ARGV[1])         $ redis-cli -h 192.168.127.130 -p 6379 --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 6379         192.168.127.130:6379> ping         PONG


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

    复制代码
            192.168.127.130:6379> select 2         OK         192.168.127.130:6379[2]> dbsize         (integer) 1         192.168.127.130:6379[2]> select 0         OK         192.168.127.130:6379> dbsize         (integer) 503
    复制代码


            9.1、处理连接和重新连接

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

                192.168.127.130:6379> connect metal 6379             metal:6379> ping             PONG


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

    复制代码
                192.168.127.130:6379> connect 192.168.127.130 9999             Could not connect to Redis at 192.168.127.130:9999: Connection refused              not connected> ping             Could not connect to Redis at 192.168.127.130:9999: Connection refused              not connected> ping             Could not connect to Redis at 192.168.127.130:9999: Connection refused
    复制代码


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

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


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

    复制代码
                $ redis-cli -h 192.168.127.130 -p 6379             192.168.127.130:6379> multi             OK              192.168.127.130:6379> ping             QUEUED              ( here the server is manually restarted )              192.168.127.130:6379> 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:6379> Z<TAB>             192.168.127.130:6379> ZADD<TAB>             192.168.127.130:6379> ZCARD<TAB>


            9.3、运行相同的命令N次

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

    复制代码
                192.168.127.130:6379> 5 incr mycounter             (integer) 1             (integer) 2             (integer) 3             (integer) 4             (integer) 5
    复制代码



            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:6379> help PFADD               PFADD key element [element ...]              summary: Adds the specified elements to the specified HyperLogLog.              since: 2.8.9              group: hyperloglog
    复制代码


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

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


            9.5、清除终端屏幕

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

       

      10、特殊的操作模式

                        到目前为止,我们看到了redis-cli的两种主要模式。

                             1、命令行执行Redis命令。

                             2、交互式的“REPL-like”用法。

                    然而,CLI执行与Redis相关的其他辅助任务,这些任务将在下一节中介绍:

                             1、监控工具显示有关Redis服务器的连续统计信息。

                             2、扫描Redis数据库查找非常大的key。

                             3、与模式匹配的key空间扫描仪。

                             4、作为Pub/Sub客户订阅频道。

                             5、监视Redis实例中执行的命令。

                             6、以不同方式检查Redis服务器的延迟。

                             7、检查本地计算机的调度程序延迟。

                             8、从远程Redis服务器传输RDB备份到本地。

                             9、扮演Redis从节点的角色,展现从节点所接受的东西。

                            10、模拟LRU工作负载以显示有关按键命中的统计信息。

                            11、Lua调试器的客户端。


                      10.1、连续统计模式

                                 这可能是redis-cli的最不常用的功能之一,并且对于实时监控Redis实例来说是非常有用。要启用此模式,使用--stat选项。 在这种模式下,CLI的行为非常清晰的:

    复制代码
                                $ redis-cli -h 192.168.127.130 -p 6379 --stat                             ------- data ------ --------------------- load -------------------- - child -                             keys       mem      clients blocked requests            connections                             506        1015.00K 1       0       24 (+0)             7                             506        1015.00K 1       0       25 (+1)             7                             506        3.40M    51      0       60461 (+60436)      57                             506        3.40M    51      0       146425 (+85964)     107                             507        3.40M    51      0       233844 (+87419)     157                             507        3.40M    51      0       321715 (+87871)     207                             508        3.40M    51      0       408642 (+86927)     257                             508        3.40M    51      0       497038 (+88396)     257
    复制代码


                              在这种模式下,每秒都会打印一条新的数据行,其中包含有用信息和旧数据点之间的差异。 您可以轻松了解内存使用情况,客户端的链接等情况。

                              在这种情况下,-i <interval>选项的作用就是修改输出新数据行的频率。 默认值是一秒。

                     10.2、大键扫描

                                在这种特殊模式下,redis-cli可用作key空间容量大小的分析器。 它扫描占据比较大空间的key的数据集合,并能提供有关数据集组成的数据类型的信息。 该模式使用--bigkeys 选项启用,并生成十分详细的输出:

    复制代码
                              [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 --bigkeys                             # Scanning the entire keyspace to find biggest keys as well as average sizes per key type.                            # 扫描整个键的空间以查找最大键以及每种键类型的平均大小。                            # You can use -i 0.1 to sleep 0.1 sec per 100 SCAN commands (not usually needed).                            # 您可以使用-i 0.1来每100次SCAN命令休息0.1秒(通常不需要)。                             [00.00%] Biggest string found so far 'ss' with 1 bytes                            [00.00%] Biggest string found so far 'foo1' with 25 bytes                             -------- summary -------                            Sampled 5 keys in the keyspace!                           Total key length in bytes is 20 (avg len 4.00)                            Biggest string found 'foo1' has 25 bytes                            5 strings with 35 bytes (100.00% of keys, avg size 7.00)                           0 lists with 0 items (00.00% of keys, avg size 0.00)                           0 sets with 0 members (00.00% of keys, avg size 0.00)                           0 hashs with 0 fields (00.00% of keys, avg size 0.00)                           0 zsets with 0 members (00.00% of keys, avg size 0.00)
    复制代码


                                在输出的第一部分中,报告每个大于前一个较大键(相同类型)的新键。 摘要部分提供有关Redis实例内数据的一般统计信息。

                                该程序使用 SCAN 命令,因此它可以在不影响客户端操作的情况下在繁忙的服务器上执行,不过也可以使用-i选项来限制所请求的每100个键的扫描过程的秒数。 例如,-i 0.1会减慢程序的执行速度,但也会大幅减轻服务器上的负载。

                                请注意,摘要还会以更清晰的形式反映每次发现的最大键。 如果针对一个非常大的数据集运行,最初的输出只是提供一些有趣的信息ASAP。


                     10.3、获取键的列表

                                  还可以扫描密钥空间,再次以不阻塞Redis服务器的方式(当您使用诸如 KEYS * 之类的命令时会发生这种情况),并打印所有键的名称,或者使用特定模式进行过滤。 此模式与 --bigkeys 选项一样,使用SCAN命令,如果数据集正在发生更改,键就可能会多次反映更改,但如果从迭代开始以来就存在该键,那么该键也不会丢失。由于它使用这个选项的命令叫做--scan。

    复制代码
                            [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 --scan | more -8                          name                          age                          aaa                          myset                          myhash                          address                          myzset                          rlist
    复制代码


                                 请注意,使用 head -8 仅用于打印输出所有数据的前8行。

                                 scan命令可以配合 --pattern 选项使用模式匹配进行扫描

                          [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 --scan --pattern 'a*'                        age                        aaa                        address

                
                                根据键的名称,通过使用wc命令可以使管道输出针对特定种类对象的计数:

    复制代码
                          [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 --scan --pattern 'a*'                       age                       aaa                       address                        [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 --scan --pattern 'a*' | wc -l                       3
    复制代码


                                   wc -l 这个选项的 -l,横杠后面是英文字母 L 的小写,不是数字 1。


                    10.4、发布/订阅模式

                                  只需使用PUBLISH命令,CLI就能够在 Redis Pub/Sub通道中发布消息。这是预期的,因为PUBLISH命令与其他任何命令非常相似,使用简单。订阅频道为了接收消息使用了特殊的方法 - 在这种情况下,我们需要阻止和等待消息,此方法是作为redis-cli中的特殊模式实现的。 与其他特殊模式不同,此模式不是通过使用特殊选项启用的,而是通过使用SUBSCRIBE或PSUBSCRIBE命令启用的,无论是交互模式还是非交互模式:

    复制代码
                            //非系统级通用通道                         [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 psubscribe '*'                         Reading messages... (press Ctrl-C to quit)                         1) "psubscribe"                         2) "*"                         3) (integer) 1                          //单一通道                         [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 psubscribe mychannel                         Reading messages... (press Ctrl-C to quit)                         1) "psubscribe"                         2) "*"                         3) (integer) 1
    复制代码


                                 ’*’ 带有单引号的星号表示非系统发布的消息通道,可以接受来自任何用户定义通道的信息,当然也可以输入具体名称的通道,比如:mychannel,我们针对具体名称的通道发布信息,必须制定通道名称,否则无效。

                                 * 单独星号,没有单引号包含的,会显示系统当前所有发布的通道,如下:

    复制代码
                           [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 psubscribe *                         Reading messages... (press Ctrl-C to quit)                         1) "psubscribe"                         2) "datas"                         3) (integer) 1                         1) "psubscribe"                         2) "logs"                         3) (integer) 2                         1) "psubscribe"                         2) "redis-benchmark"                         3) (integer) 3                         1) "psubscribe"                         2) "redis-cli"                         3) (integer) 4                         1) "psubscribe"                         2) "redis.conf"                         3) (integer) 5                         1) "psubscribe"                         2) "redis-sentinel"                         3) (integer) 6                         1) "psubscribe"                         2) "redis-server"                         3) (integer) 7                         1) "psubscribe"                         2) "redis-trib.rb"                         3) (integer) 8                         1) "psubscribe"                         2) "sentinel.conf"                         3) (integer) 9
    复制代码


                                     阅读消息,消息显示我们输入了 Pub/Sub 模式。 当其他客户端在某个频道发布某条消息时(例如,您可以使用redis-cli PUBLISH mychannel mymessage),Pub/Sub模式中的CLI将显示如下内容:

    复制代码
                             [root@linux redis]#  redis-cli -h 192.168.127.130 -p 6379 publish mychannel mymessage                          (integer) 1                           显示内容:                          1) "pmessage"                          2) "*"                          3) "mychannel"                          4) "mymessage"
    复制代码


                                      这对调试 发布/订阅 的问题非常有用。要退出发布/订阅模式只需处理CTRL-C。


                      10.5、监视在Redis中执行的命令

                                    与 Pub/Sub 模式类似,使用MONITOR模式后,将自动输入监控模式。它将打印Redis实例收到的所有命令:

                              [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 monitor                           OK                           1520321617.017015 [0 192.168.127.130:34984] "publish" "mych" "mymessage"                           1520321654.339150 [0 192.168.127.130:34986] "set" "sex" "1"


                                    请注意,可以使用管道输出,因此您可以使用诸如grep等工具监视特定模式。


                     10.6、 监视Redis实例的延迟

                                 Redis经常用于延迟非常严重的环境中。延迟涉及应用程序中的多个动态的部分,从客户端库到网络堆栈,再到Redis实例本身。

                                 CLI有多种功能用于研究Redis实例的延迟并了解延迟的最大值,平均值和分布。

                                 基本的延迟检查工具是 --latency 选项。 使用此选项,CLI运行一个循环,将PING命令发送到Redis实例,并测量获得答复的时间。这种情况每秒发生100次,统计信息在控制台中实时更新:

                           [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 --latency                        min: 0, max: 3, avg: 0.28 (1051 samples)


                                  统计数据以毫秒计数。通常情况下,由于系统内核调度程序运行redis-cli本身所导致的延迟,所以一个非常快的实例的平均延迟往往被高估了一点,所以0.19以上的平均延迟可能是0.01或更少。然而,这通常不是一个大问题,因为我们对几毫秒或更长时间的事件才感兴趣。

                                  有时候,研究平均延迟期的最大值和平均值如何随时间发展是有用的。--latency-history选项用于此目的:它的工作方式与--latency完全相同,但每15秒(默认情况下)一个全新的采样会话从头开始:

    复制代码
                          [root@linux ~]# redis-cli -h 192.168.127.130 -p 6379 --latency-history                        min: 0, max: 6, avg: 0.35 (1230 samples) -- 15.00 seconds range                        min: 0, max: 3, avg: 0.34 (1277 samples) -- 15.01 seconds range                        min: 0, max: 6, avg: 0.30 (1272 samples) -- 15.00 seconds range                        min: 0, max: 2, avg: 0.33 (1289 samples) -- 15.00 seconds range                        min: 0, max: 4, avg: 0.36 (1312 samples) -- 15.01 seconds range                        min: 0, max: 1, avg: 0.24 (67 samples)^C
    复制代码


                                 您可以使用-i <interval>选项更改采样会话的时间间隔步长。

                                 最先进的延迟研究工具,对于没有经验的用户来说也有点难解释明白,因此使用彩色终端显示一系列延迟是一种能力。您将看到一个彩色输出,指示不同样本的百分比,以及不同的ASCII字符表示不同的延迟数字。 使用 --latency-dist 选项启用此模式:

    复制代码
                            [root@linux ~]# redis-cli -h 192.168.127.130 -p 6379 --latency-dist                         ---------------------------------------------                         . - * #          .01 .125 .25 .5 milliseconds                         1,2,3,...,9      from 1 to 9     milliseconds                         A,B,C,D,E        10,20,30,40,50  milliseconds                         F,G,H,I,J        .1,.2,.3,.4,.5       seconds                         K,L,M,N,O,P,Q,?  1,2,4,8,16,30,60,>60 seconds                         From 0 to 100%:                                             ---------------------------------------------                         .-*#123456789ABCDEFGHIJKLMNOPQ?                         .-*#123456789ABCDEFGHIJKLMNOPQ?                         .-*#123456789ABCDEFGHIJKLMNOPQ?                         .-*#123456789ABCDEFGHIJKLMNOPQ?                         .-*#123456789ABCDEFGHIJKLMNOPQ?                         .-*#123456789ABCDEFGHIJKLMNOPQ?                         .-*#123456789ABCDEFGHIJKLMNOPQ?                         .-*#123456789ABCDEFGHIJKLMNOPQ?                         .-*#123456789ABCDEFGHIJKLMNOPQ?                         .-*#123456789ABCDEFGHIJKLMNOPQ?
    复制代码


                                  在redis-cli中还有另一个非常不寻常的延迟工具。它不会检查Redis实例的延迟,而是检查运行redis-cli的计算机的延迟。你可能会问什么延迟? 内核调度程序固有的延迟,管理虚拟化实例的程序的延迟等等。

                                  我们称之为内部延迟,因为它对大多数程序员来说是不透明的。 如果您的Redis实例延迟不佳,任何微不足道的事情都有可能是造成延迟的罪魁祸首,那么通过在运行Redis服务器的系统中直接在此特殊模式下运行redis-cli,可以检查系统的最佳性能。

                                  通过测量内部延迟,您知道这是基准,Redis无法超越您的系统。为了在此模式下运行CLI,请使用--intrinsic-latency <test-time>。 测试的时间以秒为单位,并指定redis-cli多少秒可以检查一次当前正在运行的系统的延迟。

    复制代码
                          [root@linux ~]# redis-cli -h 192.168.127.130 -p 6379 --intrinsic-latency 5                        Max latency so far: 1 microseconds.                        Max latency so far: 88 microseconds.                        Max latency so far: 120 microseconds.                        Max latency so far: 950 microseconds.                        Max latency so far: 1192 microseconds.                        Max latency so far: 1830 microseconds.                        Max latency so far: 2107 microseconds.                        32993317 total runs (avg latency: 0.1515 microseconds / 151.55 nanoseconds per run).                       Worst run took 13903x longer than the average latency.
    复制代码


                                 重要提示:必须在要运行Redis服务器的计算机上执行此命令,而不是在不同的主机上执行此命令。 它甚至不连接到Redis实例,只在本地执行测试。

                                 在上述情况下,我的系统不可能比最糟延迟2107微秒的情况更好,所以我可以期望某些查询在不到1毫秒的时间内运行。


                      10.7、远程备份RDB文件

                                  在Redis复制的第一次同步期间,主设备和从设备以RDB文件的形式交换整个数据集。redis-cli利用此功能来提供远程备份功能,该功能允许将RDB文件从任何Redis实例传输到运行redis-cli的本地计算机。要使用此模式,请使用--rdb <dest-filename>选项调用CLI:

                          [root@linux ~]# redis-cli -h 192.168.127.130 -p 6379 --rdb /tmp/dump.rdb                       SYNC sent to master, writing 534 bytes to '/tmp/dump.rdb'                       Transfer finished with success.


                               这是确保您拥有Redis实例的灾难恢复RDB备份文件的简单而有效的方法。 但是,在脚本或cron作业中使用此选项时,请确保检查命令的返回值。如果它不为零,则发生错误,如下例所示:

                          [root@linux ~]# redis-cli -h 192.168.127.130 -p 6379 --rdb /tmp/dump.rdb                       SYNC sent to master, writing 534 bytes to '/tmp/dump.rdb'                       Transfer finished with success.                       [root@linux ~]# echo $?                        0

                

                   10.8、从模式

                               CLI的从属模式是一种高级功能,可用于Redis开发人员和调试操作。它允许检查主站发送到复制流中的从站以便将写入传播到其副本。选项名称简单--slave。示例代码如下:

                          [root@linux ~]# redis-cli -h 192.168.127.129 -p 6379 --slave                       SYNC with master, discarding 535 bytes of bulk transfer...                       SYNC done. Logging commands from master.


                               该命令首先丢弃第一个同步的RDB文件,然后以CSV格式记录每个收到的命令。

                               如果您认为某些命令未在您的从站中正确复制,这也是检查发生了什么事情的好方法,对于改进错误报告也是有用的信息。


                   10.9、执行LRU模拟

                               Redis通常用作LRU驱逐的缓存。根据键(key)的数量和为缓存分配的内存量(通过maxmemory指令指定),缓存命中和未命中的数量将会改变。有时,模拟命中率对正确配置缓存非常有用。

                              CLI有一个特殊模式,它在请求模式中使用80-20%幂律分布来执行对GET和SET操作的模拟。这意味着20%的键将被80%的时间用来请求,这是缓存场景中的普遍存在的定律。

                              从理论上来讲,基于给定的请求分布和Redis内存开销,可以用数学公式分析并计算命中率。 但是,Redis可以配置为不同的LRU设置(样本数量),并且LRU的实现(在Redis中近似)在不同版本之间也会有很大的变化。类似地,每个键的内存容量在各个版本之间也可能会有所不同。这就是为什么创建这个工具的原因:它的主要动机是测试Redis的LRU实现的质量,但现在也可用于测试给定版本的行为与您为部署考虑的设置的关系。

                              为了使用此模式,您需要指定测试中的键的数量。您还需要为maxmemory设置一个有意义值的作为第一次尝试。

                             重要注意事项:在Redis配置中配置maxmemory设置至关重要:如果没有最大内存使用量上限,则由于所有键均可存储在内存中,因此命中率最终将为100%。 或者,如果您指定的键太多而没有最大内存,则最终将使用所有计算机RAM。 还需要配置适当的maxmemory策略,大部分时间是allkeys-lru。


                              在以下示例中,我配置了最大内存限制是100MB,并使用1000万个键对LRU进行了模拟。

                             警告:测试使用流水线并会给服务器带来压力,请勿将其用于生产实例。

    复制代码
                        [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 --lru-test 10000000                     156000 Gets/sec | Hits: 4552 (2.92%) | Misses: 151448 (97.08%)                     153750 Gets/sec | Hits: 12906 (8.39%) | Misses: 140844 (91.61%)                     159250 Gets/sec | Hits: 21811 (13.70%) | Misses: 137439 (86.30%)                     151000 Gets/sec | Hits: 27615 (18.29%) | Misses: 123385 (81.71%)                     145000 Gets/sec | Hits: 32791 (22.61%) | Misses: 112209 (77.39%)                     157750 Gets/sec | Hits: 42178 (26.74%) | Misses: 115572 (73.26%)                     154500 Gets/sec | Hits: 47418 (30.69%) | Misses: 107082 (69.31%)                     151250 Gets/sec | Hits: 51636 (34.14%) | Misses: 99614 (65.86%)
    复制代码


                             该程序每秒显示统计信息。 如您所见,在第一秒钟内缓存开始被填充。 丢失率稍后稳定在我们可以预期的实际数字中:

                        120750 Gets/sec | Hits: 48774 (40.39%) | Misses: 71976 (59.61%)                     122500 Gets/sec | Hits: 49052 (40.04%) | Misses: 73448 (59.96%)                     127000 Gets/sec | Hits: 50870 (40.06%) | Misses: 76130 (59.94%)                     124250 Gets/sec | Hits: 50147 (40.36%) | Misses: 74103 (59.64%)


                             对于我们的用例来说,59%的丢失率可能是不可接受的。所以我们知道100MB内存是不够的。让我们试试500MB字节。几分钟后,我们会看到输出稳定到以下数字:

                        140000 Gets/sec | Hits: 135376 (96.70%) | Misses: 4624 (3.30%)                     141250 Gets/sec | Hits: 136523 (96.65%) | Misses: 4727 (3.35%)                     140250 Gets/sec | Hits: 135457 (96.58%) | Misses: 4793 (3.42%)                     140500 Gets/sec | Hits: 135947 (96.76%) | Misses: 4553 (3.24%)

                
                            因此我们知道在500MB的情况下,我们的键数量支持足够多(1000万)和分布也很合理(80-20方式)。


    三、总结

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

  • 相关阅读:
    1058 A+B in Hogwarts (20)
    1036. Boys vs Girls (25)
    1035 Password (20)
    1027 Colors in Mars (20)
    1009. Product of Polynomials (25)
    1006. Sign In and Sign Out
    1005 Spell It Right (20)
    1046 Shortest Distance (20)
    ViewPager页面滑动,滑动到最后一页,再往后滑动则执行一个事件
    IIS7.0上传文件限制的解决方法
  • 原文地址:https://www.cnblogs.com/EikiXu/p/9428855.html
Copyright © 2011-2022 走看看