BGREWRITEAOF

执行一个 AOF文件 重写操作。重写会创建一个当前 AOF 文件的体积优化版本。
即使 BGREWRITEAOF 执行失败,也不会有任何数据丢失,因为旧的 AOF 文件在 BGREWRITEAOF 成功之前不会被修改。
重写操作只会在没有其他持久化工作在后台执行时被触发,也就是说:
● 如果 Redis 的子进程正在执行快照的保存工作,那么 AOF 重写的操作会被预定(scheduled),等到保存工作完成之后再执行 AOF 重写。在这种情况下, BGREWRITEAOF 的返回值仍然是 OK ,但还会加上一条额外的信息,说明 BGREWRITEAOF 要等到保存操作完成之后才能执行。在 Redis 2.6 或以上的版本,可以使用 INFO 命令查看 BGREWRITEAOF 是否被预定。
● 如果已经有别的 AOF 文件重写在执行,那么 BGREWRITEAOF 返回一个错误,并且这个新的 BGREWRITEAOF 请求也不会被预定到下次执行。
从 Redis 2.4 开始, AOF 重写由 Redis 自行触发, BGREWRITEAOF 仅仅用于手动触发重写操作。
请移步 持久化文档(英文) 查看更多相关细节。
可用版本:
1.0.0+
时间复杂度:
O(N), N 为要追加到 AOF 文件中的数据数量。
返回值:
反馈信息。

redis> BGREWRITEAOF
Background append only file rewriting started

BGSAVE

在后台异步(Asynchronously)保存当前数据库的数据到磁盘。
BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。
客户端可以通过 LASTSAVE 命令查看相关信息,判断 BGSAVE 命令是否执行成功。
请移步 持久化文档 查看更多相关细节。
可用版本:
1.0.0+
时间复杂度:
O(N), N 为要保存到数据库中的 key 的数量。
返回值:
反馈信息。

redis> BGSAVE
Background saving started

CLIENT GETNAME

返回 CLIENT SETNAME 命令为连接设置的名字。
因为新创建的连接默认是没有名字的, 对于没有名字的连接, CLIENT GETNAME 返回空白回复。
可用版本
2.6.9
时间复杂度
O(1)
返回值
如果连接没有设置名字,那么返回空白回复;
如果有设置名字,那么返回名字。
新连接默认没有名字

redis 127.0.0.1:6379> CLIENT GETNAME
(nil)

设置名字

redis 127.0.0.1:6379> CLIENT SETNAME hello-world-connection
OK

返回名字

redis 127.0.0.1:6379> CLIENT GETNAME
"hello-world-connection"

CLIENT KILL ip:port

关闭地址为 ip:port 的客户端。
ip:port 应该和 CLIENT LIST 命令输出的其中一行匹配。
因为 Redis 使用单线程设计,所以当 Redis 正在执行命令的时候,不会有客户端被断开连接。
如果要被断开连接的客户端正在执行命令,那么当这个命令执行之后,在发送下一个命令的时候,它就会收到一个网络错误,告知它自身的连接已被关闭。
可用版本
2.4.0+
时间复杂度
O(N) , N 为已连接的客户端数量。
返回值
当指定的客户端存在,且被成功关闭时,返回 OK 。
列出所有已连接客户端

redis 127.0.0.1:6379> CLIENT LIST
addr=127.0.0.1:43501 fd=5 age=10 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

杀死当前客户端的连接

redis 127.0.0.1:6379> CLIENT KILL 127.0.0.1:43501
OK

之前的连接已经被关闭,CLI 客户端又重新建立了连接
之前的端口是 43501 ,现在是 43504

redis 127.0.0.1:6379> CLIENT LIST
addr=127.0.0.1:43504 fd=5 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

CLIENT LIST

以人类可读的格式,返回所有连接到服务器的客户端信息和统计数据。

redis> CLIENT LIST
addr=127.0.0.1:43143 fd=6 age=183 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
addr=127.0.0.1:43163 fd=5 age=35 idle=15 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=ping
addr=127.0.0.1:43167 fd=7 age=24 idle=6 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=get

