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。每个连接都会保证两点:

  1. 不会重复,所以如果返回的ID相同,那么调用方就可以确定底层是没有断开重连的。

  2. 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实例迁移到另一个实例,例如当一个实例需要进行系统升级时,我们应该这样做:

  1. 使用CLIENT PAUSE暂停所有客户端

  2. 等待几秒钟,以便从节点与主节点数据同步完成

  3. 将一个从节点切换成主节点

  4. 重新使客户端连接到新的主节点

这个命令通常在事务中和INFO replication命令一起使用,这样做可以使从节点和主节点同步完成。

CLIENT REPLY

最早可用版本:3.2

时间复杂度:O(1)

这个命令用来禁止服务器对当前客户端回复。它有以下几种使用场景:

  1. 客户端发送fire和forget命令时(不关心什么时候完成的命令)

  2. 加载大量数据

  3. 正在创建缓存

在这些情况下,客户端会忽略服务器的回复,因此,服务器回复是一种资源的浪费。

命令支持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相关推荐

  1. Redis命令详解:Connection

    最近在学习Redis的相关知识,上一篇我们也介绍了Redis的安装方法和基本数据结构,后面就打算开一个新的系列文章:Redis命令详解.既是对基础的巩固,也是为了以后查询起来更方便. 整个系列会分为以 ...

  2. Redis命令详解:Hashs

    Hash是一种String类型的field.value的映射表,因此,它非常适合存储对象.下面我们来一一介绍与Hash相关的命令. HDEL 最早可用版本:2.0.0 时间复杂度:O(N),其中N为要 ...

  3. redis命令详解与使用场景举例——Server(服务器)

    BGREWRITEAOF 执行一个 AOF文件 重写操作.重写会创建一个当前 AOF 文件的体积优化版本. 即使 BGREWRITEAOF 执行失败,也不会有任何数据丢失,因为旧的 AOF 文件在 B ...

  4. Redis命令详解:Cluster

    前文中我们介绍过了Redis的三种集群方案,没有了解过的同学可以自行前往.今天要介绍的Redis的亲儿子Cluster相关的命令. CLUSTER ADDSLOTS 最早可用版本:3.0.0 时间复杂 ...

  5. Redis命令详解:Geo

    Redis Geo相关命令. GEOADD 最早可用版本:3.2.0 时间复杂度:O(log(N)),N是Sorted set元素数量 用法:GEOADDkey longitude latitude ...

  6. Redis命令详解:Streams

    Redis5.0迎来了一种新的数据结构Streams,没有了解过的同学可以先阅读前文,今天来介绍一下Streams相关的命令. XACK 最早可用版本:5.0.0 时间复杂度:O(1) 用法:XACK ...

  7. Redis命令详解:Pub/Sub

    Redis发布订阅模式相关命令. PSUBSCRIBE 最早可用版本:2.0.0 时间复杂度:O(N),N是已订阅的客户端数. 订阅给定规则的客户端,支持的形式包括: h?llo 订阅hello,ha ...

  8. Redis命令详解:Transactions

    Redis的事务和我们常见的数据库的事务最大的区别就是,Redis的事务中如果有一个命令执行失败,其他命令仍然可以执行成功.Redis的事务以MULTI开始,由EXEC触发.在EXEC前的操作都将被放 ...

  9. Redis命令详解:HyperLogLog

    HyperLogLog是Redis的高级数据结构,它在做基数统计的时候非常有用,每个HyperLogLog的键可以计算接近264不同元素的基数,而大小只需要12KB. HyperLogLog目前只支持 ...

最新文章

  1. 基数排序算法LSD实现
  2. 交叉熵损失函数的通用性(为什么深度学习DL普遍用它):预测输出与 y 差得越多,L 的值越大,也就是说对当前模型的 “ 惩罚 ” 越大,而且是非线性增大是一种类似指数增长的级别,结论:它对结果有引导性
  3. 《人工智能北京共识》发布, 智源研究院成立伦理与安全研究中心
  4. Windows 08R2_AD图文详解
  5. 整理的常用JAVA开源库简介
  6. ubuntu20.04安装mysql教程
  7. resteasy_RESTEasy教程第2部分:Spring集成
  8. python 收发邮件_python发送各类邮件的主要基本方法
  9. python web开发实战pdf 百度网盘_python web开发实战 pdf
  10. 用python模拟微信支付_微信app支付python代码实现
  11. 吉林省吉林市谷歌高清卫星地图下载(百度网盘离线包下载)
  12. 如何出版一本技术类书籍
  13. MySQL 两个数据库表中合并数据
  14. css banner滚动,css编写banner轮播
  15. 百度地图定位到了非洲的问题
  16. Ceph 命令 pool image 纠删
  17. OE分布式智能云生态
  18. . [Error] no match for ‘operator=‘ (operand types are ‘STU‘ and ‘int‘)
  19. C语言I博客作业07
  20. Linux —— 线程安全

热门文章

  1. 剑指Offer29-丑数
  2. 掉光的头发竟然又长出来了!这瓶泰国变态生姜水,连秃头都能救一下!
  3. 计算机存的汉字需要多少,4g的软件可以存储多少个汉字
  4. html5 见缝插针,HTML5见缝插针小游戏
  5. C语言编程实现求解应力向量,基于MATLAB与Visual+C%2b%2b实现主应力的编程求解.pdf...
  6. 智慧城市将成为未来建设的主要方向
  7. 计算机毕业设计ssm基于Java的家校沟通程序
  8. STM32F103之实验6 采用MPU6050及DMP解算移动机器人姿态实验
  9. Batch_size一些说明跟作用
  10. U盘中毒文件被隐藏的解决方法