服务器(Server)

TIME

TIME

返回当前服务器时间。

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

DBSIZE

DBSIZE

返回当前数据库的 key 的数量。

可用版本:
>= 1.0.0
时间复杂度:
O(1)
返回值:
当前数据库的 key 的数量。
redis> DBSIZE
(integer) 5

redis> SET new_key "hello_moto"     # 增加一个 key 试试
OK

redis> DBSIZE
(integer) 6

BGREWRITEAOF

BGREWRITEAOF

异步(Asynchronously)重写 AOF 文件以反应当前数据库的状态。

即使 BGREWRITEAOF 命令执行失败,旧 AOF 文件中的数据也不会因此丢失或改变。

请移步 持久化文档 查看更多相关细节。

可用版本:
>= 1.0.0
时间复杂度:
O(N), N 为要追加到 AOF 文件中的数据数量。
返回值:
反馈信息。
redis> BGREWRITEAOF
Background append only file rewriting started

BGSAVE

在后台异步保存当前数据库的数据到磁盘。

BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。

客户端可以通过 LASTSAVE 命令查看相关信息,判断 BGSAVE 命令是否执行成功。

请移步 持久化文档 查看更多相关细节。

可用版本:
>= 1.0.0
时间复杂度:
O(N), N 为要保存到数据库中的 key 的数量。
返回值:
反馈信息。
redis> BGSAVE
Background saving started

SAVE

SAVE

同步保存当前数据库的数据到磁盘。

可用版本:
>= 1.0.0
时间复杂度:
O(N), N 为要保存到数据库中的 key 的数量。
返回值:
总是返回 OK
redis> SAVE
OK

LASTSAVE

LASTSAVE

返回最近一次 Redis 成功执行保存操作的时间点( SAVEBGSAVE 等),以 UNIX 时间戳格式表示。

可用版本:
>= 1.0.0
时间复杂度:
O(1)
返回值:
一个 UNIX 时间戳。
redis> LASTSAVE
(integer) 1324043588

SLAVEOF

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

FLUSHALL

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

FLUSHDB

清空当前数据库中的所有 key。

此命令从不失败。

可用版本:
>= 1.0.0
时间复杂度:
O(1)
返回值:
总是返回 OK
redis> DBSIZE    # 清空前的 key 数量
(integer) 4

redis> FLUSHDB
OK

redis> DBSIZE    # 清空后的 key 数量
(integer) 0

SHUTDOWN

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>

SLOWLOG

SLOWLOG subcommand [argument]

什么是 SLOWLOG

Slow log 是 Redis 用来记录查询执行时间的日志系统。

查询执行时间指的是不包括像客户端响应(talking)、发送回复等 IO 操作,而单单是执行一个查询命令所耗费的时间。

另外,slow log 保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启 slow log 而损害 Redis 的速度。

设置 SLOWLOG

Slow log 的行为由两个配置参数(configuration parameter)指定,可以通过改写 redis.conf 文件或者用 CONFIG GETCONFIG SET 命令对它们动态地进行修改。

第一个选项是 slowlog-log-slower-then ,它决定要对执行时间大于多少微秒(microsecond,1秒 = 1,000,000 微秒)的查询进行记录。

比如执行以下命令将让 slow log 记录所有查询时间大于等于 100 微秒的查询:

CONFIG SET slowlog-log-slower-then 100

而以下命令记录所有查询时间大于 1000 微秒的查询:

CONFIG SET slowlog-log-slower-then 1000

另一个选项是 slowlog-max-len ,它决定 slow log 最多能保存多少条日志, slow log 本身是一个 LIFO 队列,当队列大小超过 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-than
      3) "slowlog-log-slower-than"

2) 1) (integer) 11
   2) (integer) 1324097825
   3) (integer) 42
   4) 1) "CONFIG"
      2) "GET"
      3) "*"

3) 1) (integer) 10
   2) (integer) 1324097820
   3) (integer) 11
   4) 1) "CONFIG"
      2) "GET"
      3) "slowlog-log-slower-then"

# ...

日志的唯一 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)
返回值:
取决于不同命令,返回不同的值。

INFO

INFO

返回关于 Redis 服务器的各种信息和统计值。