可用版本
2.4.0
时间复杂度
O(N) , N 为连接到服务器的客户端数量。
返回值
命令返回多行字符串,这些字符串按以下形式被格式化:
● 每个已连接客户端对应一行(以 LF 分割)
● 每行字符串由一系列 属性=值 形式的域组成,每个域之间以空格分开
以下是域的含义:
● addr : 客户端的地址和端口
● fd : 套接字所使用的文件描述符
● age : 以秒计算的已连接时长
● idle : 以秒计算的空闲时长
● flags : 客户端 flag (见下文)
● db : 该客户端正在使用的数据库 ID
● sub : 已订阅频道的数量
● psub : 已订阅模式的数量
● multi : 在事务中被执行的命令数量
● qbuf : 查询缓存的长度( 0 表示没有查询在等待)
● qbuf-free : 查询缓存的剩余空间( 0 表示没有剩余空间)
● obl : 输出缓存的长度
● oll : 输出列表的长度(当输出缓存没有剩余空间时,回复被入队到这个队列里)
● omem : 输出缓存的内存占用量
● events : 文件描述符事件(见下文)
● cmd : 最近一次执行的命令
客户端 flag 可以由以下部分组成:
● O : 客户端是 MONITOR 模式下的附属节点(slave)
● S : 客户端是一般模式下(normal)的附属节点
● M : 客户端是主节点(master)
● x : 客户端正在执行事务
● b : 客户端正在等待阻塞事件
● i : 客户端正在等待 VM I/O 操作(已废弃)
● d : 一个受监视(watched)的键已被修改, EXEC 命令将失败
● c : 在将回复完整地写出之后,关闭链接
● u : 客户端未被阻塞(unblocked)
● A : 尽可能快地关闭连接
● N : 未设置任何 flag
文件描述符事件可以是:
● r : 客户端套接字(在事件 loop 中)是可读的(readable)
● w : 客户端套接字(在事件 loop 中)是可写的(writeable)
为了 debug 的需要,经常会对域进行添加和删除,一个安全的 Redis 客户端应该可以对 CLIENT LIST 的输出进行相应的处理(parse),比如忽略不存在的域,跳过未知域,诸如此类。

CLIENT SETNAME connection-name

为当前连接分配一个名字。
这个名字会显示在 CLIENT LIST 命令的结果中, 用于识别当前正在与服务器进行连接的客户端。
举个例子, 在使用 Redis 构建队列(queue)时, 可以根据连接负责的任务(role), 为信息生产者(producer)和信息消费者(consumer)分别设置不同的名字。
名字使用 Redis 的字符串类型来保存, 最大可以占用 512 MB 。 另外, 为了避免和 CLIENT LIST 命令的输出格式发生冲突, 名字里不允许使用空格。
要移除一个连接的名字, 可以将连接的名字设为空字符串 “” 。
使用 CLIENT GETNAME 命令可以取出连接的名字。
新创建的连接默认是没有名字的。
在 Redis 应用程序发生连接泄漏时,为连接设置名字是一种很好的 debug 手段。
可用版本
2.6.9+
时间复杂度
O(1)
返回值
设置成功时返回 OK 。
新连接默认没有名字

redis 127.0.0.1:6379> CLIENT GETNAME
(nil)

设置名字

redis 127.0.0.1:6379> CLIENT SETNAME hello-world-connection
OK

返回名字

redis 127.0.0.1:6379> CLIENT GETNAME
"hello-world-connection"

在客户端列表中查看

redis 127.0.0.1:6379> CLIENT LIST
addr=127.0.0.1:36851
fd=5
name=hello-world-connection     # <- 名字
age=51
...

清除名字

redis 127.0.0.1:6379> CLIENT SETNAME        # 只用空格是不行的!
(error) ERR Syntax error, try CLIENT (LIST | KILL ip:port)
redis 127.0.0.1:6379> CLIENT SETNAME ""     # 必须双引号显示包围
OK
redis 127.0.0.1:6379> CLIENT GETNAME        # 清除完毕
(nil)

CONFIG GET parameter

CONFIG GET 命令用于取得运行中的 Redis 服务器的配置参数(configuration parameters),在 Redis 2.4 版本中, 有部分参数没有办法用 CONFIG GET 访问,但是在最新的 Redis 2.6 版本中,所有配置参数都已经可以用 CONFIG GET 访问了。
CONFIG GET 接受单个参数 parameter 作为搜索关键字,查找所有匹配的配置参数,其中参数和值以“键-值对”(key-value pairs)的方式排列。
比如执行 CONFIG GET s* 命令,服务器就会返回所有以 s 开头的配置参数及参数的值:

redis> CONFIG GET s*
1) "save"                       # 参数名:save
2) "900 1 300 10 60 10000"      # save 参数的值
3) "slave-serve-stale-data"     # 参数名: slave-serve-stale-data
4) "yes"                        # slave-serve-stale-data 参数的值
5) "set-max-intset-entries"     # ...
6) "512"
7) "slowlog-log-slower-than"
8) "1000"
9) "slowlog-max-len"
10) "1000"

