Redis命令详解:Server
Redis命令学习,服务器篇
BGREWRITEAOF
最早可用版本:1.0.0
使Redis重写AOF文件,重写后的AOF文件相较于当前版本的AOF文件占用的空间更小。即使重写失败,数据也不会丢失,因为在重写成功前,旧版本的AOF文件不会改动。重写操作只会在后台没有其他持久化工作时进行:
如果Redis子进程正在保存快照,那么重写AOF的操作会到保存工作完成后才开始进行。这种情况下,该命令仍然会返回OK,但是会增加一条额外的返回信息说明。在Redis2.6以后的版本,你可以使用INFO命令查看重写操作是否被预定执行。
如果已经有一个重写AOF命令正在进行,那么该命令会报错,并且不会预定执行重写操作。
Redis2.4版本以后,重写AOF操作会自动触发。想要了解更多信息可以查看持久化文档。
BGSAVE
最早可用版本:1.0.0
在后台保存当前数据库到磁盘。命令会马上返回OK,Redis会fork出一个子进程来进行此操作,而父进程继续提供服务。可以使用LASTSAVE命令查看保存操作是否成功。
CLIENT GETNAME
最早可用版本:2.6.9
时间复杂度:O(1)
这个命令会返回当前连接使用CLIENT SETNAME设置的连接名称,如果没有设置,则返回空。
CLIENT ID
最早可用版本:5.0.0
时间复杂度:O(1)
返回当前连接的ID。每个连接都会保证两点:
不会重复,所以如果返回的ID相同,那么调用方就可以确定底层是没有断开重连的。
ID单调递增,如果一个连接的ID大于另一个连接的ID,那么它一定晚于这个连接创建。
1jackeyzhe@ubuntu:~/redis-5.0.4/src$ ./redis-cli
2127.0.0.1:6379> CLIENT ID
3(integer) 3
4127.0.0.1:6379>
5jackeyzhe@ubuntu:~/redis-5.0.4/src$ ./redis-cli
6127.0.0.1:6379> CLIENT ID
7(integer) 4
CLIENT KILL
最早可用版本:2.4.0
时间复杂度:O(N),N是客户端连接数
用法:CLIENT KILL [ip:port] [ID client-id][TYPE normal|master|slave|pubsub] [ADDR ip:port][SKIPME yes/no]
这个命令用来关闭一个指定的客户端连接。在Redis2.8.11之前,都可以指定要关闭的连接地址,像下面这种形式:
1CLIENT KILL addr:port
ip:port应该和CLIENT LIST命令中的一行匹配。
在2.8.12及以后的版本,则可以使用以下形式:
1CLIENT KILL <filter> <value> ... ... <filter> <value>
这种形式支持多种根据多种属性匹配客户端:
CLIENT KILL ADDR ip:port :这种和旧的形式相同
CLIENT KILL ID client-id :这种形式允许关闭指定ID的连接
CLIENT KILL TYPE type :这种形式支持关闭某种类型的客户端,type取值为:normal, master, slave和pubsub(master在Redis3.2之后可以使用)
CLIENT KILL SKIPME yes/no :参数默认是yes,也就是不会关闭发出命令的客户端,而如果指定为no,则连自己也一起关闭
注意:从Redis5开始type不再使用slave,改为replica
上述的多种过滤器也可以组合使用。使用新的形式时,返回值为关闭的客户端数量。由于Redis是单线程的,所以这个命令不能关闭一个正在执行命令的客户端。
CLIENT LIST
最早可用版本:2.4.0
时间复杂度:O(N),N是客户端连接数
用法:CLIENT LIST [TYPE normal|master|replica|pubsub]
这个命令用来查看连接的客户端信息,在Redis5之后,可以使用TYPE参数。
1127.0.0.1:6379> CLIENT LIST
2id=3 addr=127.0.0.1:44994 fd=8 name= age=342 idle=3 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=keys
3id=4 addr=127.0.0.1:44996 fd=9 name= age=335 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client
返回值:每行代表一个客户端连接,字段包括:
id:一个64bit唯一ID
name:使用CLIENT SETNAME设置的客户端名称
addr:客户端的地址和端口号
fd:相应的socket文件描述符
age:连接时长,单位为秒
idle:空闲时间,单位为秒
flags:客户端标志
db:当前数据库ID
sub:已订阅频道的数量
psub:已订阅模式的数量
multi:事务中的命令数
qbuf:查询缓存的长度
qbuf-free:查询缓存空闲空间(0表示缓存已满)
obl:输出缓存的长度
oll :输出列表长度(缓存满时,回复会被放入这个列表中)
omem:输出缓存的内存占用量
events:文件描述符事件
cmd:最后一次执行的命令
客户端标志包括以下几种:
A:尽可能快的关闭连接
b:客户端在等待阻塞时间
c:写完回复之后关闭连接
d:被监视的key被修改了,事务将失败
i:客户端正在等待虚拟机I/O(已废弃)
M:客户端是master节点
N:没有设置flag
O:客户端是MONITOR模式
P:客户端是Pub/Sub的订阅者
r:客户端是针对集群节点的只读模式
S:客户端连接到此实例的从节点
u:客户端未阻塞
U:客户端通过Unix套接字连接
x:客户端正在执行事务
文件描述符事件包括:
r:客户端套接字可读
w:客户端套接字可写
CLIENT PAUSE
最早可用版本:2.9.50
时间复杂度:O(1)
这个命令可以使所有连接暂停一段时间(单位:毫秒)。这个命令通常用来将连接从一个Redis实例迁移到另一个实例,例如当一个实例需要进行系统升级时,我们应该这样做:
使用CLIENT PAUSE暂停所有客户端
等待几秒钟,以便从节点与主节点数据同步完成
将一个从节点切换成主节点
重新使客户端连接到新的主节点
这个命令通常在事务中和INFO replication命令一起使用,这样做可以使从节点和主节点同步完成。
CLIENT REPLY
最早可用版本:3.2
时间复杂度:O(1)
这个命令用来禁止服务器对当前客户端回复。它有以下几种使用场景:
客户端发送fire和forget命令时(不关心什么时候完成的命令)
加载大量数据
正在创建缓存
在这些情况下,客户端会忽略服务器的回复,因此,服务器回复是一种资源的浪费。
命令支持3个参数:
ON:默认,接收服务器所有回复
OFF:不接收服务器的所有回复
SKIP:不接收下一条命令的回复
CLIENT SETNAME
最早可用版本:2.6.9
时间复杂度:O(1)
这个命令用来给连接设置一个名字。这个命令会在CLIENT LIST的输出列表中显示。名字的长度没有限制,但一般不超过Redis字符串类型的长度(512MB)。名字里不能有空格。可以通过设置空字符串的方式来删除一个连接的名称,每个新的连接是没有名称的。
CLIENT UNBLOCK
最早可用版本:5.0.0
时间复杂度:O(log N) N是客户端连接数
用法:CLIENT UNBLOCK client-id [TIMEOUT|ERROR]
这个命令可以解除被阻塞的客户端(执行了BPOP、XREAD、WAIT等命令)。
默认情况下,如果阻塞超时,会解除阻塞。这里也可以有其他参数,TIMEOUT或ERROR。如果设置为ERROR,那么,被强制解除阻塞的连接会返回一个-UNBLOCKED错误。
这个命令主要用于少量连接监控多个key时,如果要监控新的key,又不想使用更多的连接,那么就解除一个连接的阻塞,监控新的key后再重新阻塞。
COMMAND
最早可用版本:2.8.13
时间复杂度:O(N),N是Redis命令总数
返回所有Redis命令的相关信息。
返回信息的第一层包含以下内容:
命令的名称
命令arity(可接受的参数数量)
命令标志
第一个key在参数列表中的位置
最后一个key在参数列表中的位置
用于定位重复key的step
命令arity如果是整数,表示命令的请求参数(包括命令名称)数量是一个固定的值;如果是负数,表示请求参数的最小数量。
11) 1) "get"
2 2) (integer) 2
3 3) 1) readonly
4 4) (integer) 1
5 5) (integer) 1
6 6) (integer) 1
11) 1) "mget"
2 2) (integer) -2
3 3) 1) readonly
4 4) (integer) 1
5 5) (integer) -1
6 6) (integer) 1
命令标志包括以下几种:
write:命令会改变数据
readonly:命令不会改变key的值
denyoom:如果发生OOM,则拒绝命令
admin:服务器管理员命令
pubsub:和订阅模式有关的命令
noscript:脚本中不能执行的命令
random:命令的执行结果随机
sort_for_scrpt:如果在脚本中执行,结果会被排序
loading:允许命令在数据库加载时执行
stale:副本中有过时数据时,仍然可以执行命令
skip_monitor:不在MONITOR中显示命令
asking:集群相关,导入时仍可执行命令
fast:命令操作时间不变或者是log(N)
movablekeys:命令没有预先执行的key,必须自己指定
COMMAND COUNT
最早可用版本:2.8.13
时间复杂度:O(1)
返回当前Redis服务器支持的命令数量
COMMANC GETKEYS
最早可用版本:2.8.13
时间复杂度:O(N)
输出命令中的key
1> COMMAND GETKEYS mset a b c d e f
21) "a"
32) "c"
43) "e"
COMMAND INFO
最早可用版本:2.8.13
时间复杂度:O(N)
返回指定命令的详细信息,返回结果的内容和COMMAND一样,如果命令不存在,返回nil。
1> COMMAND INFO get
21) 1) "get"
3 2) (integer) 2
4 3) 1) readonly
5 2) fast
6 4) (integer) 1
7 5) (integer) 1
8 6) (integer) 1
CONFIG GET
最早可用版本:2.0.0
这个命令可以读redis服务器的配置参数,在2.6版本以后,才可以读到全部配置。命令支持模糊匹配
1config get *max-*-entries*
21) "hash-max-zipmap-entries"
32) "512"
43) "list-max-ziplist-entries"
54) "512"
65) "set-max-intset-entries"
76) "512"
CONFIG RESETSTAT
最早可用版本:2.0.0
时间复杂度:O(1)
重置INFO命令中的一些统计信息,包括
Key命中数
Key未命中数
命令处理数量
连接数
过期Key的数量
拒绝的连接数
最近的fork(2)时间
aof_delayed_fsync
计数器
CONFIG REWRITE
最早可用版本:2.8.0
该命令用于重写redis.conf文件,应用最小的改变,使其反映当前服务器的配置。如果原始文件不存在,该命令也可以重头写一个配置文件。
CONFIG SET
最早可用版本:2.0.0
该命令用于修改服务器的配置。可以使用CONFIG GET *
查看可修改的配置。
DBSIZE
最早可用版本:1.0.0
返回当前数据库key的数量
DEBUG OBJECT
最早可用版本:1.0.0
这个命令不应该在客户端使用,具体请看OBJECT命令。
DEBUG SEGFAULT
最早可用版本:1.0.0
这个命令用于执行无效的内存访问,导致Redis崩溃,它用于在开发过程中模拟错误。
FLUSHALL
最早可用版本:1.0.0
删除所有数据库中的key。
4.0.0版本以后,可以使用ASYNC参数,这个参数可以在后台进行删除任务。
FLUSHDB
最早可用版本:1.0.0
删除当前数据库的所有key。
INFO
INFO命令返回服务器的详细信息。可以执行显示的部分:
server:Redis server通用信息
clients:客户端连接部分
memory:内存相关信息
persistence:RDB和AOF相关信息
stats:通用统计信息
replication:主从复制信息
cpu:CPU相关统计
commandstats:Redis命令统计
cluster:Redis集群部分
keyspace:数据库相关信息
LASTSAVE
最早可用版本:1.0.0
返回DB最后一次保存成功的时间。
MEMORY DOCTOR
最早可用版本:4.0.0
该命令报告Redis服务器遇到的与内存相关的问题,并就可能的补救措施提出建议。
MEMORY HELP
最早可用版本:4.0.0
该命令返回描述不同子命令的帮助文本。
MEMORY MALLOC-STATS
最早可用版本:4.0.0
该命令提供了内存分配器的内部统计报告。这个命令只有在使用jemalloc作为分配器时可用。
MEMORY PURGE
最早可用版本:4.0.0
该命令尝试清除脏页面,以便内存分配器回收。
MEMORY STATS
最早可用版本:4.0.0
返回内存的使用情况,包括以下维度:(没有特别说明,则以字节为单位)
peak.allocated:Redis内存消耗的峰值
total.allocated:Redis使用的内存总数
startup.allocated:Redis启动时,初始化所需要的内存
replication.backlog:复制log积压的大小
clients.slaves:所有副本的总开销
clients.normal:所有客户端的总开销
aof.buffer:当前AOF缓冲区的总开销
dbXXX:对于每个数据库,主字典和到期字典的开销
overhead.total:所有的间接开销
keys.count:所有数据库中key的总数
keys.bytes-per-key:净内存使用和keys.count的比率
dataset.bytes:数据集的开销
dataset.percentage:数据集开销所占百分比
peak.percentage:peak.allocated占total.allocated的百分比
fragmentation:碎片内存的比率
MEMORY USAGE
最早可用版本:4.0.0
时间复杂度:O(N)
用法 MEMORY USAGE key [Samples count]
该命令返回了指定key和它的value存储所占用的内存大小。
对于嵌套数据类型,可以使用SAMPLES参数,其中count是采样嵌套的数量,默认是5,如果要对所有嵌套值进行采样,需要将SAMPLES设置为0。
MONITOR
最早可用版本:1.0.0
MONITOR是一个调试命令,它可以回溯Redis服务器处理的每个命令。它可以帮助理解数据库发生了什么。这个命令可以通过redis-cli和telnet使用。
安全起见,某些命令是不会被MONITOR记录的(如CONFIG)
REPLICAOF
最早可用版本:5.0.0
这个命令可以改变从服务器的从属关系。
对于一台从服务器来说,执行REPLICAOF NO ONE
命令,结果是当前服务器变成master。而执行REPLICAOF host port
命令会改变原从属关系,是从服务器归属于新的master。
ROLE
最早可用版本:2.8.12
返回Redis实例的角色信息:包括:master、slave和sentinel
对于master节点:
11) "master"
22) (integer) 3129659
33) 1) 1) "127.0.0.1"
4 2) "9001"
5 3) "3129242"
6 2) 1) "127.0.0.1"
7 2) "9002"
8 3) "3129543"
第一行是master字符串;第二行是主从复制的偏移量;用于标记重新同步时开始的位置,第三行开始是从节点的信息,包括IP、端口号和最后同步的从节点偏移量。
对于从节点:
11) "slave"
22) "127.0.0.1"
33) (integer) 9000
44) "connected"
55) (integer) 3167038
第一行返回slave字符串;第二行是IP;第三行是端口号;第四行是与主节点连接状态,可以是connect(需要与主节点连接),connecting(正在连接),sync(尝试进行主从同步),connected(从节点在线);第五行是从节点收到的数据量
对于sentinel
11) "sentinel"
22) 1) "resque-master"
3 2) "html-fragments-master"
4 3) "stats-master"
5 4) "metadata-master"
第一行是sentinel;第二行之后是监控master的名字。
SAVE
最早可用版本:1.0.0
同步的执行保存当前数据集快照,并写入到RDB文件。不要在生产环境使用这个命令!
SHUTDOWN
最早可用版本:1.0.0
这个命令有以下操作:
停止全部客户端
如果设置了save point,就会执行SAVE命令
如果AOF是enabled,刷新AOF文件
退出服务器
如果启用了持久化,则可以保证数据不丢失。
如果执行SHUTDOWN SAVE,即便没有save point,仍然会强制执行保存操作。
如果执行SHUTDOWN NOSAVE,有保存点也不会执行保存操作。
SLAVEOF
最早可用版本:1.0.0
该命令被REPLICAOF替代
SLOWLOG
最早可用版本:2.2.12
这个命令用来读取并重置慢查询的日志。通过slowlog-log-slower-than参数设置慢查询的时间,超过这个时间就会被记录
TIME
最早可用版本:2.6.0
时间复杂度:O(1)
该命令返回当前服务器时间的秒数,以及当前秒中已经过去的微秒数。
Redis命令详解:Server相关推荐
- Redis命令详解:Connection
最近在学习Redis的相关知识,上一篇我们也介绍了Redis的安装方法和基本数据结构,后面就打算开一个新的系列文章:Redis命令详解.既是对基础的巩固,也是为了以后查询起来更方便. 整个系列会分为以 ...
- Redis命令详解:Hashs
Hash是一种String类型的field.value的映射表,因此,它非常适合存储对象.下面我们来一一介绍与Hash相关的命令. HDEL 最早可用版本:2.0.0 时间复杂度:O(N),其中N为要 ...
- redis命令详解与使用场景举例——Server(服务器)
BGREWRITEAOF 执行一个 AOF文件 重写操作.重写会创建一个当前 AOF 文件的体积优化版本. 即使 BGREWRITEAOF 执行失败,也不会有任何数据丢失,因为旧的 AOF 文件在 B ...
- Redis命令详解:Cluster
前文中我们介绍过了Redis的三种集群方案,没有了解过的同学可以自行前往.今天要介绍的Redis的亲儿子Cluster相关的命令. CLUSTER ADDSLOTS 最早可用版本:3.0.0 时间复杂 ...
- Redis命令详解:Geo
Redis Geo相关命令. GEOADD 最早可用版本:3.2.0 时间复杂度:O(log(N)),N是Sorted set元素数量 用法:GEOADDkey longitude latitude ...
- Redis命令详解:Streams
Redis5.0迎来了一种新的数据结构Streams,没有了解过的同学可以先阅读前文,今天来介绍一下Streams相关的命令. XACK 最早可用版本:5.0.0 时间复杂度:O(1) 用法:XACK ...
- Redis命令详解:Pub/Sub
Redis发布订阅模式相关命令. PSUBSCRIBE 最早可用版本:2.0.0 时间复杂度:O(N),N是已订阅的客户端数. 订阅给定规则的客户端,支持的形式包括: h?llo 订阅hello,ha ...
- Redis命令详解:Transactions
Redis的事务和我们常见的数据库的事务最大的区别就是,Redis的事务中如果有一个命令执行失败,其他命令仍然可以执行成功.Redis的事务以MULTI开始,由EXEC触发.在EXEC前的操作都将被放 ...
- Redis命令详解:HyperLogLog
HyperLogLog是Redis的高级数据结构,它在做基数统计的时候非常有用,每个HyperLogLog的键可以计算接近264不同元素的基数,而大小只需要12KB. HyperLogLog目前只支持 ...
最新文章
- 基数排序算法LSD实现
- 交叉熵损失函数的通用性(为什么深度学习DL普遍用它):预测输出与 y 差得越多,L 的值越大,也就是说对当前模型的 “ 惩罚 ” 越大,而且是非线性增大是一种类似指数增长的级别,结论:它对结果有引导性
- 《人工智能北京共识》发布, 智源研究院成立伦理与安全研究中心
- Windows 08R2_AD图文详解
- 整理的常用JAVA开源库简介
- ubuntu20.04安装mysql教程
- resteasy_RESTEasy教程第2部分:Spring集成
- python 收发邮件_python发送各类邮件的主要基本方法
- python web开发实战pdf 百度网盘_python web开发实战 pdf
- 用python模拟微信支付_微信app支付python代码实现
- 吉林省吉林市谷歌高清卫星地图下载(百度网盘离线包下载)
- 如何出版一本技术类书籍
- MySQL 两个数据库表中合并数据
- css banner滚动,css编写banner轮播
- 百度地图定位到了非洲的问题
- Ceph 命令 pool image 纠删
- OE分布式智能云生态
- . [Error] no match for ‘operator=‘ (operand types are ‘STU‘ and ‘int‘)
- C语言I博客作业07
- Linux —— 线程安全
热门文章
- 剑指Offer29-丑数
- 掉光的头发竟然又长出来了!这瓶泰国变态生姜水,连秃头都能救一下!
- 计算机存的汉字需要多少,4g的软件可以存储多少个汉字
- html5 见缝插针,HTML5见缝插针小游戏
- C语言编程实现求解应力向量,基于MATLAB与Visual+C%2b%2b实现主应力的编程求解.pdf...
- 智慧城市将成为未来建设的主要方向
- 计算机毕业设计ssm基于Java的家校沟通程序
- STM32F103之实验6 采用MPU6050及DMP解算移动机器人姿态实验
- Batch_size一些说明跟作用
- U盘中毒文件被隐藏的解决方法