SAVE 和 BGSAVE 命令:
这两个命令都会重写RDB文件
新建一个temp-PID.rdb临时文件,重写完毕后会顶替掉原来的RDB文件
SAVE命令会占用当前的redis服务进程进行重写
因此temp-PID.rdb中的PID即是redis的服务进程PID
因此会阻塞redis服务进程,阻塞一切服务请求,直到重写完毕
BGSAVE命令会以redis服务进程启动一个名为redis-rdb-bgsave的子进程
因此temp-PID.rdb中的PID即是该子进程redis-rdb-bgsave的PID
因此不会阻塞redis服务进程,redis正常对外服务
BGREWRITEAOF 命令:
该命令会重写AOF文件,新建一个临时AOF文件,写入成功后顶替掉原AOF文件
该命令会以redis服务进程打开一个名为redis-aof-rewrite的子程序
新建一个temp-rewriteaof-PID.aof的临时文件,PID即是子程序的PID
该程序不会阻塞redis服务进程,redis正常对外服务
CLIENT LIST 命令:
# 查看当前连接到redis的会话:
redis-cli -h 192.168.77.100 -p 7000 client list
# 该命令会打开一个子进程,使用redis-cli客户端打开一个连接,执行client命令,完成后退出
# id=48 addr=192.168.77.100:43328 fd=7
# name= age=0 idle=0 flags=N
# db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r
# cmd=client
# 第1列为连接id,第2列为连接的来源IP和端口,第4列为该连接的名字,为空
# 第5列为该连接已经存在了多少秒,第8列为该链接使用的数据库,第18列为该连接执行的命令
# 使用awk格式化输出,生成简易报表:
# 报表一:
redis-cli -h 192.168.77.100 -p 7000 client list|sed 's/\r//'|\
awk -F' |:' '{print $1,$2,$5,$6,$9,$19}'|column -t
# 报表二:
redis-cli -h 192.168.77.100 -p 7000 client list|sed 's/\r//'|\
awk -F'=| |:' \
'BEGIN{for(i=0;i<=24;i++){printf("-")}{printf("Client List Info")}
for(i=0;i<=23;i++){printf("-")}{printf("\n")}
print"|--ID--|------ADDR------|---NAME---|----AGE----|-DB-|----CMD----|"}
{printf("|%6s|%16s|%10s|%11s|%4s|%11s|\n",$2,$4,$9,$11,$17,$37)}
END{for(i=0;i<=64;i++){printf("-")}{printf("\n")}}'
CLIENT SETNAME name 和 CLIENT GETNAME 命令:
设置会话连接的连接名和获取会话连接的连接名
只能设置和查看当前会话
CLIENT KILL 命令:
杀掉会话,可以根据ID或者是ip:port
# 使用CLIENT LIST命令拼出杀掉会话的命令:
redis-cli -h 192.168.77.100 -p 7000 client list|sed 's/\r//'|\
awk -F'=| ' '{print "CLIENT KILL "$1" "$2}'
# 或:
redis-cli -h 192.168.77.100 -p 7000 client list|sed 's/\r//'|\
awk -F'=| ' '{print "CLIENT KILL "$4}'
# 一般不太可能直接杀掉全部的会话进程,可能需要根据关键字来定位那些需要杀掉:
redis-cli -h 192.168.77.100 -p 7000 client list|sed 's/\r//'|\
grep 'cmd=client'|awk -F'=| ' '{print "CLIENT KILL "$4}'
CLIENT PAUSE time 命令:
阻塞当前会话连接一定时间,单位是毫秒:
dbsize
CLIENT PAUSE 1
dbsize
相当于:
echo OK;usleep 1000;echo OK
# 获取所有的参数
redis-cli -h 192.168.77.100 -p 7000 CONFIG GET "*"
# 获取最大内存参数
redis-cli -h 192.168.77.100 -p 7000 CONFIG GET maxmemory
# 返回值 6871947673
# 设置参数,当前生效,无需重启
redis-cli -h 192.168.77.100 -p 7000 CONFIG SET maxmemory 7000000000
redis-cli -h 192.168.77.100 -p 7000 CONFIG GET maxmemory
# 返回值 7000000000
cat redis_7000.conf |grep ^maxmemory
# maxmemory 6871947673
# 配置文件并没有被修改,redis重启参数设置回滚
# 将当前参数刷入配置文件
redis-cli -h 192.168.77.100 -p 7000 CONFIG REWRITE
cat redis_7000.conf |grep ^maxmemory
# maxmemory 7000000000
# 配置文件更新,参数永久设置
# 重置 INFO 命令中的某些统计数据
redis-cli -h 192.168.77.100 -p 7000 CONFIG RESETSTAT
# 被重置的数据包括:
# Keyspace hits (键空间命中次数)
# Keyspace misses (键空间不命中次数)
# Number of commands processed (执行命令的次数)
# Number of connections received (连接服务器的次数)
# Number of expired keys (过期key的数量)
# Number of rejected connections (被拒绝的连接数量)
# Latest fork(2) time(最后执行 fork(2) 的时间)
# The aof_delayed_fsync counter(aof_delayed_fsync 计数器的值)
# 摘录自 http://redisdoc.com/server/config_resetstat.html
# 获取全部的命令列表
redis-cli -h 192.168.77.100 -p 7000 COMMAND
# 获取这些命令的总数
redis-cli -h 192.168.77.100 -p 7000 COMMAND COUNT
# 获取给定命令的所有键
redis-cli -h 192.168.77.100 -p 7000 COMMAND GETKEYS SET key value
redis-cli -h 192.168.77.100 -p 7000 COMMAND GETKEYS MSET k1 v1 k2 v2 k3 v3
# 获取Redis相应命令描述的数组
redis-cli -h 192.168.77.100 -p 7000 COMMAND INFO del set
# 不负责任的猜测:
# 是命令实现的简单描述
# 如set需要先调用write写
# 然后调用denyoom拒绝被oom
删除当前数据库的所有key,只能删除当前库的key:
echo -e "select 2\nflushdb"|sed 's/$/\r/'|redis-cli -h 192.168.77.100 -p 7000 --pipe
# 需要将命令流转化成dos格式,然后使用--pipe参数装入到redis实例
删除所有数据库的所有key,全部库的key都会被清空:
redis-cli -h 192.168.77.100 -p 7000 FLUSHALL
关闭redis服务:
redis-cli -h 192.168.77.100 -p 7000 SHUTDOWN
redis-cli -h 192.168.77.100 -p 7000 SHUTDOWN SAVE
# 默认使用SAVE命令,阻塞服务请求,生成新的RDB,然后关闭redis服务
redis-cli -h 192.168.77.100 -p 7000 SHUTDOWN NOSAVE
# 直接关闭redis服务
服务崩溃命令:
redis-cli -h 192.168.77.100 -p 7000 DEBUG SEGFAULT
# shutdown abort
集群信息:
ROLE 返回当前实例在集群中的角色状态
CLUSTER INFO 获取集群的信息
CLUSTER NODES 列出集群当前所有节点的状态,包括ID、IP:PORT、角色、数据槽信息
节点操纵:
CLUSTER MEET 将ip和port所指定的节点添加到集群当中,让它成为集群的一份子。
CLUSTER FORGET 从集群中移除node_id指定的节点。
CLUSTER REPLICATE 将当前节点设置为node_id指定的节点的从节点。
SLAVEOF host port 将当前服务器转变为指定服务器的从属服务器(slave server)
CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。
数据槽操纵:
CLUSTER ADDSLOTS [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。
CLUSTER DELSLOTS [slot ...] 移除一个或多个槽对当前节点的指派。
CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
CLUSTER SETSLOT NODE 将槽slot指派给node_id指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽,然后再进行指派。
CLUSTER SETSLOT MIGRATING 将本节点的槽 slot 迁移到 node_id 指定的节点中。
CLUSTER SETSLOT IMPORTING 从 node_id 指定的节点中导入槽 slot 到本节点。
CLUSTER SETSLOT STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。
数据槽查询:
CLUSTER KEYSLOT 计算键 key 应该被放置在哪个槽上。
CLUSTER COUNTKEYSINSLOT 返回槽 slot 目前包含的键值对数量。
CLUSTER GETKEYSINSLOT 返回 count 个 slot 槽中的键。
TIME
# 返回当前服务器时间UNIX时间戳,到'1970-01-01 00:00:00'+时区 的间隔秒和微秒
DBSIZE
# 返回当前数据库的 key 的数量
LASTSAVE
# 返回上一次成功保存RDB的时间戳,UNIX时间戳,到'1970-01-01 00:00:00'+时区的间隔秒
DEBUG OBJECT key
# 获取 key 的调试信息
# Value at:0x7f2167c72528 refcount:1
# encoding:embstr serializedlength:17 lru:13993658 lru_seconds_idle:1424
# 返回的信息包括value内存地址、编码方式、序列化长度、lru空闲秒数 等
# 慢日志相关
redis-cli -c -h 192.168.21.101 -p 7000 SLOWLOG LEN
# 查看当前有多少条慢日志
redis-cli -c -h 192.168.21.101 -p 7000 SLOWLOG GET 1
# 获取最后一条慢日志
# 1) 1) (integer) 95 慢日志的ID
# 2) (integer) 1523857790 慢日志UNIX时间戳
# 3) (integer) 13730 慢日志的耗时/微秒
# 4) 1) "ZADD" 慢日志具体操作内容
# 2) "{OPREATE_RECORD...
# 3) "5.6704707E7"
# 4) "{\"aaCreateTime...
# 5) "192.168.1.117:55165" 会话来源
redis-cli -c -h 192.168.21.101 -p 7000 SLOWLOG GET
# 获取全部慢日志
redis-cli -c -h 192.168.21.101 -p 7000 SLOWLOG RESET
# 清空慢日志
# 监控 MONITOR
redis-cli -c -h 192.168.77.100 -p 7000 MONITOR
# 相当于tailf log,将所有到该redis服务器的会话连接全部监控起来
# 1523933983.091873 [0 192.168.77.100:43468] "dbsize"
# 时间戳 [数据库 IP:PORT] "命令"
date [email protected] +%F_%T_%N
# 2018-04-17_10:59:43_091873000
常用管理维护命令还有一个INFO命令,参见后续博文
[TOC]