如果你只是寻找特定的某个参数的话,你当然也可以直接指定参数的名字:

redis> CONFIG GET slowlog-max-len
1) "slowlog-max-len"
2) "1000"

使用命令 CONFIG GET * ,可以列出 CONFIG GET 命令支持的所有参数:

redis> CONFIG GET *
1) "dir"
2) "/var/lib/redis"
3) "dbfilename"
4) "dump.rdb"
5) "requirepass"
6) (nil)
7) "masterauth"
8) (nil)
9) "maxmemory"
10) "0"
11) "maxmemory-policy"
12) "volatile-lru"
13) "maxmemory-samples"
14) "3"
15) "timeout"
16) "0"
17) "appendonly"
18) "no"...
49) "loglevel"
50) "verbose"

所有被 CONFIG SET 所支持的配置参数都可以在配置文件 redis.conf 中找到,不过 CONFIG GET 和 CONFIG SET 使用的格式和 redis.conf 文件所使用的格式有以下两点不同:
● 10kb 、 2gb 这些在配置文件中所使用的储存单位缩写,不可以用在 CONFIG 命令中, CONFIG SET 的值只能通过数字值显式地设定。

像 CONFIG SET xxx 1k 这样的命令是错误的,正确的格式是 CONFIG SET xxx 1000 。
● save 选项在 redis.conf 中是用多行文字储存的,但在 CONFIG GET 命令中,它只打印一行文字。
以下是 save 选项在 redis.conf 文件中的表示:
save 900 1
save 300 10
save 60 10000
但是 CONFIG GET 命令的输出只有一行:

redis> CONFIG GET save
1) "save"
2) "900 1 300 10 60 10000"

上面 save 参数的三个值表示:在 900 秒内最少有 1 个 key 被改动,或者 300 秒内最少有 10 个 key 被改动,又或者 60 秒内最少有 1000 个 key 被改动,以上三个条件随便满足一个,就触发一次保存操作。
可用版本:
2.0.0+
时间复杂度:
不明确
返回值:
给定配置参数的值。

CONFIG RESETSTAT

重置 INFO 命令中的某些统计数据,包括:
● 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 计数器的值)
可用版本:
2.0.0+
时间复杂度:
O(1)
返回值:
总是返回 OK 。
重置前

redis 127.0.0.1:6379> INFO
Server
redis_version:2.5.3
redis_git_sha1:d0407c2d
redis_git_dirty:0
arch_bits:32
multiplexing_api:epoll
gcc_version:4.6.3
process_id:11095
run_id:ef1f6b6c7392e52d6001eaf777acbe547d1192e2
tcp_port:6379
uptime_in_seconds:6
uptime_in_days:0
lru_clock:1205426Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0Memory
used_memory:331076
used_memory_human:323.32K
used_memory_rss:1568768
used_memory_peak:293424
used_memory_peak_human:286.55K
used_memory_lua:16384
mem_fragmentation_ratio:4.74
mem_allocator:jemalloc-2.2.5Persistence
loading:0
aof_enabled:0
changes_since_last_save:0
bgsave_in_progress:0
last_save_time:1333260015
last_bgsave_status:ok
bgrewriteaof_in_progress:0Stats
total_connections_received:1
total_commands_processed:0
instantaneous_ops_per_sec:0
rejected_connections:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0Replication
role:master
connected_slaves:0CPU
used_cpu_sys:0.01
used_cpu_user:0.00
used_cpu_sys_children:0.00
used_cpu_user_children:0.00Keyspace
db0:keys=20,expires=0
重置
redis 127.0.0.
1:6379> CONFIG RESETSTAT
OK

重置后

redis 127.0.0.1:6379> INFOServer
redis_version:2.5.3
redis_git_sha1:d0407c2d
redis_git_dirty:0
arch_bits:32
multiplexing_api:epoll
gcc_version:4.6.3
process_id:11095
run_id:ef1f6b6c7392e52d6001eaf777acbe547d1192e2
tcp_port:6379
uptime_in_seconds:134
uptime_in_days:0
lru_clock:1205438Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0Memory
used_memory:331076
used_memory_human:323.32K
used_memory_rss:1568768
used_memory_peak:330280
used_memory_peak_human:322.54K
used_memory_lua:16384
mem_fragmentation_ratio:4.74
mem_allocator:jemalloc-2.2.5Persistence
loading:0
aof_enabled:0
changes_since_last_save:0
bgsave_in_progress:0
last_save_time:1333260015
last_bgsave_status:ok
bgrewriteaof_in_progress:0Stats
total_connections_received:0
total_commands_processed:1
instantaneous_ops_per_sec:0
rejected_connections:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0Replication
role:master
connected_slaves:0CPU
used_cpu_sys:0.05
used_cpu_user:0.02
used_cpu_sys_children:0.00
used_cpu_user_children:0.00Keyspace
db0:keys=20,expires=0

