学习目标:

1、了解Redis的常用命令

2、能在工作中灵活使用这些命令

学习过程:

    前面我们已经学习了很多redis的操作数据的命令了,redis还有其他很操作命令,在redis运行中,你想知道redis目前的运行其你赶快,比如有多个个客户端连接服务器,redis占用了多少内容,目前集群的环境,主从同步的情况,需要重启服务器,需要立即持久化数据等。

1、info命令

  • info命令是返回redis服务器运行时的信息和统计情况给客户端,可以直接使用,当然也可以指定参数获得对应的信息:server: Redis的服务器信息,包括版本,操作系统情况,配置文件路径,端口号等一些常规信息
  • clients: 客户端的连接情况,有多少个客户端连接着服务器。
  • memory: 有关内存的消耗情况。redis非常人性化,输出的参数后面带_human都是以非常直观的方式显示目前的内存情况。一般                  就是作为单位转换,更容易看到目前的情况。因为这个比较重要,所单独列出来了。          

       used_memory:由 Redis 分配器分配的内存总量,包含了redis进程内部的开销和数据占用的内存,以字节(byte)为单位
      used_memory_human:直观的单位展示分配的内存总量。
      used_memory_rss:向操作系统申请的内存大小。与 top 、 ps等命令的输出一致。
      used_memory_rss_human:已更直观的单位展示向操作系统申请的内存大小。
      used_memory_peak:redis的内存消耗峰值(以字节为单位)
      used_memory_peak_human:以更直观的格式返回redis的内存消耗峰值
      used_memory_peak_perc:使用内存达到峰值内存的百分比,即(used_memory/ used_memory_peak) *100%
      used_memory_overhead:Redis为了维护数据集的内部机制所需的内存开销,包括所有客户端输出缓冲区、查询缓冲区、AOF重写缓冲区和主从复制的backlog。
      used_memory_startup:Redis服务器启动时消耗的内存
      used_memory_dataset:数据占用的内存大小,即used_memory-sed_memory_overhead
      used_memory_dataset_perc:数据占用的内存大小的百分比,100%*(used_memory_dataset/(used_memory-used_memory_startup))
      total_system_memory:整个系统内存
      total_system_memory_human:以更直观的格式显示整个系统内存
      used_memory_lua:Lua脚本存储占用的内存
      used_memory_lua_human:以更直观的格式显示Lua脚本存储占用的内存

      maxmemory:Redis实例的最大内存配置

      maxmemory_human:以更直观的格式显示Redis实例的最大内存配置
      maxmemory_policy:当达到maxmemory时的淘汰策略

  • persistence: RDB 和AOF 的持久化信息,是否线程在后台在做持久化,是否有开启aof,状态是否有错误等信息。
  • stats: 基本的统计信息
  • replication: 如果redis搭建了主从服务器,可以通过这个信息获得目前的情况。
  • cpu: CPU的统计信息
  • commandstats: 使用redis命令的统计信息,可以看到那些命令使用率最高。
  • cluster: 如果redis搭建了Cluster(集群),可以通过这个参数获得集群信息,后面回介绍到。
  • keyspace: 数据库中key的情况,key的总数,过期时间,平均过期时间

Redis提供的INFO命令不仅能够查看实时的吞吐量(ops/sec),还能看到一些实用的运行时信息。以下用grep过滤出一些比較重要的实时信息,比方已连接的和在堵塞的客户端、已用内存、拒绝连接、实时的tps和数据流量等:

[root@vm redis-3.0.3]# src/redis-cli -h 127.0.0.1 info | grep -e "connected_clients" -e "blocked_clients" -e "used_memory_human" -e "used_memory_peak_human" -e "rejected_connections" -e "evicted_keys" -e "instantaneous"

connected_clients:1

blocked_clients:0

used_memory_human:799.66K

used_memory_peak_human:852.35K

instantaneous_ops_per_sec:0

instantaneous_input_kbps:0.00

instantaneous_output_kbps:0.00

rejected_connections:0

evicted_keys:0  #运行以来删除过的key的数量

2、CONFIG GET

    获取当前的配置项,支持通配符,例如

127.0.0.1:6379> config get max*
1) "maxmemory"
2) "0"
3) "maxmemory-samples"
4) "5"
5) "maxclients"
6) "10000"
7) "maxmemory-policy"
8) "noeviction"

3、CONFIG SET

前面我们设置环境配置信息时,经常修改redis.conf文件,然后重启redis服务,但是在线上不会随便重启服务,如果需要修改配置信息可以通过CONFIG SET命令,可以立即起效,缺点就是重启redis服务后该配置会失效,需要重启配置。例如:

