redis operations - yaokun123/php-wiki GitHub Wiki

redis 运维常用命令

time #查看时间戳与微妙数

dbsize #查看当前数据库中key数量

bgrewriteaof #后台进程重写aof

bgsave #后台保存rdb快照

save #保存rdb快照

lastsave #上次保存时间

flashall #清空所有的db

flashdb #清空当前db

shutdown[""|save|nosave] #断开连接,关闭服务器

slowlog #显示慢查询(slowlog get 5)

info #显示服务器信息

config get #获取配置信息

config set #设置配置信息

monitor #打开控制台

sync #主从同步

client list #客户端列表

client kill #关闭某个客户端

client setname #为客户端设置名字

client getname #获取客户端名字

禁用/重命名危险命令(KEYS/FLUSHALL/FLUSHDB/CONFIG/EVAL)

二、一个监控软件redis-stst的使用

redis-stat是一个用ruby写成的监控redis的程序,基于info命令获取信息,而不是通过monitor获取信息,因此不会额外消耗性能。

1、安装ruby
yum install -y ruby ruby-devel rubygems

2、安装redis-stat
git clone https://github.com/junegunn/redis-stat.git

3、启动
./redis-stat --verbose --server=8090 5 127.0.0.1:6378 -a 22a66ec8b51b4263daf3f1afd58ba9a7

注意:这里做了一个shh的端口转发,将本地的端口转发到线上的redis进程端口
ssh -L 6378:线上ip:6378 用户名@ip

三、基准性能测试,了解你的 Redis 在生产环境服务器上的基准性能。

什么是基准性能?

简单来讲,基准性能就是指 Redis 在一台负载正常的机器上,其最大的响应延迟和平均响应延迟分别是怎样的?

为什么要测试基准性能?我参考别人提供的响应延迟,判断自己的 Redis 是否变慢不行吗?

答案是否定的。

因为 Redis 在不同的软硬件环境下,它的性能是各不相同的。

为了避免业务服务器到 Redis 服务器之间的网络延迟,你需要直接在 Redis 服务器上测试实例的响应延迟情况。执行以下命令,就可以测试出这个实例 60 秒内的最大响应延迟:

$ redis-cli -h 127.0.0.1 -p 6379 --intrinsic-latency 60

Max latency so far: 1 microseconds.
Max latency so far: 15 microseconds.
Max latency so far: 17 microseconds.
Max latency so far: 18 microseconds.
Max latency so far: 31 microseconds.
Max latency so far: 32 microseconds.
Max latency so far: 59 microseconds.
Max latency so far: 72 microseconds.

1428669267 total runs (avg latency: 0.0420 microseconds / 42.00 nanoseconds per run).
Worst run took 1429x longer than the average latency.

从输出结果可以看到,这 60 秒内的最大响应延迟为 72 微秒(0.072毫秒)。

你还可以使用以下命令,查看一段时间内 Redis 的最小、最大、平均访问延迟:

$ redis-cli -h 127.0.0.1 -p 6379 --latency-history -i 1
min: 0, max: 1, avg: 0.13 (100 samples) -- 1.01 seconds range
min: 0, max: 1, avg: 0.12 (99 samples) -- 1.01 seconds range
min: 0, max: 1, avg: 0.13 (99 samples) -- 1.01 seconds range
min: 0, max: 1, avg: 0.10 (99 samples) -- 1.01 seconds range
min: 0, max: 1, avg: 0.13 (98 samples) -- 1.00 seconds range
min: 0, max: 1, avg: 0.08 (99 samples) -- 1.01 seconds range
...

以上输出结果是,每间隔 1 秒,采样 Redis 的平均操作耗时,其结果分布在 0.08 ~ 0.13 毫秒之间。

了解了基准性能测试方法,那么你就可以按照以下几步,来判断你的 Redis 是否真的变慢了:

1、在相同配置的服务器上,测试一个正常 Redis 实例的基准性能
2、找到你认为可能变慢的 Redis 实例,测试这个实例的基准性能
3、如果你观察到,这个实例的运行延迟是正常 Redis 基准性能的 2 倍以上,即可认为这个 Redis 实例确实变慢了

四、扫描出实例中 bigkey 的分布情况

Redis 提供了扫描 bigkey 的命令,执行以下命令就可以扫描出,一个实例中 bigkey 的分布情况,输出结果是以类型维度展示的:

$ redis-cli --bigkeys -i 0.01

对线上实例进行 bigkey 扫描时,Redis 的 OPS 会突增,为了降低扫描过程中对 Redis 的影响,最好控制一下扫描的频率,
指定 -i 参数即可,它表示扫描过程中每次扫描后休息的时间间隔,单位是秒

扫描结果中,对于容器类型(List、Hash、Set、ZSet)的 key,只能扫描出元素最多的 key。但一个 key 的元素多,
不一定表示占用内存也多,你还需要根据业务情况,进一步评估内存占用情况

这里有两点可以优化:

1、业务应用尽量避免写入 bigkey
2、如果你使用的 Redis 是 4.0 以上版本,用 UNLINK 命令替代 DEL,此命令可以把释放 key 内存的操作,放到后台线程中去执行,从而降低对 Redis 的影响
3、可以开启 lazy-free 机制(lazyfree-lazy-user-del = yes),在执行 DEL 命令时,释放内存也会放到后台线程中执行