CONFIG SET parameter value

CONFIG SET 命令可以动态地调整 Redis 服务器的配置(configuration)而无须重启。
你可以使用它修改配置参数,或者改变 Redis 的持久化(Persistence)方式。
CONFIG SET 可以修改的配置参数可以使用命令 CONFIG GET * 来列出,所有被 CONFIG SET 修改的配置参数都会立即生效。
关于 CONFIG SET 命令的更多消息,请参见命令 CONFIG GET 的说明。
关于如何使用 CONFIG SET 命令修改 Redis 持久化方式,请参见 Redis Persistence 。
可用版本:
2.0.0
时间复杂度:
不明确
返回值:
当设置成功时返回 OK ,否则返回一个错误。

redis> CONFIG GET slowlog-max-len
1) "slowlog-max-len"
2) "1024"
redis> CONFIG SET slowlog-max-len 10086
OK
redis> CONFIG GET slowlog-max-len
1) "slowlog-max-len"
2) "10086"

CONFIG REWRITE

CONFIG REWRITE 命令对启动 Redis 服务器时所指定的 redis.conf 文件进行改写: 因为 CONFIG SET 命令可以对服务器的当前配置进行修改, 而修改后的配置可能和 redis.conf 文件中所描述的配置不一样, CONFIG REWRITE 的作用就是通过尽可能少的修改, 将服务器当前所使用的配置记录到 redis.conf 文件中。
重写会以非常保守的方式进行:
● 原有 redis.conf 文件的整体结构和注释会被尽可能地保留。
● 如果一个选项已经存在于原有 redis.conf 文件中 , 那么对该选项的重写会在选项原本所在的位置(行号)上进行。
● 如果一个选项不存在于原有 redis.conf 文件中, 并且该选项被设置为默认值, 那么重写程序不会将这个选项添加到重写后的 redis.conf 文件中。
● 如果一个选项不存在于原有 redis.conf 文件中, 并且该选项被设置为非默认值, 那么这个选项将被添加到重写后的 redis.conf 文件的末尾。
● 未使用的行会被留白。 比如说, 如果你在原有 redis.conf 文件上设置了数个关于 save 选项的参数, 但现在你将这些 save 参数的一个或全部都关闭了, 那么这些不再使用的参数原本所在的行就会变成空白的。
即使启动服务器时所指定的 redis.conf 文件已经不再存在, CONFIG REWRITE 命令也可以重新构建并生成出一个新的 redis.conf 文件。
另一方面, 如果启动服务器时没有载入 redis.conf 文件, 那么执行 CONFIG REWRITE 命令将引发一个错误。
原子性重写
对 redis.conf 文件的重写是原子性的, 并且是一致的: 如果重写出错或重写期间服务器崩溃, 那么重写失败, 原有 redis.conf 文件不会被修改。 如果重写成功, 那么 redis.conf 文件为重写后的新文件。
可用版本
2.8.0+
返回值
一个状态值:如果配置重写成功则返回 OK ,失败则返回一个错误。
测试
以下是执行 CONFIG REWRITE 前, 被载入到 Redis 服务器的 redis.conf 文件中关于 appendonly 选项的设置:
其他选项
appendonly no

其他选项
在执行以下命令之后:

127.0.0.1:6379> CONFIG GET appendonly           # appendonly 处于关闭状态
1) "appendonly"
2) "no"
127.0.0.1:6379> CONFIG SET appendonly yes       # 打开 appendonly
OK
127.0.0.1:6379> CONFIG GET appendonly
1) "appendonly"
2) "yes"
127.0.0.1:6379> CONFIG REWRITE                  # 将 appendonly 的修

改写入到 redis.conf 中
OK
重写后的 redis.conf 文件中的 appendonly 选项将被改写:
其他选项
appendonly yes

DBSIZE

返回当前数据库的 key 的数量。
可用版本:
1.0.0+
时间复杂度:
O(1)
返回值:
当前数据库的 key 的数量。

redis> DBSIZE
(integer) 5
redis> SET new_key "hello_moto"     # 增加一个 key 试试
OK
redis> DBSIZE
(integer) 6

DEBUG OBJECT key