可用版本:
>= 1.0.0
时间复杂度:
O(1)
返回值:
具体请参见下面的测试代码。
redis> INFO
redis_version:2.4.4             # Redis 的版本
redis_git_sha1:00000000
redis_git_dirty:0
arch_bits:32
multiplexing_api:epoll
process_id:903                  # 当前 Redis 服务器进程 id
uptime_in_seconds:24612         # 运行时间(以秒计算)
uptime_in_days:0                # 运行时间(以日计算)
lru_clock:283730
used_cpu_sys:3.38
used_cpu_user:2.15
used_cpu_sys_children:0.11
used_cpu_user_children:0.00
connected_clients:1             # 连接的客户端数量
connected_slaves:0              # 从属服务器的数量
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
used_memory:557304              # Redis 分配的内存总量
used_memory_human:544.24K
used_memory_rss:17879040        # Redis 分配的内存总量(包括内存碎片)
used_memory_peak:565904
used_memory_peak_human:552.64K
mem_fragmentation_ratio:32.08   # 内存碎片比率
mem_allocator:jemalloc-2.2.5    # 目前使用的内存分配库
loading:0
aof_enabled:0
changes_since_last_save:2       # 上次保存数据库之后,执行命令的次数
bgsave_in_progress:0            # 后台进行中的 save 操作的数量
last_save_time:1324042687       # 最后一次成功保存的时间点,以 UNIX 时间戳格式显示
bgrewriteaof_in_progress:0      # 后台进行中的 aof 文件修改操作的数量
total_connections_received:16   # 运行以来连接过的客户端的总数量
total_commands_processed:87     # 运行以来执行过的命令的总数量
expired_keys:0                  # 运行以来过期的 key 的数量
evicted_keys:0
keyspace_hits:14                # 命中 key 的次数
keyspace_misses:14              # 不命中 key 的次数
pubsub_channels:0               # 当前使用中的频道数量
pubsub_patterns:0               # 当前使用的模式的数量
latest_fork_usec:314
vm_enabled:0                    # 是否开启了 vm
role:master
db0:keys=6,expires=0            # 各个数据库的 key 的数量,以及带有生存期的 key 的数量
db1:keys=6,expires=0
db2:keys=1,expires=0

CONFIG GET

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 GETCONFIG SET 使用的格式和 redis.conf 文件所使用的格式有以下两点不同:

  • 10kb2gb 这些在配置文件中所使用的储存单位缩写,不可以用在 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 SET

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 RESETSTAT

CONFIG RESETSTAT

重置 INFO 命令中的某些统计数据,包括:

  • Keyspace hits (键空间命中次数)
  • Keyspace misses (键空间不命中次数)
  • Number of commands processed (执行命令的次数)
  • Number of connections received (连接服务器的次数)
  • Number of expired keys (过期key的数量)
可用版本:
>= 2.0.0
时间复杂度:
O(1)
返回值:
总是返回 OK
# 重置前的部分数据

redis> INFO
# ...
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:5
# ...

# 重置

redis> CONFIG RESETSTAT
OK

# 重置后的部分数据

redis> INFO
# ...
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
# ...

DEBUG OBJECT

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

DEBUG SEGFAULT

执行一个不合法的内存访问从而让 Redis 崩溃,仅在开发时用于 BUG 模拟。

可用版本:
>= 1.0.0
时间复杂度:
不明确
返回值:
redis> DEBUG SEGFAULT
Could not connect to Redis at: Connection refused

not connected>

MONITOR

MONITOR

实时打印出 Redis 服务器接收到的命令,调试用。

可用版本:
>= 1.0.0
时间复杂度:
不明确
返回值:
总是返回 OK
redis> MONITOR
OK
1324109476.800290 "MONITOR" # 第一个值是 UNIX 时间戳,之后是执行的命令和参数
1324109479.632445 "PING"
1324109486.408230 "SET" "greeting" "hello moto"
1324109490.800364 "KEYS" "*"
1324109509.023495 "lrange" "my_book_list" "0" "-1"

SYNC

SYNC

用于复制功能(replication)的内部命令。

可用版本:
>= 1.0.0
时间复杂度:
不明确
返回值:
不明确
redis> SYNC
"REDIS0002\xfe\x00\x00\auser_id\xc0\x03\x00\anumbers\xc2\xf3\xe0\x01\x00\x00\tdb_number\xc0\x00\x00\x04name\x06huangz\x00\anew_key\nhello_moto\x00\bgreeting\nhello moto\x00\x05my_pc\bthinkpad\x00\x04lock\xc0\x01\x00\nlock_times\xc0\x04\xfe\x01\t\x04info\x19\x02\x04name\b\x00zhangyue\x03age\x02\x0022\xff\t\aooredis,\x03\x04name\a\x00ooredis\aversion\x03\x001.0\x06author\x06\x00huangz\xff\x00\tdb_number\xc0\x01\x00\x05greet\x0bhello world\x02\nmy_friends\x02\x05marry\x04jack\x00\x04name\x05value\xfe\x02\x0c\x01s\x12\x12\x00\x00\x00\r\x00\x00\x00\x02\x00\x00\x01a\x03\xc0f'\xff\xff"
(1.90s)

內容目录

上一个主题

连接(Connection)

下一个主题

脚本(Script)

本页