Redis 常用管理维护命令

版权声明:本文为原创文章,转载请标明出处。 https://blog.csdn.net/zwjzqqb/article/details/79973909

持久化存储相关命令:

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 列出集群当前所有节点的状态,包括IDIP:PORT、角色、数据槽信息

节点操纵:

CLUSTER MEET <ip> <port> 将ip和port所指定的节点添加到集群当中,让它成为集群的一份子。 
CLUSTER FORGET <node_id> 从集群中移除node_id指定的节点。 
CLUSTER REPLICATE <node_id> 将当前节点设置为node_id指定的节点的从节点。
SLAVEOF host port 将当前服务器转变为指定服务器的从属服务器(slave server) 
CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。 

数据槽操纵:

CLUSTER ADDSLOTS <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。 
CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。 
CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。 
CLUSTER SETSLOT <slot> NODE <node_id> 将槽slot指派给node_id指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽,然后再进行指派。 
CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。 
CLUSTER SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。 
CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。

数据槽查询:

CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。 
CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。 
CLUSTER GETKEYSINSLOT <slot> <count> 返回 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 -d@1523933983.091873 +%F_%T_%N
# 2018-04-17_10:59:43_091873000

常用管理维护命令还有一个INFO命令,参见后续博文

[TOC]

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页