DEBUG OBJECT 是一个调试命令,它不应被客户端所使用。
查看 OBJECT 命令获取更多信息。
可用版本:
1.0.0+
时间复杂度:
O(1)
返回值:
当 key 存在时,返回有关信息。
当 key 不存在时,返回一个错误。

redis> DEBUG OBJECT my_pc
Value at:0xb6838d20 refcount:1 encoding:raw serializedlength:9 lru:283790 lru_seconds_idle:150
redis> DEBUG OBJECT your_mac
(error) ERR no such key

DEBUG SEGFAULT

执行一个不合法的内存访问从而让 Redis 崩溃,仅在开发时用于 BUG 模拟。
可用版本:
1.0.0+
时间复杂度:
不明确
返回值:

redis> DEBUG SEGFAULT
Could not connect to Redis at: Connection refused
not connected>

FLUSHALL

清空整个 Redis 服务器的数据(删除所有数据库的所有 key )。
此命令从不失败。
可用版本:
1.0.0+
时间复杂度:
尚未明确
返回值:
总是返回 OK 。

redis> DBSIZE            # 0 号数据库的 key 数量
(integer) 9
redis> SELECT 1          # 切换到 1 号数据库
OK
redis[1]> DBSIZE         # 1 号数据库的 key 数量
(integer) 6
redis[1]> flushall       # 清空所有数据库的所有 key
OK
redis[1]> DBSIZE         # 不但 1 号数据库被清空了
(integer) 0
redis[1]> SELECT 0       # 0 号数据库(以及其他所有数据库)也一样
OK
redis> DBSIZE
(integer) 0

FLUSHDB

清空当前数据库中的所有 key。
此命令从不失败。
可用版本:
1.0.0+
时间复杂度:
O(1)
返回值:
总是返回 OK 。

redis> DBSIZE    # 清空前的 key 数量
(integer) 4
redis> FLUSHDB
OK
redis> DBSIZE    # 清空后的 key 数量
(integer) 0

INFO [section]

以一种易于解释(parse)且易于阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。
通过给定可选的参数 section ,可以让命令只返回某一部分的信息:
● server : 一般 Redis 服务器信息,包含以下域:
○ redis_version : Redis 服务器版本
○ redis_git_sha1 : Git SHA1
○ redis_git_dirty : Git dirty flag
○ os : Redis 服务器的宿主操作系统
○ arch_bits : 架构(32 或 64 位)
○ multiplexing_api : Redis 所使用的事件处理机制
○ gcc_version : 编译 Redis 时所使用的 GCC 版本
○ process_id : 服务器进程的 PID
○ run_id : Redis 服务器的随机标识符(用于 Sentinel 和集群)
○ tcp_port : TCP/IP 监听端口
○ uptime_in_seconds : 自 Redis 服务器启动以来,经过的秒数
○ uptime_in_days : 自 Redis 服务器启动以来,经过的天数
○ lru_clock : 以分钟为单位进行自增的时钟,用于 LRU 管理
● clients : 已连接客户端信息,包含以下域:
○ connected_clients : 已连接客户端的数量(不包括通过从属服务器连接的客户端)
○ client_longest_output_list : 当前连接的客户端当中,最长的输出列表
○ client_longest_input_buf : 当前连接的客户端当中,最大输入缓存
○ blocked_clients : 正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量
● memory : 内存信息,包含以下域:
○ used_memory : 由 Redis 分配器分配的内存总量,以字节(byte)为单位
○ used_memory_human : 以人类可读的格式返回 Redis 分配的内存总量
○ used_memory_rss : 从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps 等命令的输出一致。
○ used_memory_peak : Redis 的内存消耗峰值(以字节为单位)
○ used_memory_peak_human : 以人类可读的格式返回 Redis 的内存消耗峰值
○ used_memory_lua : Lua 引擎所使用的内存大小(以字节为单位)
○ mem_fragmentation_ratio : used_memory_rss 和 used_memory 之间的比率
○ mem_allocator : 在编译时指定的, Redis 所使用的内存分配器。可以是 libc 、 jemalloc 或者 tcmalloc 。
在理想情况下, used_memory_rss 的值应该只比 used_memory 稍微高一点儿。
当 rss > used ,且两者的值相差较大时,表示存在(内部或外部的)内存碎片。
内存碎片的比率可以通过 mem_fragmentation_ratio 的值看出。
当 used > rss 时,表示 Redis 的部分内存被操作系统换出到交换空间了,在这种情况下,操作可能会产生明显的延迟。
Because Redis does not have control over how its allocations are mapped to memory pages, high used_memory_rss is often the result of a spike in memory usage.
当 Redis 释放内存时,分配器可能会,也可能不会,将内存返还给操作系统。
如果 Redis 释放了内存,却没有将内存返还给操作系统,那么 used_memory 的值可能和操作系统显示的 Redis 内存占用并不一致。
查看 used_memory_peak 的值可以验证这种情况是否发生。
● persistence : RDB 和 AOF 的相关信息
● stats : 一般统计信息
● replication : 主/从复制信息
● cpu : CPU 计算量统计信息
● commandstats : Redis 命令统计信息
● cluster : Redis 集群信息
● keyspace : 数据库相关的统计信息
除上面给出的这些值以外,参数还可以是下面这两个:
● all : 返回所有信息
● default : 返回默认选择的信息
当不带参数直接调用 INFO 命令时,使用 default 作为默认参数。
不同版本的 Redis 可能对返回的一些域进行了增加或删减。
因此,一个健壮的客户端程序在对 INFO 命令的输出进行分析时,应该能够跳过不认识的域,并且妥善地处理丢失不见的域。
可用版本:
1.0.0+
时间复杂度:
O(1)
返回值:
具体请参见下面的测试代码。