127.0.0.1:6379> config set maxclients 20
OK
127.0.0.1:6379>  config get maxclients
1) "maxclients"
2) "20"

4、BGSAVE

BGSAVE命令会派生出一个子进程,然后由子进程负责创建RDB文件,服务器进程(即父进程)继续处理命令请求。另外还有一个SAVE命令,但是SAVE命令阻塞式的,它会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在服务器进程阻塞期间,服务器不能处理任何命令请求。 SAVE命令在生产环境中需要谨慎使用,如果想要了解BGSAVE可以了解一下操作系统的fork子进程相关知识,这里不再啰嗦了。

5、SLOWLOG

MySql可以通过设置慢查询以记录所有查询man的sql,Redis也有类似的功能,因为redis要求效率比较高,所以查询到慢的信息尤其重要,Slow log 就是用于记录这些慢命令的,但是要注意执行时间指的是不包括像客户端响应和发送回复等 IO 操作,而单单是执行一个查询命令所耗费的时间。slow log 保存在内存里面,读写速度非常快,因此你可以放心地使用它。

和MySql一样,首先需要先定义多长时间才算慢,主要有两个配置信息

slowlog-log-slower-than 对执行时间大于多少微秒(注意时微妙microsecond,1秒 = 1,000,000 微秒)的查询进行记录。

slowlog-max-len 最多能保存多少条日志,大小超过 slowlog-max-len 时,最旧的一条日志将被删除

使用 CONFIG GET 命令可以查询两个选项的当前值:

127.0.0.1:6379> CONFIG GET slowlog-log-slower-than
1) "slowlog-log-slower-than"
2) "10000"
127.0.0.1:6379> CONFIG GET slowlog-max-len
1) "slowlog-max-len"
2) "128"

修改一下配置信息,把大于10微妙就是慢查询并记录

127.0.0.1:6379> config set slowlog-log-slower-than 10
OK

    可以使用 SLOWLOG GET 或者 SLOWLOG GET number 命令,SLOWLOG GET number 时只打印指定number数量的日志,不设置值表示打印全部,我们运行一下之前添加的程序,然后打印一下慢日志,可以非常清晰的看到那些操作命令慢的

127.0.0.1:6379> slowlog get
1) 1) (integer) 1            #日志id
   2) (integer) 1555141621   #记录命令的执行时间,UNIX时间戳格式
   3) (integer) 11835        #执行时间,单位微妙
   4)  1) "BF.MADD"
       2) "buses"
       3) "bao1"
       4) "bao2"
      32) "... (9971 more arguments)"
   5) "192.168.137.1:49928" #客户端信息包括ip地址和端口
   6) ""                    #如果客户端使用了client setname命令就会有名字显示
2) 1) (integer) 0
   2) (integer) 1555141621
   3) (integer) 11
   4) 1) "BF.RESERVE"
      2) "buses"
      3) "0.0001"
      4) "100000"
   5) "192.168.137.1:49928"
   6) ""

SLOWLOG RESET 可以清空所有的日志信息,SLOWLOG LEN可以打印目前日志的记录数

127.0.0.1:6379> SLOWLOG LEN
(integer) 3
127.0.0.1:6379> SLOWLOG reset
OK
127.0.0.1:6379> SLOWLOG LEN
(integer) 0

 

1.redis-benchmark 

redis性能查看与监控常用工具

redis基准信息,redis服务器性能检测 

redis-benchmark -h localhost -p 6379 -c 100 -n 100000 

100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能 

最后可以输出QPS

blocked_clients

 

44150.11 requests per second

 

测量redis QPS的方式有两种:

  1. 估计生产的报文大小,使用benchmark工具指定-d数据块大小来模拟;
  2. 使用redis-cli中info统计信息计算差值; 
    redis-cli的info命令中有一项total_commands_processed表示:从启动到现在处理的所有命令总数,可以通过统计两次info指令间的差值来计算QPS:

最后一招:WatchDog

官方说法提供的最后一招(last resort)就是WatchDog。它能够将慢操作的整个函数运行栈打印到Redis日志中。由于它与前面介绍过的将记录保存在内存中的延迟和满操作记录不同。所以记得使用前要在redis.conf中配置logfile日志路径:

 

[root@vm redis-3.0.3]# src/redis-cli -h 127.0.0.1

127.0.0.1:6379> CONFIG SET watchdog-period 500

OK

127.0.0.1:6379> debug sleep 1