Redis命令学习,服务器篇
最早可用版本:1.0.0
使Redis重写AOF文件,重写后的AOF文件相较于当前版本的AOF文件占用的空间更小。即使重写失败,数据也不会丢失,因为在重写成功前,旧版本的AOF文件不会改动。重写操作只会在后台没有其他持久化工作时进行:
Redis2.4版本以后,重写AOF操作会自动触发。想要了解更多信息可以查看持久化文档。
最早可用版本:1.0.0
在后台保存当前数据库到磁盘。命令会马上返回OK,Redis会fork出一个子进程来进行此操作,而父进程继续提供服务。可以使用LASTSAVE命令查看保存操作是否成功。
最早可用版本:2.6.9
时间复杂度:O(1)
这个命令会返回当前连接使用CLIENT SETNAME设置的连接名称,如果没有设置,则返回空。
最早可用版本:5.0.0
时间复杂度:O(1)
返回当前连接的ID。每个连接都会保证两点:
jackeyzhe@ubuntu:~/redis-5.0.4/src$ ./redis-cli
127.0.0.1:6379> CLIENT ID
(integer) 3
127.0.0.1:6379>
jackeyzhe@ubuntu:~/redis-5.0.4/src$ ./redis-cli
127.0.0.1:6379> CLIENT ID
(integer) 4
最早可用版本: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之前,都可以指定要关闭的连接地址,像下面这种形式:
CLIENT KILL addr:port
ip:port应该和CLIENT LIST命令中的一行匹配。
在2.8.12及以后的版本,则可以使用以下形式:
CLIENT KILL <filter> <value> ... ... <filter> <value>
这种形式支持多种根据多种属性匹配客户端:
注意:从Redis5开始type不再使用slave,改为replica
上述的多种过滤器也可以组合使用。使用新的形式时,返回值为关闭的客户端数量。由于Redis是单线程的,所以这个命令不能关闭一个正在执行命令的客户端。
最早可用版本:2.4.0
时间复杂度:O(N),N是客户端连接数
用法:CLIENT LIST [TYPE normal|master|replica|pubsub]
这个命令用来查看连接的客户端信息,在Redis5之后,可以使用TYPE参数。
127.0.0.1:6379> CLIENT LIST
id=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
id=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
返回值:每行代表一个客户端连接,字段包括:
客户端标志包括以下几种:
文件描述符事件包括:
r:客户端套接字可读
w:客户端套接字可写
最早可用版本:2.9.50
时间复杂度:O(1)
这个命令可以使所有连接暂停一段时间(单位:毫秒)。这个命令通常用来将连接从一个Redis实例迁移到另一个实例,例如当一个实例需要进行系统升级时,我们应该这样做:
这个命令通常在事务中和INFO replication命令一起使用,这样做可以使从节点和主节点同步完成。
最早可用版本:3.2
时间复杂度:O(1)
这个命令用来禁止服务器对当前客户端回复。它有以下几种使用场景:
在这些情况下,客户端会忽略服务器的回复,因此,服务器回复是一种资源的浪费。
命令支持3个参数:
最早可用版本:2.6.9
时间复杂度:O(1)
这个命令用来给连接设置一个名字。这个命令会在CLIENT LIST的输出列表中显示。名字的长度没有限制,但一般不超过Redis字符串类型的长度(512MB)。名字里不能有空格。可以通过设置空字符串的方式来删除一个连接的名称,每个新的连接是没有名称的。
最早可用版本:5.0.0
时间复杂度:O(log N) N是客户端连接数
用法:CLIENT UNBLOCK client-id [TIMEOUT|ERROR]
这个命令可以解除被阻塞的客户端(执行了BPOP、XREAD、WAIT等命令)。
默认情况下,如果阻塞超时,会解除阻塞。这里也可以有其他参数,TIMEOUT或ERROR。如果设置为ERROR,那么,被强制解除阻塞的连接会返回一个-UNBLOCKED错误。
这个命令主要用于少量连接监控多个key时,如果要监控新的key,又不想使用更多的连接,那么就解除一个连接的阻塞,监控新的key后再重新阻塞。
最早可用版本:2.8.13
时间复杂度:O(N),N是Redis命令总数
返回所有Redis命令的相关信息。
返回信息的第一层包含以下内容:
命令arity如果是整数,表示命令的请求参数(包括命令名称)数量是一个固定的值;如果是负数,表示请求参数的最小数量。
1) 1) "get"
2) (integer) 2
3) 1) readonly
4) (integer) 1
5) (integer) 1
6) (integer) 1
1) 1) "mget"
2) (integer) -2
3) 1) readonly
4) (integer) 1
5) (integer) -1
6) (integer) 1
命令标志包括以下几种:
最早可用版本:2.8.13
时间复杂度:O(1)
返回当前Redis服务器支持的命令数量
最早可用版本:2.8.13
时间复杂度:O(N)
输出命令中的key
> COMMAND GETKEYS mset a b c d e f
1) "a"
2) "c"
3) "e"
最早可用版本:2.8.13
时间复杂度:O(N)
返回指定命令的详细信息,返回结果的内容和COMMAND一样,如果命令不存在,返回nil。
> COMMAND INFO get
1) 1) "get"
2) (integer) 2
3) 1) readonly
2) fast
4) (integer) 1
5) (integer) 1
6) (integer) 1
最早可用版本:2.0.0
这个命令可以读redis服务器的配置参数,在2.6版本以后,才可以读到全部配置。命令支持模糊匹配
config get *max-*-entries*
1) "hash-max-zipmap-entries"
2) "512"
3) "list-max-ziplist-entries"
4) "512"
5) "set-max-intset-entries"
6) "512"
最早可用版本:2.0.0
时间复杂度:O(1)
重置INFO命令中的一些统计信息,包括
aof_delayed_fsync
计数器最早可用版本:2.8.0
该命令用于重写redis.conf文件,应用最小的改变,使其反映当前服务器的配置。如果原始文件不存在,该命令也可以重头写一个配置文件。
最早可用版本:2.0.0
该命令用于修改服务器的配置。可以使用CONFIG GET *
查看可修改的配置。
最早可用版本:1.0.0
返回当前数据库key的数量
最早可用版本:1.0.0
这个命令不应该在客户端使用,具体请看OBJECT命令。
最早可用版本:1.0.0
这个命令用于执行无效的内存访问,导致Redis崩溃,它用于在开发过程中模拟错误。
最早可用版本:1.0.0
删除所有数据库中的key。
4.0.0版本以后,可以使用ASYNC参数,这个参数可以在后台进行删除任务。
最早可用版本:1.0.0
删除当前数据库的所有key。
INFO命令返回服务器的详细信息。可以执行显示的部分:
最早可用版本:1.0.0
返回DB最后一次保存成功的时间。
最早可用版本:4.0.0
该命令报告Redis服务器遇到的与内存相关的问题,并就可能的补救措施提出建议。
最早可用版本:4.0.0
该命令返回描述不同子命令的帮助文本。
最早可用版本:4.0.0
该命令提供了内存分配器的内部统计报告。这个命令只有在使用jemalloc作为分配器时可用。
最早可用版本:4.0.0
该命令尝试清除脏页面,以便内存分配器回收。
最早可用版本:4.0.0
返回内存的使用情况,包括以下维度:(没有特别说明,则以字节为单位)
最早可用版本:4.0.0
时间复杂度:O(N)
用法 MEMORY USAGE key [Samples count]
该命令返回了指定key和它的value存储所占用的内存大小。
对于嵌套数据类型,可以使用SAMPLES参数,其中count是采样嵌套的数量,默认是5,如果要对所有嵌套值进行采样,需要将SAMPLES设置为0。
最早可用版本:1.0.0
MONITOR是一个调试命令,它可以回溯Redis服务器处理的每个命令。它可以帮助理解数据库发生了什么。这个命令可以通过redis-cli和telnet使用。
安全起见,某些命令是不会被MONITOR记录的(如CONFIG)
最早可用版本:5.0.0
这个命令可以改变从服务器的从属关系。
对于一台从服务器来说,执行REPLICAOF NO ONE
命令,结果是当前服务器变成master。而执行REPLICAOF host port
命令会改变原从属关系,是从服务器归属于新的master。
最早可用版本:2.8.12
返回Redis实例的角色信息:包括:master、slave和sentinel
对于master节点:
1) "master"
2) (integer) 3129659
3) 1) 1) "127.0.0.1"
2) "9001"
3) "3129242"
2) 1) "127.0.0.1"
2) "9002"
3) "3129543"
第一行是master字符串;第二行是主从复制的偏移量;用于标记重新同步时开始的位置,第三行开始是从节点的信息,包括IP、端口号和最后同步的从节点偏移量。
对于从节点:
1) "slave"
2) "127.0.0.1"
3) (integer) 9000
4) "connected"
5) (integer) 3167038
第一行返回slave字符串;第二行是IP;第三行是端口号;第四行是与主节点连接状态,可以是connect(需要与主节点连接),connecting(正在连接),sync(尝试进行主从同步),connected(从节点在线);第五行是从节点收到的数据量
对于sentinel
1) "sentinel"
2) 1) "resque-master"
2) "html-fragments-master"
3) "stats-master"
4) "metadata-master"
第一行是sentinel;第二行之后是监控master的名字。
最早可用版本:1.0.0
同步的执行保存当前数据集快照,并写入到RDB文件。不要在生产环境使用这个命令!
最早可用版本:1.0.0
这个命令有以下操作:
如果启用了持久化,则可以保证数据不丢失。
如果执行SHUTDOWN SAVE,即便没有save point,仍然会强制执行保存操作。
如果执行SHUTDOWN NOSAVE,有保存点也不会执行保存操作。
最早可用版本:1.0.0
该命令被REPLICAOF替代
最早可用版本:2.2.12
这个命令用来读取并重置慢查询的日志。通过slowlog-log-slower-than参数设置慢查询的时间,超过这个时间就会被记录
最早可用版本:2.6.0
时间复杂度:O(1)
该命令返回当前服务器时间的秒数,以及当前秒中已经过去的微秒数。