redis> INFO
Server
redis_version:2.5.9
redis_git_sha1:473f3090
redis_git_dirty:0
os:Linux 3.3.7-1-ARCH i686
arch_bits:32
multiplexing_api:epoll
gcc_version:4.7.0
process_id:8104
run_id:bc9e20c6f0aac67d0d396ab950940ae4d1479ad1
tcp_port:6379
uptime_in_seconds:7
uptime_in_days:0
lru_clock:1680564Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0Memory
used_memory:439304
used_memory_human:429.01K
used_memory_rss:13897728
used_memory_peak:401776
used_memory_peak_human:392.36K
used_memory_lua:20480
mem_fragmentation_ratio:31.64
mem_allocator:jemalloc-3.0.0Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1338011402
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1Stats
total_connections_received:1
total_commands_processed:0
instantaneous_ops_per_sec:0
rejected_connections:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0Replication
role:master
connected_slaves:0CPU
used_cpu_sys:0.03
used_cpu_user:0.01
used_cpu_sys_children:0.00
used_cpu_user_children:0.00Keyspace

LASTSAVE

返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示。
可用版本:
1.0.0+
时间复杂度:
O(1)
返回值:
一个 UNIX 时间戳。

redis> LASTSAVE
(integer) 1324043588

MONITOR

实时打印出 Redis 服务器接收到的命令,调试用。
可用版本:
1.0.0+
时间复杂度:
不明确
返回值:
总是返回 OK 。

127.0.0.1:6379> MONITOR
OK

以第一个打印值为例
1378822099.421623 是时间戳
[0 127.0.0.1:56604] 中的 0 是数据库号码, 127… 是 IP 地址和端口
“PING” 是被执行的命令
1378822099.421623 [0 127.0.0.1:56604] “PING”
1378822105.089572 [0 127.0.0.1:56604] “SET” “msg” “hello world”
1378822109.036925 [0 127.0.0.1:56604] “SET” “number” “123”
1378822140.649496 [0 127.0.0.1:56604] “SADD” “fruits” “Apple” “Banana” “Cherry”
1378822154.117160 [0 127.0.0.1:56604] “EXPIRE” “msg” “10086”
1378822257.329412 [0 127.0.0.1:56604] “KEYS” “*”
1378822258.690131 [0 127.0.0.1:56604] “DBSIZE”

PSYNC

用于复制功能(replication)的内部命令。
更多信息请参考 复制(Replication) 文档。
可用版本:
2.8.0+
时间复杂度:
不明确
返回值:
不明确

127.0.0.1:6379> PSYNC ? -1
"REDIS0006\xfe\x00\x00\x02kk\x02vv\x00\x03msg\x05hello\xff\xc3\x96P\x12h\bK\xef"

SAVE

SAVE 命令执行一个同步保存操作,将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘。
一般来说,在生产环境很少执行 SAVE 操作,因为它会阻塞所有客户端,保存数据库的任务通常由 BGSAVE 命令异步地执行。然而,如果负责保存数据的后台子进程不幸出现问题时, SAVE 可以作为保存数据的最后手段来使用。
请参考文档: Redis 的持久化运作方式(英文) 以获取更多消息。
可用版本:
1.0.0+
时间复杂度:
O(N), N 为要保存到数据库中的 key 的数量。
返回值:
保存成功时返回 OK 。

redis> SAVE
OK

SHUTDOWN

SHUTDOWN 命令执行以下操作:
● 停止所有客户端
● 如果有至少一个保存点在等待,执行 SAVE 命令
● 如果 AOF 选项被打开,更新 AOF 文件
● 关闭 redis 服务器(server)
如果持久化被打开的话, SHUTDOWN 命令会保证服务器正常关闭而不丢失任何数据。
另一方面,假如只是单纯地执行 SAVE 命令,然后再执行 QUIT 命令,则没有这一保证 —— 因为在执行 SAVE 之后、执行 QUIT 之前的这段时间中间,其他客户端可能正在和服务器进行通讯,这时如果执行 QUIT 就会造成数据丢失。
SAVE 和 NOSAVE 修饰符
通过使用可选的修饰符,可以修改 SHUTDOWN 命令的表现。比如说:
● 执行 SHUTDOWN SAVE 会强制让数据库执行保存操作,即使没有设定(configure)保存点
● 执行 SHUTDOWN NOSAVE 会阻止数据库执行保存操作,即使已经设定有一个或多个保存点(你可以将这一用法看作是强制停止服务器的一个假想的 ABORT 命令)
可用版本:
1.0.0+
时间复杂度:
不明确
返回值:
执行失败时返回错误。
执行成功时不返回任何信息,服务器和客户端的连接断开,客户端自动退出。

redis> PING
PONG
redis> SHUTDOWN
$ redis
Could not connect to Redis at: Connection refused
not connected>

SLAVEOF host port

SLAVEOF 命令用于在 Redis 运行时动态地修改复制(replication)功能的行为。
通过执行 SLAVEOF host port 命令,可以将当前服务器转变为指定服务器的从属服务器(slave server)。
如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。
另外,对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。
利用『 SLAVEOF NO ONE 不会丢弃同步所得数据集』这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。
可用版本:
1.0.0+
时间复杂度:
SLAVEOF host port ,O(N), N 为要同步的数据数量。
SLAVEOF NO ONE , O(1) 。
返回值:
总是返回 OK 。

redis> SLAVEOF 127.0.0.1 6379
OK
redis> SLAVEOF NO ONE
OK

SLOWLOG subcommand [argument]

什么是 SLOWLOG
Slow log 是 Redis 用来记录查询执行时间的日志系统。
查询执行时间指的是不包括像客户端响应(talking)、发送回复等 IO 操作,而单单是执行一个查询命令所耗费的时间。
另外,slow log 保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启 slow log 而损害 Redis 的速度。
设置 SLOWLOG
Slow log 的行为由两个配置参数(configuration parameter)指定,可以通过改写 redis.conf 文件或者用 CONFIG GET 和 CONFIG SET 命令对它们动态地进行修改。
第一个选项是 slowlog-log-slower-than ,它决定要对执行时间大于多少微秒(microsecond,1秒 = 1,000,000 微秒)的查询进行记录。
比如执行以下命令将让 slow log 记录所有查询时间大于等于 100 微秒的查询:
CONFIG SET slowlog-log-slower-than 100
而以下命令记录所有查询时间大于 1000 微秒的查询:
CONFIG SET slowlog-log-slower-than 1000
另一个选项是 slowlog-max-len ,它决定 slow log 最多能保存多少条日志, slow log 本身是一个 FIFO 队列,当队列大小超过 slowlog-max-len 时,最旧的一条日志将被删除,而最新的一条日志加入到 slow log ,以此类推。
以下命令让 slow log 最多保存 1000 条日志:
CONFIG SET slowlog-max-len 1000
使用 CONFIG GET 命令可以查询两个选项的当前值:

redis> CONFIG GET slowlog-log-slower-than
1) "slowlog-log-slower-than"
2) "1000"redis> CONFIG GET slowlog-max-len
1) "slowlog-max-len"
2) "1000"

查看 slow log
要查看 slow log ,可以使用 SLOWLOG GET 或者 SLOWLOG GET number 命令,前者打印所有 slow log ,最大长度取决于 slowlog-max-len 选项的值,而 SLOWLOG GET number 则只打印指定数量的日志。
最新的日志会最先被打印:
为测试需要,将 slowlog-log-slower-than 设成了 10 微秒

redis> SLOWLOG GET
1) 1) (integer) 12                      # 唯一性(unique)的日志标识符2) (integer) 1324097834              # 被记录命令的执行时间点,以 UNIX 时间戳格式表示3) (integer) 16                      # 查询执行时间,以微秒为单位4) 1) "CONFIG"                       # 执行的命令,以数组的形式排列2) "GET"                          # 这里完整的命令是 CONFIG GET slowlog-log-slower-than3) "slowlog-log-slower-than"2) 1) (integer) 112) (integer) 13240978253) (integer) 424) 1) "CONFIG"2) "GET"3) "*"3) 1) (integer) 102) (integer) 13240978203) (integer) 114) 1) "CONFIG"2) "GET"3) "slowlog-log-slower-than"

日志的唯一 id 只有在 Redis 服务器重启的时候才会重置,这样可以避免对日志的重复处理(比如你可能会想在每次发现新的慢查询时发邮件通知你)。
查看当前日志的数量
使用命令 SLOWLOG LEN 可以查看当前日志的数量。
请注意这个值和 slower-max-len 的区别,它们一个是当前日志的数量,一个是允许记录的最大日志的数量。

redis> SLOWLOG LEN
(integer) 14

清空日志
使用命令 SLOWLOG RESET 可以清空 slow log 。

redis> SLOWLOG LEN
(integer) 14
redis> SLOWLOG RESET
OK
redis> SLOWLOG LEN
(integer) 0

可用版本:
2.2.12+
时间复杂度:
O(1)
返回值:
取决于不同命令,返回不同的值。

TIME

返回当前服务器时间。
可用版本:
2.6.0+
时间复杂度:
O(1)
返回值:
一个包含两个字符串的列表: 第一个字符串是当前时间(以 UNIX 时间戳格式表示),而第二个字符串是当前这一秒钟已经逝去的微秒数。

redis> TIME
1) "1332395997"
2) "952581"
redis> TIME
1) "1332395997"
2) "953148"

redis命令详解与使用场景举例——Server(服务器)相关推荐

  1. Redis命令详解:Hashs

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

  2. Redis命令详解:Connection

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

  3. thinksnsv4.6运行php,SNS社交系统“ThinkSNS V4.6”活动应用功能详解及应用场景举例...

    ThinkSNS是什么? ThinkSNS(简称TS)是一款起始于2008年的全平台综合性的sns社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS ...

  4. Redis命令详解:Server

    Redis命令学习,服务器篇 BGREWRITEAOF 最早可用版本:1.0.0 使Redis重写AOF文件,重写后的AOF文件相较于当前版本的AOF文件占用的空间更小.即使重写失败,数据也不会丢失, ...

  5. Redis命令详解:Cluster

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

  6. Redis命令详解:Streams

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

  7. Redis命令详解:Geo

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

  8. Redis命令详解:Pub/Sub

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

  9. Redis命令详解:Transactions

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

最新文章

  1. 嵌入式学习笔记之一:嵌入式linux中混合编译入门
  2. jdbc桥连接过程解析
  3. VSCODE常见问题(设置为4个空格)
  4. CI 在nginx中出现404错误的解决方式
  5. Scrapy定向爬虫教程(一)——创建运行项目和基本介绍
  6. 为什么新创企业都喜欢用ai域名?
  7. 单片机(ISIS 7 Professional):简易红绿灯代码项目
  8. linux系统 打开网页,使用Linux终端浏览网页
  9. 50道SQL练习题及答案与详细分析
  10. 使用IDEA连接hbase数据库
  11. upc 6605 所罗门王的宝藏
  12. keras上运行Tensorflow-gpu的艰难历程(最新版,更新中)
  13. ie10不适用计算机,无发安装KB2731771,提示此更新不适用于您的计算机。无法安装ie10,不知道是否跟这个更新无 - Microsoft Community...
  14. 鸿蒙芯片是华为公司靠几年造出来的,难度不输芯片制造,华为高管实话实说,造出操作系统只是开始...
  15. 产品经理 - 路漫漫其修远兮
  16. 上 k8s 生产环境的一些准备!
  17. php制作万年历的步骤_PHP制作万年历
  18. 安装RAC小记(Oracle11gR2)
  19. CS269I:Incentives in Computer Science 学习笔记 Lecture 17 评分规则和同辈预测(诚实预报和反馈激励)
  20. python基础第一课(小白piao分享)

热门文章

  1. iOS自动化测试-使用真机进行自动化测试
  2. 物理数据处理,不确定度的计算C++代码
  3. android获取存储设备根目录,Android ndk获取手机内部存储卡的根目录方法
  4. 第1章:为什么要并行计算
  5. show tables like 不能取别名的解决方法
  6. 开源之夏 2022 开启,提交项目当导师
  7. html5 scrollheight,JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记...
  8. Excel去除表格密码保护
  9. 快速下载Flash资源,实用抓取工具来帮忙
  10. python报错:source code string cannot contain null bytes