Redis 课件

Redis 简介

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

l  Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

l  Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

l  Redis支持数据的备份,即master-slave模式的数据备份。


Redis 优势

l  性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

l  丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets数据类型操作。

l  原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。

l  丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。


Redis与其他key-value存储有什么不同?

l  Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

l  Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

 

Redis 安装

Window 下安装

下载地址:https://github.com/dmajkic/redis/downloads

下载到的Redis支持32bit和64bit。根据自己实际情况选择,将64bit的内容cp到自定义盘符安装目录取名redis。 如 C:\reids

打开一个cmd窗口 使用cd命令切换目录到 C:\redis 运行 redis-server.exe redis.conf 。(如果下载的是Redis-x64-3.2.100版本,是运行 redis-server.exeredis.windows.conf)

如果想方便的话,可以把redis的路径加到系统的环境变量里,这样就省得再输路径了,后面的那个redis.conf可以省略,如果省略,会启用默认的。输入之后,会显示如下界面:

这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了。

切换到redis目录下运行 redis-cli.exe -h 127.0.0.1 -p 6379 。

设置键值对 set myKey abc

取出键值对 get myKey


Linux 下安装

下载地址:http://redis.io/download,下载最新文档版本。

本教程使用的最新文档版本为 2.8.17,下载并安装:

$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz
$ tar xzf redis-2.8.17.tar.gz
$ cd redis-2.8.17
$ make

make完后 redis-2.8.17目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli

下面启动redis服务.

$ ./redis-server

注意这种方式启动redis 使用的是默认配置。也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动。

$ ./redis-server redis.conf

redis.conf是一个默认的配置文件。我们可以根据需要使用自己的配置文件。

启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了。 比如:

$ ./redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

Ubuntu 下安装

在 Ubuntu 系统安装 Redis可以使用以下命令:

$sudo apt-get update
$sudo apt-get install redis-server

启动 Redis

$redis-server

查看 redis 是否启动?

$redis-cli

以上命令将打开以下终端:

redis 127.0.0.1:6379>

127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。

redis 127.0.0.1:6379> ping
PONG

以上说明我们已经成功安装了redis。

 

Redis 配置

Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf。

你可以通过 CONFIG 命令查看或设置配置项。


语法

Redis CONFIG 命令格式如下:

redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME

实例

redis 127.0.0.1:6379> CONFIG GET loglevel
 
1) "loglevel"
2) "notice"

使用 * 号获取所有配置项:

实例

redis 127.0.0.1:6379> CONFIG GET *
 
  1) "dbfilename"
  2) "dump.rdb"
  3) "requirepass"
  4) ""
  5) "masterauth"
  6) ""
  7) "unixsocket"
  8) ""
  9) "logfile"
 10) ""
 11) "pidfile"
 12) "/var/run/redis.pid"
 13) "maxmemory"
 14) "0"
 15) "maxmemory-samples"
 16) "3"
 17) "timeout"
 18) "0"
 19) "tcp-keepalive"
 20) "0"
 21) "auto-aof-rewrite-percentage"
 22) "100"
 23) "auto-aof-rewrite-min-size"
 24) "67108864"
 25) "hash-max-ziplist-entries"
 26) "512"
 27) "hash-max-ziplist-value"
 28) "64"
 29) "list-max-ziplist-entries"
 30) "512"
 31) "list-max-ziplist-value"
 32) "64"
 33) "set-max-intset-entries"
 34) "512"
 35) "zset-max-ziplist-entries"
 36) "128"
 37) "zset-max-ziplist-value"
 38) "64"
 39) "hll-sparse-max-bytes"
 40) "3000"
 41) "lua-time-limit"
 42) "5000"
 43) "slowlog-log-slower-than"
 44) "10000"
 45) "latency-monitor-threshold"
 46) "0"
 47) "slowlog-max-len"
 48) "128"
 49) "port"
 50) "6379"
 51) "tcp-backlog"
 52) "511"
 53) "databases"
 54) "16"
 55) "repl-ping-slave-period"
 56) "10"
 57) "repl-timeout"
 58) "60"
 59) "repl-backlog-size"
 60) "1048576"
 61) "repl-backlog-ttl"
 62) "3600"
 63) "maxclients"
 64) "4064"
 65) "watchdog-period"
 66) "0"
 67) "slave-priority"
 68) "100"
 69) "min-slaves-to-write"
 70) "0"
 71) "min-slaves-max-lag"
 72) "10"
 73) "hz"
 74) "10"
 75) "no-appendfsync-on-rewrite"
 76) "no"
 77) "slave-serve-stale-data"
 78) "yes"
 79) "slave-read-only"
 80) "yes"
 81) "stop-writes-on-bgsave-error"
 82) "yes"
 83) "daemonize"
 84) "no"
 85) "rdbcompression"
 86) "yes"
 87) "rdbchecksum"
 88) "yes"
 89) "activerehashing"
 90) "yes"
 91) "repl-disable-tcp-nodelay"
 92) "no"
 93) "aof-rewrite-incremental-fsync"
 94) "yes"
 95) "appendonly"
 96) "no"
 97) "dir"
 98) "/home/deepak/Downloads/redis-2.8.13/src"
 99) "maxmemory-policy"
100) "volatile-lru"
101) "appendfsync"
102) "everysec"
103) "save"
104) "3600 1 300 100 60 10000"
105) "loglevel"
106) "notice"
107) "client-output-buffer-limit"
108) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
109) "unixsocketperm"
110) "0"
111) "slaveof"
112) ""
113) "notify-keyspace-events"
114) ""
115) "bind"
116) ""

编辑配置

你可以通过修改 redis.conf 文件或使用 CONFIG set 命令来修改配置。

语法

CONFIG SET 命令基本语法:

redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE

实例

redis 127.0.0.1:6379> CONFIG SET loglevel "notice"
OK
redis 127.0.0.1:6379> CONFIG GET loglevel
 
1) "loglevel"
2) "notice"

参数说明

redis.conf 配置项说明如下:

1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程

    daemonize no

2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定

    pidfile /var/run/redis.pid

3. 指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字

    port 6379

4. 绑定的主机地址

    bind 127.0.0.1

5.当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能

    timeout 300

6. 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose

    loglevel verbose

7. 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null

    logfile stdout

8. 设置数据库的数量,默认数据库为0,可以使用SELECT <dbid>命令在连接上指定数据库id

    databases 16

9. 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合

    save <seconds><changes>

    Redis默认配置文件中提供了三个条件:

    save 900 1

    save 300 10

    save 60 10000

    分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。

 

10. 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大

    rdbcompression yes

11. 指定本地数据库文件名,默认值为dump.rdb

    dbfilename dump.rdb

12. 指定本地数据库存放目录

    dir ./

13. 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步

    slaveof <masterip><masterport>

14. 当master服务设置了密码保护时,slav服务连接master的密码

    masterauth<master-password>

15. 设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH <password>命令提供密码,默认关闭

    requirepass foobared

16. 设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息

    maxclients 128

17. 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区

    maxmemory <bytes>

18. 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no

    appendonly no

19. 指定更新日志文件名,默认为appendonly.aof

     appendfilename appendonly.aof

20. 指定更新日志条件,共有3个可选值: 
    no:表示等操作系统进行数据缓存同步到磁盘(快) 
    always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全) 
    everysec:表示每秒同步一次(折衷,默认值)

    appendfsync everysec

 

21. 指定是否启用虚拟内存机制,默认值为no,简单的介绍一下,VM机制将数据分页存放,由Redis将访问量较少的页即冷数据swap到磁盘上,访问多的页面由磁盘自动换出到内存中(在后面的文章我会仔细分析Redis的VM机制)

     vm-enabled no

22. 虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享

     vm-swap-file /tmp/redis.swap

23. 将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的(Redis的索引数据 就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0

     vm-max-memory 0

24. Redis swap文件分成了很多的page,一个对象可以保存在多个page上面,但一个page上不能被多个对象共享,vm-page-size是要根据存储的 数据大小来设定的,作者建议如果存储很多小对象,page大小最好设置为32或者64bytes;如果存储很大大对象,则可以使用更大的page,如果不 确定,就使用默认值

     vm-page-size 32

25. 设置swap文件中的page数量,由于页表(一种表示页面空闲或使用的bitmap)是在放在内存中的,,在磁盘上每8个pages将消耗1byte的内存。

     vm-pages 134217728

26. 设置访问swap文件的线程数,最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的,可能会造成比较长时间的延迟。默认值为4

     vm-max-threads 4

27. 设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启

    glueoutputbuf yes

28. 指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法

    hash-max-zipmap-entries 64

    hash-max-zipmap-value 512

29. 指定是否激活重置哈希,默认为开启(后面在介绍Redis的哈希算法时具体介绍)

    activerehashing yes

30. 指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件

    include /path/to/local.conf

 

Redis 数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sortedset:有序集合)。


String(字符串)

string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

string类型是Redis最基本的数据类型,一个键最大能存储512MB。

实例

redis 127.0.0.1:6379> SET name "w3cschool.cn"
OK
redis 127.0.0.1:6379> GET name
"w3cschool.cn"

在以上实例中我们使用了 Redis 的 SET 和 GET 命令。键为name,对应的值为w3cschool.cn。

注意:一个键最大能存储512MB。


Hash(哈希)

Redis hash 是一个键值对集合。

Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

实例

redis 127.0.0.1:6379> HMSET user:1 username w3cschool.cn password w3cschool.cn points 200
OK
redis 127.0.0.1:6379> HGETALL user:1
1) "username"
2) "w3cschool.cn"
3) "password"
4) "w3cschool.cn"
5) "points"
6) "200"
redis 127.0.0.1:6379>

以上实例中 hash 数据类型存储了包含用户脚本信息的用户对象。实例中我们使用了 Redis HMSET, HGETALL 命令,user:1 为键值。

每个hash 可以存储 232 - 1 键值对(40多亿)。


List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

实例

redis 127.0.0.1:6379> lpush w3cschool.cn redis
(integer) 1
redis 127.0.0.1:6379> lpush w3cschool.cn mongodb
(integer) 2
redis 127.0.0.1:6379> lpush w3cschool.cn rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange w3cschool.cn 0 10
1) "rabitmq"
2) "mongodb"
3) "redis"
redis 127.0.0.1:6379>

列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。


Set(集合)

Redis的Set是string类型的无序集合。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

sadd 命令

添加一个string元素到,key对应的set集合中,成功返回1,如果元素以及在集合中返回0,key对应的set不存在返回错误。

sadd key member

实例

redis 127.0.0.1:6379> sadd w3cschool.cn redis
(integer) 1
redis 127.0.0.1:6379> sadd w3cschool.cn mongodb
(integer) 1
redis 127.0.0.1:6379> sadd w3cschool.cn rabitmq
(integer) 1
redis 127.0.0.1:6379> sadd w3cschool.cn rabitmq
(integer) 0
redis 127.0.0.1:6379> smembers w3cschool.cn
 
1) "rabitmq"
2) "mongodb"
3) "redis"

注意:以上实例中 rabitmq 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。

集合中最大的成员数为 232 - 1 (4294967295,每个集合可存储40多亿个成员)。


zset(sorted set:有序集合)

Rediszset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

zadd 命令

添加元素到集合,元素在集合中存在则更新对应score

zadd key score member 

实例

redis 127.0.0.1:6379> zadd w3cschool.cn 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd w3cschool.cn 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd w3cschool.cn 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd w3cschool.cn 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE w3cschool.cn 0 1000
 
1) "redis"
2) "mongodb"
3) "rabitmq"

 

Redis 数据备份与恢复

Redis SAVE 命令用于创建当前数据库的备份。

语法

redis Save 命令基本语法如下:

redis 127.0.0.1:6379> SAVE 

实例

redis 127.0.0.1:6379> SAVE 
OK

该命令将在 redis 安装目录中创建dump.rdb文件。


恢复数据

如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用 CONFIG 命令,如下所示:

 
redis 127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/usr/local/redis/bin"
 

以上命令 CONFIG GET dir 输出的 redis 安装目录为 /usr/local/redis/bin。


Bgsave

创建 redis 备份文件也可以使用命令 BGSAVE,该命令在后台执行。

实例

127.0.0.1:6379> BGSAVE
 
Background saving started

 

Redis 安全

我们可以通过 redis 的配置文件设置密码参数,这样客户端连接到 redis 服务就需要密码验证,这样可以让你的 redis 服务更安全。

实例

我们可以通过以下命令查看是否设置了密码验证:

127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) ""

默认情况下 requirepass 参数是空的,这就意味着你无需通过密码验证就可以连接到 redis 服务。

你可以通过以下命令来修改该参数:

127.0.0.1:6379> CONFIG set requirepass "w3cschool.cn"
OK
127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) "w3cschool.cn"

设置密码后,客户端连接 redis 服务就需要密码验证,否则无法执行命令。

语法

AUTH 命令基本语法格式如下:

127.0.0.1:6379> AUTH password

实例

127.0.0.1:6379> AUTH "w3cschool.cn"
OK
127.0.0.1:6379> SET mykey "Test value"
OK
127.0.0.1:6379> GET mykey
"Test value"

 

Redis 性能测试

Redis 性能测试是通过同时执行多个命令实现的。

语法

redis 性能测试的基本命令如下:

redis-benchmark [option] [option value]

实例

以下实例同时执行 10000 个请求来检测性能:

redis-benchmark -n 100000
 
PING_INLINE: 141043.72 requests per second
PING_BULK: 142857.14 requests per second
SET: 141442.72 requests per second
GET: 145348.83 requests per second
INCR: 137362.64 requests per second
LPUSH: 145348.83 requests per second
LPOP: 146198.83 requests per second
SADD: 146198.83 requests per second
SPOP: 149253.73 requests per second
LPUSH (needed to benchmark LRANGE): 148588.42 requests per second
LRANGE_100 (first 100 elements): 58411.21 requests per second
LRANGE_300 (first 300 elements): 21195.42 requests per second
LRANGE_500 (first 450 elements): 14539.11 requests per second
LRANGE_600 (first 600 elements): 10504.20 requests per second
MSET (10 keys): 93283.58 requests per second

redis 性能测试工具可选参数如下所示:

序号

选项

描述

默认值

1

-h

指定服务器主机名

127.0.0.1

2

-p

指定服务器端口

6379

3

-s

指定服务器 socket

 

4

-c

指定并发连接数

50

5

-n

指定请求数

10000

6

-d

以字节的形式指定 SET/GET 值的数据大小

2

7

-k

1=keep alive 0=reconnect

1

8

-r

SET/GET/INCR 使用随机 key, SADD 使用随机值

 

9

-P

通过管道传输 <numreq> 请求

1

10

-q

强制退出 redis。仅显示 query/sec 值

 

11

--csv

以 CSV 格式输出

 

12

-l

生成循环,永久执行测试

 

13

-t

仅运行以逗号分隔的测试命令列表。

 

14

-I

Idle 模式。仅打开 N 个 idle 连接并等待。

 

实例

以下实例我们使用了多个参数来测试 redis 性能:

redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 100000 -q
 
SET: 146198.83 requests per second
LPUSH: 145560.41 requests per second

以上实例中主机为 127.0.0.1,端口号为 6379,执行的命令为 set,lpush,请求数为 10000,通过 -q 参数让结果只显示每秒执行的请求数。

 

Redis 客户端连接

Redis 通过监听一个 TCP 端口或者 Unix socket 的方式来接收来自客户端的连接,当一个连接建立后,Redis 内部会进行以下一些操作:

·       首先,客户端socket 会被设置为非阻塞模式,因为 Redis 在网络事件处理上采用的是非阻塞多路复用模型。

·       然后为这个socket 设置 TCP_NODELAY 属性,禁用Nagle 算法

·       然后创建一个可读的文件事件用于监听这个客户端 socket 的数据发送


最大连接数

在 Redis2.4 中,最大连接数是被直接硬编码在代码里面的,而在2.6版本中这个值变成可配置的。

maxclients 的默认值是 10000,你也可以在 redis.conf 中对这个值进行修改。

config get maxclients
 
1) "maxclients"
2) "10000"

实例

以下实例我们在服务启动时设置最大连接数为 100000:

redis-server --maxclients 100000

客户端命令

S.N.

命令

描述

1

CLIENT LIST

返回连接到 redis 服务的客户端列表

2

CLIENT SETNAME

设置当前连接的名称

3

CLIENT GETNAME

获取通过 CLIENT SETNAME 命令设置的服务名称

4

CLIENT PAUSE

挂起客户端连接,指定挂起的时间以毫秒计

5

CLIENT KILL

关闭客户端连接

 

 

Redis 管道技术

Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:

·       客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。

·       服务端处理命令,并将结果返回给客户端。


Redis 管道技术

Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。

实例

查看 redis 管道,只需要启动redis 实例并输入以下命令:

$(echo -en "PING\r\n SET w3ckey redis\r\nGET w3ckey\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379
 
+PONG
+OK
redis
:1
:2
:3

以上实例中我们通过使用 PING 命令查看redis服务是否可用, 之后我们们设置了 w3ckey 的值为 redis,然后我们获取 w3ckey 的值并使得 visitor 自增 3 次。

在返回的结果中我们可以看到这些命令一次性向 redis 服务提交,并最终一次性读取所有服务端的响应


管道技术的优势

管道技术最显著的优势是提高了 redis 服务的性能。

一些测试数据

在下面的测试中,我们将使用Redis的Ruby客户端,支持管道技术特性,测试管道技术对速度的提升效果。

require 'rubygems' 
require 'redis'
def bench(descr) 
start = Time.now 
yield 
puts "#{descr} #{Time.now-start} seconds" 
end
def without_pipelining 
r = Redis.new 
10000.times { 
  r.ping 
} 
end
def with_pipelining 
r = Redis.new 
r.pipelined { 
    10000.times { 
        r.ping 
   } 
} 
end
bench("without pipelining") { 
 without_pipelining 
} 
bench("with pipelining") { 
    with_pipelining 
}

从处于局域网中的Mac OS X系统上执行上面这个简单脚本的数据表明,开启了管道操作后,往返时延已经被改善得相当低了。

without pipelining 1.185238 seconds 
with pipelining 0.250783 seconds

如你所见,开启管道后,我们的速度效率提升了5倍。

 

Redis 分区

分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集。

分区的优势

·       通过利用多台计算机内存的和值,允许我们构造更大的数据库。

·       通过多核和多台计算机,允许我们扩展计算能力;通过多台计算机和网络适配器,允许我们扩展网络带宽。

分区的不足

redis的一些特性在分区方面表现的不是很好:

·       涉及多个key的操作通常是不被支持的。举例来说,当两个set映射到不同的redis实例上时,你就不能对这两个set执行交集操作。

·       涉及多个key的redis事务不能使用。

·       当使用分区时,数据处理较为复杂,比如你需要处理多个rdb/aof文件,并且从多个实例和主机备份持久化文件。

·       增加或删除容量也比较复杂。redis集群大多数支持在运行时增加、删除节点的透明数据平衡的能力,但是类似于客户端分区、代理等其他系统则不支持这项特性。然而,一种叫做presharding的技术对此是有帮助的。


分区类型

Redis 有两种类型分区。 假设有4个Redis实例 R0,R1,R2,R3,和类似user:1,user:2这样的表示用户的多个key,对既定的key有多种不同方式来选择这个key存放在哪个实例中。也就是说,有不同的系统来映射某个key到某个Redis服务。

范围分区

最简单的分区方式是按范围分区,就是映射一定范围的对象到特定的Redis实例。

比如,ID从0到10000的用户会保存到实例R0,ID从10001到 20000的用户会保存到R1,以此类推。

这种方式是可行的,并且在实际中使用,不足就是要有一个区间范围到实例的映射表。这个表要被管理,同时还需要各 种对象的映射表,通常对Redis来说并非是好的方法。

哈希分区

另外一种分区方法是hash分区。这对任何key都适用,也无需是object_name:这种形式,像下面描述的一样简单:

·       用一个hash函数将key转换为一个数字,比如使用crc32 hash函数。对key foobar执行crc32(foobar)会输出类似93024922的整数。

·       对这个整数取模,将其转化为0-3之间的数字,就可以将这个整数映射到4个Redis实例中的一个了。93024922 % 4 = 2,就是说key foobar应该被存到R2实例中。注意:取模操作是取除的余数,通常在多种编程语言中用%操作符实现。

 

Java 使用 Redis

安装

开始在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java。 Java的安装配置可以参考我们的Java开发环境配置 接下来让我们安装 Java redis 驱动:

·       首先你需要下载驱动包,下载 jedis.jar,确保下载最新驱动包。

·       在你的classpath中包含该驱动包。


连接到 redis 服务

import redis.clients.jedis.Jedis;
public class RedisJava {
   public static void main(String[] args) {
      //连接本地的 Redis 服务
      Jedis jedis = new Jedis("localhost");
      System.out.println("连接成功");
      //查看服务是否运行
      System.out.println("服务器正在运行: "+jedis.ping());
 }
}

编译以上 Java 程序,确保驱动包的路径是正确的。

  连接成功
  服务正在运行:PONG

Redis Java String(字符串) 实例

import redis.clients.jedis.Jedis;

public class RedisStringJava {
   public static void main(String[] args) {
      //连接本地的 Redis 服务
      Jedis jedis = new Jedis("localhost");
      System.out.println("连接成功");
      //设置 redis 字符串数据
      jedis.set("w3ckey", "www.w3cschool.cn");
     // 获取存储的数据并输出
     System.out.println("redis 存储的字符串为: "+ jedis.get("w3ckey"));
 }
}

编译以上程序。

 连接成功
 redis 存储的字符串为:www.w3cschool.cn 

Redis Java List(列表) 实例

import java.util.List
import redis.clients.jedis.Jedis; 

public class RedisListJava {
   public static void main(String[] args) {
      //连接本地的 Redis 服务
      Jedis jedis = new Jedis("localhost");
      System.out.println("连接成功");
      //存储数据到列表中
      jedis.lpush("tutorial-list", "Redis");
      jedis.lpush("tutorial-list", "Mongodb");
      jedis.lpush("tutorial-list", "Mysql");
     // 获取存储的数据并输出
     List<String> list = jedis.lrange("tutorial-list", 0 ,2);
     for(int i=0; i<list.size(); i++) {        
       System.out.println("列表项为: "+list.get(i));      
     }  
   } 
} 

编译以上程序。

 连接成功
 列表项为: Redis
 列表项为: Mongodb
 列表项为: Mysql

Redis Java Keys 实例

import java.util.Iterator;
import java.util.Set;
import redis.clients.jedis.Jedis; 

public class RedisKeyJava {
   public static void main(String[] args) {
      //连接本地的 Redis 服务
      Jedis jedis = new Jedis("localhost");
      System.out.println("连接成功");
      
     // 获取数据并输出
     Set<String> keys= jedis.keys("*");
     Iterator<String> it=keys.iterator();
     while(it.hasNext) {   
       String key=it.next();     
       System.out.println("key");     
     }    
   } 
} 

编译以上程序。

 连接成功
 w3ckey
 tutorial-list 

 

Redis 命令

Redis 命令用于在 redis服务上执行操作。

要在 redis 服务上执行命令需要一个 redis 客户端。Redis 客户端在我们之前下载的的 redis 的安装包中。

语法

Redis 客户端的基本语法为:

$ redis-cli

实例

以下实例讲解了如何启动 redis 客户端:

启动 redis 客户端,打开终端并输入命令 redis-cli。该命令会连接本地的 redis 服务。

$redis-cli
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
 
PONG

在以上实例中我们连接到本地的 redis 服务并执行 PING 命令,该命令用于检测 redis 服务是否启动。


在远程服务上执行命令

如果需要在远程 redis 服务上执行命令,同样我们使用的也是 redis-cli 命令。

语法

$ redis-cli -h host -p port -a password

实例

以下实例演示了如何连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass 的 redis 服务上。

$redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
 
PONG

 

Redis 键(key)

Redis 键命令用于管理 redis 的键。

语法

Redis 键命令的基本语法如下:

redis 127.0.0.1:6379> COMMAND KEY_NAME

实例

redis 127.0.0.1:6379> SET w3ckey redis
OK
redis 127.0.0.1:6379> DEL w3ckey
(integer) 1

在以上实例中 DEL 是一个命令, w3ckey 是一个键。 如果键被删除成功,命令执行后输出 (integer) 1,否则将输出 (integer) 0


Redis keys 命令

序号

命令及描述

1

DEL key
该命令用于在 key 存在时删除 key。

2

DUMP key 
序列化给定 key ,并返回被序列化的值。

3

EXISTS key 
检查给定 key 是否存在。

4

EXPIRE key seconds
为给定 key 设置过期时间。

5

EXPIREAT key timestamp 
EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。

6

PEXPIRE key milliseconds 
设置 key 的过期时间亿以毫秒计。

7

PEXPIREAT key milliseconds-timestamp 
设置 key 过期时间的时间戳(unix timestamp) 以毫秒计

8

KEYS pattern 
查找所有符合给定模式( pattern)的 key 。

9

MOVE key db 
将当前数据库的 key 移动到给定的数据库 db 当中。

10

PERSIST key 
移除 key 的过期时间,key 将持久保持。

11

PTTL key 
以毫秒为单位返回 key 的剩余的过期时间。

12

TTL key 
以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。

13

RANDOMKEY 
从当前数据库中随机返回一个 key 。

14

RENAME key newkey 
修改 key 的名称

15

RENAMENX key newkey 
仅当 newkey 不存在时,将 key 改名为 newkey 。

16

TYPE key 
返回 key 所储存的值的类型。

下表给出了与 Redis 键相关的基本命令:

Redis DEL 命令用于删除已存在的键。不存在的 key 会被忽略。

语法

redis DEL 命令基本语法如下:

redis 127.0.0.1:6379> DEL KEY_NAME

可用版本

>= 1.0.0

返回值

被删除 key 的数量。

实例

首先,我们在 redis 中创建一个key 并设置值。

redis 127.0.0.1:6379> SET w3ckey redis
OK

现在我们删除已创建的 key。

redis 127.0.0.1:6379> DEL w3ckey
(integer) 1

 

Redis DUMP 命令用于序列化给定 key ,并返回被序列化的值。

语法

redis DUMP 命令基本语法如下:

redis 127.0.0.1:6379> DUMP KEY_NAME

可用版本

>= 2.6.0

返回值

如果 key 不存在,那么返回 nil 。否则,返回序列化之后的值。

实例

首先,我们在 redis 中创建一个key 并设置值。

redis> SET greeting "hello, dumping world!"
OK

现在使用 DUMP 序列化键值。

redis> DUMP greeting
"\x00\x15hello, dumping world!\x06\x00E\xa0Z\x82\xd8r\xc1\xde"
 
redis> DUMP not-exists-key
(nil)

 

Redis EXISTS 命令用于检查给定 key 是否存在。

语法

redis EXISTS 命令基本语法如下:

redis 127.0.0.1:6379> EXISTS KEY_NAME

可用版本

>= 1.0.0

返回值

若 key 存在返回 1 ,否则返回 0 。

实例

redis 127.0.0.1:6379> EXISTS w3cschoolcc-new-key
(integer) 0

现在我们创建一个名为 w3cschoolcc-new-key 的键并赋值,再使用 EXISTS 命令。

redis 127.0.0.1:6379> set w3cschoolcc-new-key newkey
OK
redis 127.0.0.1:6379> EXISTS w3cschoolcc-new-key
(integer) 1
redis 127.0.0.1:6379>

 

Redis Expire 命令用于设置 key 的过期时间。key 过期后将不再可用。

语法

redis Expire 命令基本语法如下:

redis 127.0.0.1:6379> Expire KEY_NAME TIME_IN_SECONDS

可用版本

>= 1.0.0

返回值

设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。

实例

首先创建一个 key 并赋值:

redis 127.0.0.1:6379> SET w3ckey redis
OK

为 key 设置过期时间:

redis 127.0.0.1:6379> EXPIRE w3ckey 60
(integer) 1

以上实例中我们为键 w3ckey 设置了过期时间为 1 分钟,1分钟后该键会自动删除。

 

Redis Expireat 命令用于以 UNIX 时间戳(unix timestamp)格式设置 key 的过期时间。key 过期后将不再可用。

语法

redis Expireat 命令基本语法如下:

redis 127.0.0.1:6379> Expireat KEY_NAME TIME_IN_UNIX_TIMESTAMP

可用版本

>= 1.0.0

返回值

设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。

实例

首先创建一个 key 并赋值:

redis 127.0.0.1:6379> SET w3ckey redis
OK

为 key 设置过期时间:

redis 127.0.0.1:6379> EXPIREAT w3ckey 1293840000
(integer) 1
EXISTS w3ckey
(integer) 0

 

Redis PEXPIREAT 命令用于设置 key 的过期时间,以毫秒计。key 过期后将不再可用。

语法

redis PEXPIREAT 命令基本语法如下:

redis 127.0.0.1:6379> PEXPIREAT KEY_NAME TIME_IN_MILLISECONDS_IN_UNIX_TIMESTAMP

可用版本

>= 1.0.0

返回值

设置成功返回 1 。当 key 不存在或者不能为 key 设置过期时间时(比如在低于2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。

实例

首先创建一个 key 并赋值:

redis 127.0.0.1:6379> SET w3ckey redis
OK

为 key 设置过期时间:

redis 127.0.0.1:6379> PEXPIREAT tutorialspoint 1555555555005(integer) 1

 

Redis PEXPIREAT 命令用于设置 key 的过期时间,以毫秒计。key 过期后将不再可用。

语法

redis PEXPIREAT 命令基本语法如下:

redis 127.0.0.1:6379> PEXPIREAT KEY_NAME TIME_IN_MILLISECONDS_IN_UNIX_TIMESTAMP

可用版本

>= 1.0.0

返回值

设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。

实例

首先创建一个 key 并赋值:

redis 127.0.0.1:6379> SET w3ckey redis
OK

为 key 设置过期时间:

redis 127.0.0.1:6379> PEXPIREAT tutorialspoint 1555555555005
(integer) 1

 

Redis Keys 命令用于查找所有符合给定模式 pattern 的 key 。。

语法

redis KEYS 命令基本语法如下:

redis 127.0.0.1:6379> KEYS PATTERN

可用版本

>= 1.0.0

返回值

符合给定模式的 key 列表(Array)。

实例

首先创建一些 key,并赋上对应值:

redis 127.0.0.1:6379> SET w3c1 redis
OK
redis 127.0.0.1:6379> SET w3c2 mysql
OK
redis 127.0.0.1:6379> SET w3c3 mongodb
OK

查找以 w3c 为开头的 key:

redis 127.0.0.1:6379> KEYS w3c*
1) "w3c3"
2) "w3c1"
3) "w3c2"

获取 redis 中所有的 key 可用使用 *

redis 127.0.0.1:6379> KEYS *
1) "w3c3"
2) "w3c1"
3) "w3c2"

 

Redis MOVE 命令用于将当前数据库的 key 移动到给定的数据库 db 当中。

语法

redis Move 命令基本语法如下:

redis 127.0.0.1:6379> MOVE KEY_NAME DESTINATION_DATABASE

可用版本

>= 1.0.0

返回值

移动成功返回 1 ,失败则返回 0 。

实例

# key 存在于当前数据库
 
redis> SELECT 0                             # redis默认使用数据库 0,为了清晰起见,这里再显式指定一次。
OK
 
redis> SET song "secret base - Zone"
OK
 
redis> MOVE song 1                          # 将 song 移动到数据库 1
(integer) 1
 
redis> EXISTS song                          # song 已经被移走
(integer) 0
 
redis> SELECT 1                             # 使用数据库 1
OK
 
redis:1> EXISTS song                        # 证实 song 被移到了数据库 1 (注意命令提示符变成了"redis:1",表明正在使用数据库 1)
(integer) 1
 
 
# 当 key 不存在的时候
 
redis:1> EXISTS fake_key
(integer) 0
 
redis:1> MOVE fake_key 0                    # 试图从数据库 1 移动一个不存在的 key 到数据库 0,失败
(integer) 0
 
redis:1> select 0                           # 使用数据库0
OK
 
redis> EXISTS fake_key                      # 证实 fake_key 不存在
(integer) 0
 
 
# 当源数据库和目标数据库有相同的 key 时
 
redis> SELECT 0                             # 使用数据库0
OK
redis> SET favorite_fruit "banana"
OK
 
redis> SELECT 1                             # 使用数据库1
OK
redis:1> SET favorite_fruit "apple"
OK
 
redis:1> SELECT 0                           # 使用数据库0,并试图将 favorite_fruit 移动到数据库 1
OK
 
redis> MOVE favorite_fruit 1                # 因为两个数据库有相同的 key,MOVE 失败
(integer) 0
 
redis> GET favorite_fruit                   # 数据库 0 的 favorite_fruit 没变
"banana"
 
redis> SELECT 1
OK
 
redis:1> GET favorite_fruit                 # 数据库 1 的 favorite_fruit 也是
"apple"

 

Redis PERSIST 命令用于移除给定 key 的过期时间,使得 key 永不过期。

语法

redis PERSIST 命令基本语法如下:

redis 127.0.0.1:6379> PERSIST KEY_NAME

可用版本

>= 2.2.0

返回值

当过期时间移除成功时,返回 1 。 如果key 不存在或 key 没有设置过期时间,返回 0 。

实例

redis> SET mykey "Hello"
OK
 
redis> EXPIRE mykey 10  # 为 key 设置生存时间
(integer) 1
 
redis> TTL mykey
(integer) 10
 
redis> PERSIST mykey    # 移除 key 的生存时间
(integer) 1
 
redis> TTL mykey
(integer) -1

 

Redis Pttl 命令以毫秒为单位返回 key 的剩余过期时间。

语法

redis Pttl 命令基本语法如下:

redis 127.0.0.1:6379> PTTL KEY_NAME

可用版本

>= 2.6.0

返回值

当 key 不存在时,返回 -2 。当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以毫秒为单位,返回 key 的剩余生存时间。

注意:在 Redis 2.8 以前,当 key不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1。

实例

# 不存在的 key
 
redis> FLUSHDB
OK
 
redis> PTTL key
(integer) -2
 
 
# key 存在,但没有设置剩余生存时间
 
redis> SET key value
OK
 
redis> PTTL key
(integer) -1
 
 
# 有剩余生存时间的 key
 
redis> PEXPIRE key 10086
(integer) 1
 
redis> PTTL key
(integer) 6179

 

Redis TTL 命令以秒为单位返回 key 的剩余过期时间。

语法

redis TTL 命令基本语法如下:

redis 127.0.0.1:6379> TTL KEY_NAME

可用版本

>= 1.0.0

返回值

当 key 不存在时,返回 -2 。当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以毫秒为单位,返回 key 的剩余生存时间。

注意:在 Redis 2.8 以前,当 key不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1。

实例

# 不存在的 key
 
redis> FLUSHDB
OK
 
redis> TTL key
(integer) -2
 
 
# key 存在,但没有设置剩余生存时间
 
redis> SET key value
OK
 
redis> TTL key
(integer) -1
 
 
# 有剩余生存时间的 key
 
redis> EXPIRE key 10086
(integer) 1
 
redis> TTL key
(integer) 10084

Redis RANDOMKEY 命令从当前数据库中随机返回一个 key 。

语法

redis RANDOMKEY 命令基本语法如下:

redis 127.0.0.1:6379> RANDOMKEY 

可用版本

>= 1.0.0

返回值

当数据库不为空时,返回一个 key 。 当数据库为空时,返回 nil 。

实例

# 数据库不为空
 
redis> MSET fruit "apple" drink "beer" food "cookies"   # 设置多个 key
OK
 
redis> RANDOMKEY
"fruit"
 
redis> RANDOMKEY
"food"
 
redis> KEYS *    # 查看数据库内所有key,证明 RANDOMKEY 并不删除 key
1) "food"
2) "drink"
3) "fruit"
 
 
# 数据库为空
 
redis> FLUSHDB  # 删除当前数据库所有 key
OK
 
redis> RANDOMKEY
(nil)

 

Redis Rename 命令用于修改 key 的名称 。

语法

redis Rename 命令基本语法如下:

redis 127.0.0.1:6379> RENAME OLD_KEY_NAME NEW_KEY_NAME

可用版本

>= 1.0.0

返回值

改名成功时提示 OK ,失败时候返回一个错误。

当 OLD_KEY_NAME 和NEW_KEY_NAME 相同,或者 OLD_KEY_NAME 不存在时,返回一个错误。 当 NEW_KEY_NAME 已经存在时, RENAME 命令将覆盖旧值。

实例

# key 存在且 newkey 不存在
 
redis> SET message "hello world"
OK
 
redis> RENAME message greeting
OK
 
redis> EXISTS message               # message 不复存在
(integer) 0
 
redis> EXISTS greeting              # greeting 取而代之
(integer) 1
 
 
# 当 key 不存在时,返回错误
 
redis> RENAME fake_key never_exists
(error) ERR no such key
 
 
# newkey 已存在时, RENAME 会覆盖旧 newkey
 
redis> SET pc "lenovo"
OK
 
redis> SET personal_computer "dell"
OK
 
redis> RENAME pc personal_computer
OK
 
redis> GET pc
(nil)
 
redis:1> GET personal_computer      # 原来的值 dell 被覆盖了
"lenovo"

 

Redis Renamenx 命令用于在新的 key 不存在时修改 key 的名称 。

语法

redis Renamenx 命令基本语法如下:

redis 127.0.0.1:6379> RENAMENX OLD_KEY_NAME NEW_KEY_NAME

可用版本

>= 1.0.0

返回值

修改成功时,返回 1 。 如果NEW_KEY_NAME 已经存在,返回 0 。

实例

# newkey 不存在,改名成功
 
redis> SET player "MPlyaer"
OK
 
redis> EXISTS best_player
(integer) 0
 
redis> RENAMENX player best_player
(integer) 1
 
 
# newkey存在时,失败
 
redis> SET animal "bear"
OK
 
redis> SET favorite_animal "butterfly"
OK
 
redis> RENAMENX animal favorite_animal
(integer) 0
 
redis> get animal
"bear"
 
redis> get favorite_animal
"butterfly"

 

Redis Type 命令用于返回 key 所储存的值的类型。

语法

redis Renamenx 命令基本语法如下:

redis 127.0.0.1:6379> TYPE KEY_NAME 

可用版本

>= 1.0.0

返回值

返回 key 的数据类型,数据类型有:

·       none (key不存在)

·       string (字符串)

·       list (列表)

·       set (集合)

·       zset (有序集)

·       hash (哈希表)

实例

# 字符串
 
redis> SET weather "sunny"
OK
 
redis> TYPE weather
string
 
 
# 列表
 
redis> LPUSH book_list "programming in scala"
(integer) 1
 
redis> TYPE book_list
list
 
 
# 集合
 
redis> SADD pat "dog"
(integer) 1
 
redis> TYPE pat
set

 

 

Redis 字符串(String)

Redis 字符串数据类型的相关命令用于管理 redis 字符串值,基本语法如下:

语法

redis 127.0.0.1:6379> COMMAND KEY_NAME

实例

redis127.0.0.1:6379> SET w3ckey redis OK redis 127.0.0.1:6379> GET w3ckey"redis"

在以上实例中我们使用了 SET 和 GET 命令,键为 w3ckey。


Redis 字符串命令

下表列出了常用的 redis 字符串命令:

序号

命令及描述

1

SET key value 
设置指定 key 的值

2

GET key 
获取指定 key 的值。

3

GETRANGE key start end 
返回 key 中字符串值的子字符

4

GETSET key value
将给定 key 的值设为 value ,并返回 key 的旧值(old value)。

5

GETBIT key offset
对 key 所储存的字符串值,获取指定偏移量上的位(bit)。

6

MGET key1 [key2..]
获取所有(一个或多个)给定 key 的值。

7

SETBIT key offset value
对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。

8

SETEX key seconds value
将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。

9

SETNX key value
只有在 key 不存在时设置 key 的值。

10

SETRANGE key offset value
用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。

11

STRLEN key
返回 key 所储存的字符串值的长度。

12

MSET key value [key value ...]
同时设置一个或多个 key-value 对。

13

MSETNX key value [key value ...] 
同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

14

PSETEX key milliseconds value
这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。

15

INCR key
将 key 中储存的数字值增一。

16

INCRBY key increment
将 key 所储存的值加上给定的增量值(increment) 。

17

INCRBYFLOAT key increment
将 key 所储存的值加上给定的浮点增量值(increment) 。

18

DECR key
将 key 中储存的数字值减一。

19

DECRBY key decrement
key 所储存的值减去给定的减量值(decrement) 。

20

APPEND key value
如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。

Redis SET 命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。

语法

redis SET 命令基本语法如下:

redis 127.0.0.1:6379> SET KEY_NAME VALUE

可用版本

>= 1.0.0

返回值

在 Redis 2.6.12 以前版本,SET 命令总是返回 OK 。

从 Redis 2.6.12 版本开始,SET 在设置操作成功完成时,才返回 OK 。

实例

首先,我们在 redis 中创建一个key 并设置值。

# 对不存在的键进行设置
 
redis 127.0.0.1:6379> SET key "value"
OK
 
redis 127.0.0.1:6379> GET key
"value"
 
 
# 对已存在的键进行设置
 
redis 127.0.0.1:6379> SET key "new-value"
OK
 
redis 127.0.0.1:6379> GET key
"new-value"

 

Redis Get 命令用于获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误。

语法

redis Get 命令基本语法如下:

redis 127.0.0.1:6379> GET KEY_NAME

可用版本

>= 1.0.0

返回值

返回 key 的值,如果 key 不存在时,返回 nil。 如果 key 不是字符串类型,那么返回一个错误。

实例

# 对不存在的 key 或字符串类型 key 进行 GET
 
redis> GET db
(nil)
 
redis> SET db redis
OK
 
redis> GET db
"redis"
 
 
# 对不是字符串类型的 key 进行 GET
 
redis> DEL db
(integer) 1
 
redis> LPUSH db redis mongodb mysql
(integer) 3
 
redis> GET db
(error) ERR Operation against a key holding the wrong kind of value

 

Redis Getrange 命令用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start和 end 在内)。

语法

redis Getrange 命令基本语法如下:

redis 127.0.0.1:6379> GETRANGE KEY_NAME start end

可用版本

>= 2.4.0

返回值

截取得到的子字符串。

实例

首先,设置 mykey 的值并截取字符串。

redis 127.0.0.1:6379> SET mykey "This is my test key"
OK
redis 127.0.0.1:6379> GETRANGE mykey 0 3
"This"
redis 127.0.0.1:6379> GETRANGE mykey 0 -1
"This is my test key"

Redis Getset 命令用于设置指定 key 的值,并返回 key 旧的值。

语法

redis Getset 命令基本语法如下:

redis 127.0.0.1:6379> GETSET KEY_NAME VALUE

可用版本

>= 1.0.0

返回值

返回给定 key 的旧值。 当 key 没有旧值时,即 key 不存在时,返回 nil 。

当 key 存在但不是字符串类型时,返回一个错误。

实例

首先,设置 mykey 的值并截取字符串。

redis 127.0.0.1:6379> GETSET mynewkey "This is my test key"
(nil)
redis 127.0.0.1:6379> GETSET mynewkey "This is my new value to test getset"
"This is my test key"

 

Redis Getbit 命令用于对 key 所储存的字符串值,获取指定偏移量上的位(bit)。

语法

redis Getbit 命令基本语法如下:

redis 127.0.0.1:6379> GETBIT KEY_NAME OFFSET

可用版本

>= 2.2.0

返回值

字符串值指定偏移量上的位(bit)。

当偏移量 OFFSET 比字符串值的长度大,或者 key 不存在时,返回 0 。

实例

# 对不存在的 key 或者不存在的 offset 进行 GETBIT, 返回 0
 
redis> EXISTS bit
(integer) 0
 
redis> GETBIT bit 10086
(integer) 0
 
 
# 对已存在的 offset 进行 GETBIT
 
redis> SETBIT bit 10086 1
(integer) 0
 
redis> GETBIT bit 10086
(integer) 1

Redis Mget 命令返回所有(一个或多个)给定 key 的值。如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。

语法

redis Mget 命令基本语法如下:

redis 127.0.0.1:6379> MGET KEY1 KEY2 .. KEYN

可用版本

>= 1.0.0

返回值

一个包含所有给定 key 的值的列表。

实例

redis 127.0.0.1:6379> SET key1 "hello"
OK
redis 127.0.0.1:6379> SET key2 "world"
OK
redis 127.0.0.1:6379> MGET key1 key2 someOtherKey
1) "Hello"
2) "World"
3) (nil)

 

Redis Setbit 命令用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。

语法

redis Setbit 命令基本语法如下:

redis 127.0.0.1:6379> Setbit KEY_NAME OFFSET

可用版本

>= 2.2.0

返回值

指定偏移量原来储存的位。

实例

redis> SETBIT bit 10086 1
(integer) 0
 
redis> GETBIT bit 10086
(integer) 1
 
redis> GETBIT bit 100   # bit 默认被初始化为 0
(integer) 0

Redis Setex 命令为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。

语法

redis Setex 命令基本语法如下:

redis 127.0.0.1:6379> SETEX KEY_NAME TIMEOUT VALUE

可用版本

>= 2.0.0

返回值

设置成功时返回 OK 。

实例

redis 127.0.0.1:6379> SETEX mykey 60 redis
OK
redis 127.0.0.1:6379> TTL mykey
60
redis 127.0.0.1:6379> GET mykey
"redis

 

Redis Setnx(SET if Not eXists) 命令在指定的key 不存在时,为 key 设置指定的值。

语法

redis Setnx 命令基本语法如下:

redis 127.0.0.1:6379> SETNX KEY_NAME VALUE

可用版本

>= 1.0.0

返回值

设置成功,返回 1 。 设置失败,返回0 。

实例

redis> EXISTS job                # job 不存在
(integer) 0
 
redis> SETNX job "programmer"    # job 设置成功
(integer) 1
 
redis> SETNX job "code-farmer"   # 尝试覆盖 job ,失败
(integer) 0
 
redis> GET job                   # 没有被覆盖
"programmer"

 

Redis Setrange 命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始。

语法

redis Setrange 命令基本语法如下:

redis 127.0.0.1:6379> SETRANGE KEY_NAME OFFSET VALUE

可用版本

>= 2.2.0

返回值

被修改后的字符串长度。

实例

redis 127.0.0.1:6379> SET key1 "Hello World"
OK
redis 127.0.0.1:6379> SETRANGE key1 6 "Redis"
(integer) 11
redis 127.0.0.1:6379> GET key1
"Hello Redis"

 

Redis Strlen 命令用于获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。

语法

redis Strlen 命令基本语法如下:

redis 127.0.0.1:6379> STRLEN KEY_NAME

可用版本

>= 2.2.0

返回值

字符串值的长度。 当 key 不存在时,返回 0。

实例

# 获取字符串的长度
 
redis> SET mykey "Hello world"
OK
 
redis> STRLEN mykey
(integer) 11
 
 
# 不存在的 key 长度为 0
 
redis> STRLEN nonexisting
(integer) 0

 

Redis Mset 命令用于同时设置一个或多个 key-value 对。

语法

redis Mset 命令基本语法如下:

redis 127.0.0.1:6379> MSET key1 value1 key2 value2 .. keyN valueN 

可用版本

>= 1.0.1

返回值

总是返回 OK 。

实例

redis 127.0.0.1:6379> MSET key1 "Hello" key2 "World"
OK
redis 127.0.0.1:6379> GET key1
"Hello"
redis 127.0.0.1:6379> GET key2
1) "World"

 

Redis Msetnx 命令用于所有给定 key 都不存在时,同时设置一个或多个 key-value 对。

语法

redis Msetnx 命令基本语法如下:

redis 127.0.0.1:6379> MSETNX key1 value1 key2 value2 .. keyN valueN 

可用版本

>= 1.0.1

返回值

当所有 key 都成功设置,返回 1 。如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0 。

实例

# 对不存在的 key 进行 MSETNX
 
redis> MSETNX rmdbs "MySQL" nosql "MongoDB" key-value-store "redis"
(integer) 1
 
redis> MGET rmdbs nosql key-value-store
1) "MySQL"
2) "MongoDB"
3) "redis"
 
 
# MSET 的给定 key 当中有已存在的 key
 
redis> MSETNX rmdbs "Sqlite" language "python"  # rmdbs 键已经存在,操作失败
(integer) 0
 
redis> EXISTS language                          # 因为 MSET 是原子性操作,language 没有被设置
(integer) 0
 
redis> GET rmdbs                                # rmdbs 也没有被修改
"MySQL"

 

Redis Psetex 命令以毫秒为单位设置 key 的生存时间。

语法

redis Psetex 命令基本语法如下:

redis 127.0.0.1:6379> PSETEX key1 EXPIRY_IN_MILLISECONDS value1 

可用版本

>= 2.6.0

返回值

设置成功时返回 OK 。

实例

redis 127.0.0.1:6379> PSETEX mykey 1000 "Hello"
OK
redis 127.0.0.1:6379> PTTL mykey
999
redis 127.0.0.1:6379> GET mykey
1) "Hello"

Redis Incr 命令将 key 中储存的数字值增一。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

本操作的值限制在 64 位(bit)有符号数字表示之内。

语法

redis Incr 命令基本语法如下:

redis 127.0.0.1:6379> INCR KEY_NAME 

可用版本

>= 1.0.0

返回值

执行 INCR 命令之后 key 的值。

实例

redis> SET page_view 20
OK
 
redis> INCR page_view
(integer) 21
 
redis> GET page_view    # 数字值在 Redis 中以字符串的形式保存
"21"

 

Redis Incrby 命令将 key 中储存的数字加上指定的增量值。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

本操作的值限制在 64 位(bit)有符号数字表示之内。

语法

redis Incrby 命令基本语法如下:

redis 127.0.0.1:6379> INCRBY KEY_NAME INCR_AMOUNT

可用版本

>= 1.0.0

返回值

加上指定的增量值之后, key 的值。

实例

# key 存在且是数字值
 
redis> SET rank 50
OK
 
redis> INCRBY rank 20
(integer) 70
 
redis> GET rank
"70"
 
 
# key 不存在时
 
redis> EXISTS counter
(integer) 0
 
redis> INCRBY counter 30
(integer) 30
 
redis> GET counter
"30"
 
 
# key 不是数字值时
 
redis> SET book "long long ago..."
OK
 
redis> INCRBY book 200
(error) ERR value is not an integer or out of range

 

Redis Decrby 命令将 key 所储存的值减去指定的减量值。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

本操作的值限制在 64 位(bit)有符号数字表示之内。

语法

redis Decrby 命令基本语法如下:

redis 127.0.0.1:6379> DECRBY KEY_NAME DECREMENT_AMOUNT

可用版本

>= 1.0.0

返回值

减去指定减量值之后, key 的值。

实例

# 对已存在的 key 进行 DECRBY
 
redis> SET count 100
OK
 
redis> DECRBY count 20
(integer) 80
 
 
# 对不存在的 key 进行DECRBY
 
redis> EXISTS pages
(integer) 0
 
redis> DECRBY pages 10
(integer) -10

Redis Decrby 命令将 key 所储存的值减去指定的减量值。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

本操作的值限制在 64 位(bit)有符号数字表示之内。

语法

redis Decrby 命令基本语法如下:

redis 127.0.0.1:6379> DECRBY KEY_NAME DECREMENT_AMOUNT

可用版本

>= 1.0.0

返回值

减去指定减量值之后, key 的值。

实例

# 对已存在的 key 进行 DECRBY
 
redis> SET count 100
OK
 
redis> DECRBY count 20
(integer) 80
 
 
# 对不存在的 key 进行DECRBY
 
redis> EXISTS pages
(integer) 0
 
redis> DECRBY pages 10
(integer) -10

Redis Append 命令用于为指定的 key 追加值。

如果 key 已经存在并且是一个字符串,APPEND 命令将 value 追加到 key 原来的值的末尾。

如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行SET key value 一样。

语法

redis Append 命令基本语法如下:

redis 127.0.0.1:6379> APPEND KEY_NAME NEW_VALUE

可用版本

>= 2.0.0

返回值

追加指定值之后, key 中字符串的长度。

实例

# 对不存在的 key 执行 APPEND
 
redis> EXISTS myphone               # 确保 myphone 不存在
(integer) 0
 
redis> APPEND myphone "nokia"       # 对不存在的 key 进行 APPEND ,等同于 SET myphone "nokia"
(integer) 5                         # 字符长度
 
 
# 对已存在的字符串进行 APPEND
 
redis> APPEND myphone " - 1110"     # 长度从 5 个字符增加到 12 个字符
(integer) 12
 
redis> GET myphone
"nokia - 1110"

 

 

Redis 哈希(Hash)

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

实例

redis 127.0.0.1:6379> HMSET w3ckey name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
OK
redis 127.0.0.1:6379> HGETALL w3ckey
 
1) "name"
2) "redis tutorial"
3) "description"
4) "redis basic commands for caching"
5) "likes"
6) "20"
7) "visitors"
8) "23000"

在以上实例中,我们设置了 redis 的一些描述信息(name, description, likes, visitors) 到哈希表的w3ckey 中。


Redis hash 命令

下表列出了 redis hash 基本的相关命令:

序号

命令及描述

1

HDEL key field2 [field2] 
删除一个或多个哈希表字段

2

HEXISTS key field 
查看哈希表 key 中,指定的字段是否存在。

3

HGET key field 
获取存储在哈希表中指定字段的值

4

HGETALL key 
获取在哈希表中指定 key 的所有字段和值

5

HINCRBY key field increment 
为哈希表 key 中的指定字段的整数值加上增量 increment 。

6

HINCRBYFLOAT key field increment 
为哈希表 key 中的指定字段的浮点数值加上增量 increment 。

7

HKEYS key 
获取所有哈希表中的字段

8

HLEN key 
获取哈希表中字段的数量

9

HMGET key field1 [field2] 
获取所有给定字段的值

10

HMSET key field1 value1 [field2 value2 ] 
同时将多个 field-value (域-值)对设置到哈希表 key 中。

11

HSET key field value 
将哈希表 key 中的字段 field 的值设为 value 。

12

HSETNX key field value 
只有在字段 field 不存在时,设置哈希表字段的值。

13

HVALS key 
获取哈希表中所有值

14

HSCAN key cursor [MATCH pattern] [COUNT count] 
迭代哈希表中的键值对。

 

Redis Hdel 命令用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。

语法

redis Hdel 命令基本语法如下:

redis 127.0.0.1:6379> HDEL KEY_NAME FIELD1.. FIELDN 

可用版本

>= 2.0.0

返回值

被成功删除字段的数量,不包括被忽略的字段。

实例

redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HDEL myhash field1
(integer) 1
redis 127.0.0.1:6379> HDEL myhash field2
(integer) 0

Redis Hexists 命令用于查看哈希表的指定字段是否存在。

语法

redis Hexists 命令基本语法如下:

redis 127.0.0.1:6379> HEXISTS KEY_NAME FIELD_NAME 

可用版本

>= 2.0.0

返回值

如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key 不存在,返回 0 。

实例

redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HEXISTS myhash field1
(integer) 1
redis 127.0.0.1:6379> HEXISTS myhash field2
(integer) 0

Redis Hget 命令用于返回哈希表中指定字段的值。

语法

redis Hget 命令基本语法如下:

redis 127.0.0.1:6379> HGET KEY_NAME FIELD_NAME 

可用版本

>= 2.0.0

返回值

返回给定字段的值。如果给定的字段或 key 不存在时,返回 nil 。

实例

# 字段存在
 
redis> HSET site redis redis.com
(integer) 1
 
redis> HGET site redis
"redis.com"
 
 
# 字段不存在
 
redis> HGET site mysql
(nil)

Redis Hgetall 命令用于返回哈希表中,所有的字段和值。

在返回值里,紧跟每个字段名(field name)之后是字段的值(value),所以返回值的长度是哈希表大小的两倍。

语法

redis Hgetall 命令基本语法如下:

redis 127.0.0.1:6379> HGETALL KEY_NAME 

可用版本

>= 2.0.0

返回值

以列表形式返回哈希表的字段及字段值。 若 key 不存在,返回空列表。

实例

redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSET myhash field2 "bar"
(integer) 1
redis 127.0.0.1:6379> HGETALL myhash
1) "field1"
2) "Hello"
3) "field2"
4) "World"

Redis Hincrby 命令用于为哈希表中的字段值加上指定增量值。

增量也可以为负数,相当于对指定字段进行减法操作。

如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。

如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。

对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。

本操作的值被限制在 64 位(bit)有符号数字表示之内。

语法

redis Hincrby 命令基本语法如下:

redis 127.0.0.1:6379> HINCRBY KEY_NAME FIELD_NAME INCR_BY_NUMBER 

可用版本

>= 2.0.0

返回值

执行 HINCRBY 命令之后,哈希表中字段的值。

实例

redis 127.0.0.1:6379> HSET myhash field1 20
(integer) 1
redis 127.0.0.1:6379> HINCRBY myhash field 1
(integer) 21
redis 127.0.0.1:6379> HINCRBY myhash field -1
(integer) 20

Redis Hincrbyfloat 命令用于为哈希表中的字段值加上指定浮点数增量值。

如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。

语法

redis Hincrbyfloat 命令基本语法如下:

redis 127.0.0.1:6379> HINCRBYFLOAT KEY_NAME FIELD_NAME INCR_BY_NUMBER 

可用版本

>= 2.6.0

返回值

执行 Hincrbyfloat 命令之后,哈希表中字段的值。

实例

redis 127.0.0.1:6379> HSET myhash field 20.50
(integer) 1
redis 127.0.0.1:6379> HINCRBYFLOAT mykey field 0.1
"20.60"

Redis Hkeys 命令用于获取哈希表中的所有字段名。

语法

redis Hkeys 命令基本语法如下:

redis 127.0.0.1:6379> HKEYS KEY_NAME FIELD_NAME INCR_BY_NUMBER 

可用版本

>= 2.0.0

返回值

包含哈希表中所有字段的列表。 当 key 不存在时,返回一个空列表。

实例

redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSET myhash field2 "bar"
(integer) 1
redis 127.0.0.1:6379> HKEYS myhash
1) "field1"
2) "field2"

Redis Hlen 命令用于获取哈希表中字段的数量。

语法

redis Hlen 命令基本语法如下:

redis 127.0.0.1:6379> HLEN KEY_NAME 

可用版本

>= 2.0.0

返回值

哈希表中字段的数量。 当 key 不存在时,返回 0 。

实例

redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSET myhash field2 "bar"
(integer) 1
redis 127.0.0.1:6379> HLEN myhash
(integer) 2

Redis Hmget 命令用于返回哈希表中,一个或多个给定字段的值。

如果指定的字段不存在于哈希表,那么返回一个 nil 值。

语法

redis Hmget 命令基本语法如下:

redis 127.0.0.1:6379> HMGET KEY_NAME FIELD1...FIELDN 

可用版本

>= 2.0.0

返回值

一个包含多个给定字段关联值的表,表值的排列顺序和指定字段的请求顺序一样。

实例

redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSET myhash field2 "bar"
(integer) 1
redis 127.0.0.1:6379> HMGET myhash field1 field2 nofield
1) "foo"
2) "bar"
3) (nil)

Redis Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。

此命令会覆盖哈希表中已存在的字段。

如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。

语法

redis Hmset 命令基本语法如下:

redis 127.0.0.1:6379> HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN  

可用版本

>= 2.0.0

返回值

如果命令执行成功,返回 OK 。

实例

redis 127.0.0.1:6379> HSET myhash field1 "foo" field2 "bar"
OK
redis 127.0.0.1:6379> HGET myhash field1
"foo"
redis 127.0.0.1:6379> HMGET myhash field2
"bar"

Redis Hset 命令用于为哈希表中的字段赋值。

如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。

如果字段已经存在于哈希表中,旧值将被覆盖。

语法

redis Hset 命令基本语法如下:

redis 127.0.0.1:6379> HSET KEY_NAME FIELD VALUE 

可用版本

>= 2.0.0

返回值

如果字段是哈希表中的一个新建字段,并且值设置成功,返回 1 。 如果哈希表中域字段已经存在且旧值已被新值覆盖,返回 0 。

实例

redis 127.0.0.1:6379> HSET myhash field1 "foo"
OK
redis 127.0.0.1:6379> HGET myhash field1
"foo"
 
redis 127.0.0.1:6379> HSET website google "www.g.cn"       # 设置一个新域
(integer) 1
 
redis 127.0.0.1:6379>HSET website google "www.google.com" # 覆盖一个旧域
(integer) 0

Redis Hsetnx 命令用于为哈希表中不存在的的字段赋值。

如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。

如果字段已经存在于哈希表中,操作无效。

如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。

语法

redis Hsetnx 命令基本语法如下:

redis 127.0.0.1:6379> HSETNX KEY_NAME FIELD VALUE

可用版本

>= 2.0.0

返回值

设置成功,返回 1 。 如果给定字段已经存在且没有操作被执行,返回 0 。

实例

redis 127.0.0.1:6379> HSETNX myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSETNX myhash field1 "bar"
(integer) 0
redis 127.0.0.1:6379> HGET myhash field1
"foo"
 
redis 127.0.0.1:6379> HSETNX nosql key-value-store redis
(integer) 1
 
redis 127.0.0.1:6379> HSETNX nosql key-value-store redis       # 操作无效, key-value-store 已存在
(integer) 0

Redis Hvals 命令返回哈希表所有字段的值。

语法

redis Hvals 命令基本语法如下:

redis 127.0.0.1:6379> HVALS KEY_NAME FIELD VALUE 

可用版本

>= 2.0.0

返回值

一个包含哈希表中所有值的表。 当 key 不存在时,返回一个空表。

实例

redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSET myhash field2 "bar"
(integer) 1
redis 127.0.0.1:6379> HVALS myhash
1) "foo"
2) "bar"
 
# 空哈希表/不存在的key
 
redis 127.0.0.1:6379> EXISTS not_exists
(integer) 0
 
redis 127.0.0.1:6379> HVALS not_exists
(empty list or set)

 

 

 

Redis 列表(List)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)

一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

实例

redis 127.0.0.1:6379> LPUSH w3ckey redis
(integer) 1
redis 127.0.0.1:6379> LPUSH w3ckey mongodb
(integer) 2
redis 127.0.0.1:6379> LPUSH w3ckey mysql
(integer) 3
redis 127.0.0.1:6379> LRANGE w3ckey 0 10
 
1) "mysql"
2) "mongodb"
3) "redis"

在以上实例中我们使用了 LPUSH 将三个值插入了名为 w3ckey 的列表当中。

Redis 列表命令

下表列出了列表相关的基本命令:

序号

命令及描述

1

BLPOP key1 [key2 ] timeout 
移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

2

BRPOP key1 [key2 ] timeout 
移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

3

BRPOPLPUSH source destination timeout 
从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

4

LINDEX key index 
通过索引获取列表中的元素

5

LINSERT key BEFORE|AFTER pivot value 
在列表的元素前或者后插入元素

6

LLEN key 
获取列表长度

7

LPOP key 
移出并获取列表的第一个元素

8

LPUSH key value1 [value2] 
将一个或多个值插入到列表头部

9

LPUSHX key value 
将一个或多个值插入到已存在的列表头部

10

LRANGE key start stop 
获取列表指定范围内的元素

11

LREM key count value 
移除列表元素

12

LSET key index value 
通过索引设置列表元素的值

13

LTRIM key start stop 
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

14

RPOP key 
移除并获取列表最后一个元素

15

RPOPLPUSH source destination 
移除列表的最后一个元素,并将该元素添加到另一个列表并返回

16

RPUSH key value1 [value2] 
在列表中添加一个或多个值

17

RPUSHX key value 
为已存在的列表添加值

Redis Blpop 命令移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

语法

redis Blpop 命令基本语法如下:

redis 127.0.0.1:6379> BLPOP LIST1 LIST2 .. LISTN TIMEOUT

可用版本

>= 2.0.0

返回值

如果列表为空,返回一个 nil 。 否则,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。

实例

redis 127.0.0.1:6379> BLPOP list1 100

在以上实例中,操作会被阻塞,如果指定的列表 key list1 存在数据则会返回第一个元素,否则在等待100秒后会返回 nil 。

(nil)
(100.06s)

Redis Brpop 命令移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

语法

redis Blpop 命令基本语法如下:

redis 127.0.0.1:6379> BRPOP LIST1 LIST2 .. LISTN TIMEOUT 

可用版本

>= 2.0.0

返回值

假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。

实例

redis 127.0.0.1:6379> BRPOP list1 100

在以上实例中,操作会被阻塞,如果指定的列表 key list1 存在数据则会返回第一个元素,否则在等待100秒后会返回 nil 。

(nil)
(100.06s)

Redis Brpoplpush 命令从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它;如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

语法

redis Brpoplpush 命令基本语法如下:

redis 127.0.0.1:6379> BRPOPLPUSH LIST1 ANOTHER_LIST TIMEOUT 

可用版本

>= 2.0.0

返回值

假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值,第二个元素是等待时长。

实例

# 非空列表
 
redis> BRPOPLPUSH msg reciver 500
"hello moto"                        # 弹出元素的值
(3.38s)                             # 等待时长
 
redis> LLEN reciver
(integer) 1
 
redis> LRANGE reciver 0 0
1) "hello moto"
 
 
# 空列表
 
redis> BRPOPLPUSH msg reciver 1
(nil)
(1.34s)

Redis Lindex 命令用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

语法

redis Lindex 命令基本语法如下:

redis 127.0.0.1:6379> LINDEX KEY_NAME INDEX_POSITION 

可用版本

>= 1.0.0

返回值

列表中下标为指定索引值的元素。 如果指定索引值不在列表的区间范围内,返回 nil 。

实例

redis 127.0.0.1:6379> LPUSH mylist "World"
(integer) 1
 
redis 127.0.0.1:6379> LPUSH mylist "Hello"
(integer) 2
 
redis 127.0.0.1:6379> LINDEX mylist 0
"Hello"
 
redis 127.0.0.1:6379> LINDEX mylist -1
"World"
 
redis 127.0.0.1:6379> LINDEX mylist 3        # index不在 mylist 的区间范围内
(nil)

Redis Linsert 命令用于在列表的元素前或者后插入元素。当指定元素不存在于列表中时,不执行任何操作。 当列表不存在时,被视为空列表,不执行任何操作。 如果 key 不是列表类型,返回一个错误。

语法

redis Linsert 命令基本语法如下:

redis 127.0.0.1:6379> LINSERT KEY_NAME BEFORE EXISTING_VALUE NEW_VALUE 

可用版本

>= 1.0.0

返回值

如果命令执行成功,返回插入操作完成之后,列表的长度。 如果没有找到指定元素 ,返回 -1。 如果 key 不存在或为空列表,返回 0 。

实例

redis 127.0.0.1:6379> RPUSH list1 "foo"
(integer) 1
redis 127.0.0.1:6379> RPUSH list1 "bar"
(integer) 2
redis 127.0.0.1:6379> LINSERT list1 BEFORE "bar" "Yes"
(integer) 3
redis 127.0.0.1:6379> LRANGE mylist 0 -1
1) "foo"
2) "Yes"
3) "bar"

Redis Llen 命令用于返回列表的长度。如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误。

语法

redis Llen 命令基本语法如下:

redis 127.0.0.1:6379> LLEN KEY_NAME 

可用版本

>= 1.0.0

返回值

列表的长度。

实例

redis 127.0.0.1:6379> RPUSH list1 "foo"
(integer) 1
redis 127.0.0.1:6379> RPUSH list1 "bar"
(integer) 2
redis 127.0.0.1:6379> LLEN list1
(integer) 2

Redis Lpop 命令用于移除并返回列表的第一个元素。

语法

redis Lpop 命令基本语法如下:

redis 127.0.0.1:6379> LLEN KEY_NAME 

可用版本

>= 1.0.0

返回值

列表的第一个元素。 当列表 key 不存在时,返回 nil 。

实例

redis 127.0.0.1:6379> RPUSH list1 "foo"
(integer) 1
redis 127.0.0.1:6379> RPUSH list1 "bar"
(integer) 2
redis 127.0.0.1:6379> LPOP list1
"foo"

Redis Lpush 命令将一个或多个值插入到列表头部。如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。当 key 存在但不是列表类型时,返回一个错误。

注意:在Redis 2.4版本以前的LPUSH 命令,都只接受单个 value 值。

语法

redis Lpush 命令基本语法如下:

redis 127.0.0.1:6379> LPUSH KEY_NAME VALUE1.. VALUEN

可用版本

>= 1.0.0

返回值

执行 LPUSH 命令后,列表的长度。

实例

127.0.0.1:6379> LPUSH list1 "foo"
(integer) 1
127.0.0.1:6379> LPUSH list1 "bar"
(integer) 2
127.0.0.1:6379> LRANGE list1 0 -1
1) "bar"
2) "foo"

Redis Lpushx 将一个或多个值插入到已存在的列表头部,列表不存在时操作无效。

语法

redis Lpushx 命令基本语法如下:

redis 127.0.0.1:6379> LPUSHX KEY_NAME VALUE1.. VALUEN

可用版本

>= 2.2.0

返回值

LPUSHX 命令执行之后,列表的长度。

实例

127.0.0.1:6379> LPUSH list1 "foo"
(integer) 1
127.0.0.1:6379> LPUSHX list1 "bar"
(integer) 2
127.0.0.1:6379> LPUSHX list2 "bar"
(integer) 0
127.0.0.1:6379> LRANGE list1 0 -1
1) "bar"
2) "foo"

Redis Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

语法

redis Lrange 命令基本语法如下:

redis 127.0.0.1:6379> LRANGE KEY_NAME START END

可用版本

>= 1.0.0

返回值

一个列表,包含指定区间内的元素。

实例

redis 127.0.0.1:6379> LPUSH list1 "foo"
(integer) 1
redis 127.0.0.1:6379> LPUSH list1 "bar"
(integer) 2
redis 127.0.0.1:6379> LPUSHX list1 "bar"
(integer) 0
redis 127.0.0.1:6379> LRANGE list1 0 -1
1) "bar"
2) "bar"
3) "foo"

Redis Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。

COUNT 的值可以是以下几种:

·       count >0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。

·       count <0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。

·       count = 0: 移除表中所有与 VALUE 相等的值。

语法

redis Lrem 命令基本语法如下:

redis 127.0.0.1:6379> LREM KEY_NAME COUNT VALUE

可用版本

>= 1.0.0

返回值

被移除元素的数量。 列表不存在时返回 0 。

实例

redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 2
redis 127.0.0.1:6379> RPUSH mylist "foo"
(integer) 3
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 4
redis 127.0.0.1:6379> LREM mylist -2 "hello"
(integer) 2

 

Redis Lset 通过索引来设置元素的值。

当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。

关于列表下标的更多信息,请参考 LINDEX 命令

语法

redis Lset 命令基本语法如下:

redis 127.0.0.1:6379> LSET KEY_NAME INDEX VALUE

可用版本

>= 1.0.0

返回值

操作成功返回 ok ,否则返回错误信息。

实例

redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 2
redis 127.0.0.1:6379> RPUSH mylist "foo"
(integer) 3
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 4
redis 127.0.0.1:6379> LSET mylist 0 "bar"
OK
redis 127.0.0.1:6379> LRANGE mylist 0 -1
1: "bar"
2) "hello"
3) "foo"
4) "hello"

Redis Ltrim 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

语法

redis Ltrim 命令基本语法如下:

redis 127.0.0.1:6379> LTRIM KEY_NAME START STOP

可用版本

>= 1.0.0

返回值

命令执行成功时,返回 ok 。

实例

redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 2
redis 127.0.0.1:6379> RPUSH mylist "foo"
(integer) 3
redis 127.0.0.1:6379> RPUSH mylist "bar"
(integer) 4
redis 127.0.0.1:6379> LTRIM mylist 1 -1
OK
redis 127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "foo"
3) "bar"

Redis Rpop 命令用于移除并返回列表的最后一个元素。

语法

redis Rpop 命令基本语法如下:

redis 127.0.0.1:6379> RPOP KEY_NAME 

可用版本

>= 1.0.0

返回值

列表的最后一个元素。 当列表不存在时,返回 nil 。

实例

redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 2
redis 127.0.0.1:6379> RPUSH mylist "foo"
(integer) 3
redis 127.0.0.1:6379> RPUSH mylist "bar"
(integer) 4
redis 127.0.0.1:6379> RPOP mylist
OK
redis 127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "hello"
3) "foo"

Redis Rpoplpush 命令用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。

语法

redis Rpoplpush 命令基本语法如下:

redis 127.0.0.1:6379> RPOPLPUSH SOURCE_KEY_NAME DESTINATION_KEY_NAME

可用版本

>= 1.0.0

返回值

被弹出的元素。

实例

redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "foo"
(integer) 2
redis 127.0.0.1:6379> RPUSH mylist "bar"
(integer) 3
redis 127.0.0.1:6379> RPOPLPUSH mylist myotherlist
"bar"
redis 127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "foo"

Redis Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。

如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误。

注意:在 Redis 2.4 版本以前的RPUSH 命令,都只接受单个 value 值。

语法

redis Rpush 命令基本语法如下:

redis 127.0.0.1:6379> RPUSH KEY_NAME VALUE1..VALUEN

可用版本

>= 1.0.0

返回值

执行 RPUSH 操作后,列表的长度。

实例

redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "foo"
(integer) 2
redis 127.0.0.1:6379> RPUSH mylist "bar"
(integer) 3
redis 127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "foo"
3) "bar"

Redis Rpushx 命令用于将一个或多个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效。

语法

redis Rpushx 命令基本语法如下:

redis 127.0.0.1:6379> RPUSHX KEY_NAME VALUE1..VALUEN

可用版本

>= 2.2.0

返回值

执行 Rpushx 操作后,列表的长度。

实例

redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "foo"
(integer) 2
redis 127.0.0.1:6379> RPUSHX mylist2 "bar"
(integer) 0
redis 127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "foo"

 

Redis 集合(Set)

Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

实例

redis 127.0.0.1:6379> SADD w3ckey redis
(integer) 1
redis 127.0.0.1:6379> SADD w3ckey mongodb
(integer) 1
redis 127.0.0.1:6379> SADD w3ckey mysql
(integer) 1
redis 127.0.0.1:6379> SADD w3ckey mysql
(integer) 0
redis 127.0.0.1:6379> SMEMBERS w3ckey
 
1) "mysql"
2) "mongodb"
3) "redis"

在以上实例中我们通过 SADD 命令向名为 w3ckey 的集合插入的三个元素。


Redis 集合命令

下表列出了 Redis 集合基本命令:

序号

命令及描述

1

SADD key member1 [member2] 
向集合添加一个或多个成员

2

SCARD key 
获取集合的成员数

3

SDIFF key1 [key2] 
返回给定所有集合的差集

4

SDIFFSTORE destination key1 [key2] 
返回给定所有集合的差集并存储在 destination 中

5

SINTER key1 [key2] 
返回给定所有集合的交集

6

SINTERSTORE destination key1 [key2] 
返回给定所有集合的交集并存储在 destination 中

7

SISMEMBER key member 
判断 member 元素是否是集合 key 的成员

8

SMEMBERS key 
返回集合中的所有成员

9

SMOVE source destination member 
将 member 元素从 source 集合移动到 destination 集合

10

SPOP key 
移除并返回集合中的一个随机元素

11

SRANDMEMBER key [count] 
返回集合中一个或多个随机数

12

SREM key member1 [member2] 
移除集合中一个或多个成员

13

SUNION key1 [key2] 
返回所有给定集合的并集

14

SUNIONSTORE destination key1 [key2] 
所有给定集合的并集存储在 destination 集合中

15

SSCAN key cursor [MATCH pattern] [COUNT count] 
迭代集合中的元素

Redis Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。

假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。

当集合 key 不是集合类型时,返回一个错误。

注意:在Redis2.4版本以前, SADD 只接受单个成员值。

语法

redis Sadd 命令基本语法如下:

redis 127.0.0.1:6379> SADD KEY_NAME VALUE1..VALUEN

可用版本

>= 1.0.0

返回值

被添加到集合中的新元素的数量,不包括被忽略的元素。

实例

redis 127.0.0.1:6379> SADD myset "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset "foo"
(integer) 1
redis 127.0.0.1:6379> SADD myset "hello"
(integer) 0
redis 127.0.0.1:6379> SMEMBERS myset
1) "hello"
2) "foo"

Redis Scard 命令返回集合中元素的数量。

语法

redis Scard 命令基本语法如下:

redis 127.0.0.1:6379> SCARD KEY_NAME 

可用版本

>= 1.0.0

返回值

集合的数量。 当集合 key 不存在时,返回 0 。

实例

redis 127.0.0.1:6379> SADD myset "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset "foo"
(integer) 1
redis 127.0.0.1:6379> SADD myset "hello"
(integer) 0
redis 127.0.0.1:6379> SCARD myset
(integer) 2

Redis Sdiff 命令返回给定集合之间的差集。不存在的集合 key 将视为空集。

语法

redis Sdiff 命令基本语法如下:

redis 127.0.0.1:6379> SDIFF FIRST_KEY OTHER_KEY1..OTHER_KEYN 

可用版本

>= 1.0.0

返回值

包含差集成员的列表。

实例

redis 127.0.0.1:6379> SADD myset "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset "foo"
(integer) 1
redis 127.0.0.1:6379> SADD myset "bar"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "world"
(integer) 1
redis 127.0.0.1:6379> SDIFF myset myset2
1) "foo"
2) "bar"

Redis Sdiffstore 命令将给定集合之间的差集存储在指定的集合中。如果指定的集合 key 已存在,则会被覆盖。

语法

redis Sdiffstore 命令基本语法如下:

redis 127.0.0.1:6379> SDIFFSTORE DESTINATION_KEY KEY1..KEYN 

可用版本

>= 1.0.0

返回值

结果集中的元素数量。

实例

redis 127.0.0.1:6379> SADD myset "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset "foo"
(integer) 1
redis 127.0.0.1:6379> SADD myset "bar"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "world"
(integer) 1
redis 127.0.0.1:6379> SDIFFSTORE destset myset myset2
(integer) 2
redis 127.0.0.1:6379> SMEMBERS destset
1) "foo"
2) "bar"

Redis Sinter 命令返回给定所有给定集合的交集。不存在的集合 key 被视为空集。 当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。

语法

redis Sinter 命令基本语法如下:

redis 127.0.0.1:6379> SINTER KEY KEY1..KEYN 

可用版本

>= 1.0.0

返回值

交集成员的列表。

实例

redis 127.0.0.1:6379> SADD myset "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset "foo"
(integer) 1
redis 127.0.0.1:6379> SADD myset "bar"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "world"
(integer) 1
redis 127.0.0.1:6379> SINTER myset myset2
1) "hello"

Redis Sinterstore 命令将给定集合之间的交集存储在指定的集合中。如果指定的集合已经存在,则将其覆盖。

语法

redis Sinterstore 命令基本语法如下:

redis 127.0.0.1:6379> SINTERSTORE DESTINATION_KEY KEY KEY1..KEYN 

可用版本

>= 1.0.0

返回值

交集成员的列表。

实例

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "foo"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "world"
(integer) 1
redis 127.0.0.1:6379> SINTERSTORE myset myset1 myset2
(integer) 1
redis 127.0.0.1:6379> SMEMBERS myset
1) "hello"

Redis Sismember 命令判断成员元素是否是集合的成员。

语法

redis Sismember 命令基本语法如下:

redis 127.0.0.1:6379> SISMEMBER KEY VALUE 

可用版本

>= 1.0.0

返回值

如果成员元素是集合的成员,返回 1 。 如果成员元素不是集合的成员,或 key 不存在,返回 0 。

实例

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SISMEMBER myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SISMEMBER myset1 "world"
(integer) 0

Redis Smembers 命令返回集合中的所有的成员。不存在的集合 key 被视为空集合。

语法

redis Smembers 命令基本语法如下:

redis 127.0.0.1:6379> SMEMBERS KEY VALUE 

可用版本

>= 1.0.0

返回值

集合中的所有成员。

实例

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "world"
(integer) 1
redis 127.0.0.1:6379> SMEMBERS myset1
1) "World"
2) "Hello"

Redis Smove 命令将指定成员 member 元素从 source 集合移动到 destination 集合。

SMOVE 是原子性操作。

如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从source 集合中被移除,并添加到 destination 集合中去。

当 destination 集合已经包含member 元素时, SMOVE 命令只是简单地将source 集合中的 member 元素删除。

当 source 或destination 不是集合类型时,返回一个错误。

语法

redis Smove 命令基本语法如下:

redis 127.0.0.1:6379> SMOVE SOURCE DESTINATION MEMBER 

可用版本

>= 1.0.0

返回值

如果成员元素被成功移除,返回 1 。 如果成员元素不是 source 集合的成员,并且没有任何操作对 destination 集合执行,那么返回 0 。

实例

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "world"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "foo"
(integer) 1
redis 127.0.0.1:6379> SMOVE myset1 myset2 "bar"
(integer) 1
redis 127.0.0.1:6379> SMEMBERS myset1
1) "World"
2) "Hello"
redis 127.0.0.1:6379> SMEMBERS myset2
1) "foo"
2) "bar"

Redis Spop 命令用于移除并返回集合中的一个随机元素。

语法

redis Spop 命令基本语法如下:

redis 127.0.0.1:6379> SPOP KEY 

可用版本

>= 1.0.0

返回值

被移除的随机元素。 当集合不存在或是空集时,返回 nil 。

实例

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "world"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
redis 127.0.0.1:6379> SPOP myset1
"bar"
redis 127.0.0.1:6379> SMEMBERS myset1
1) "Hello"
2) "world"

Redis Srandmember 命令用于返回集合中的一个随机元素。

从 Redis 2.6 版本开始,Srandmember 命令接受可选的 count 参数:

·       如果 count为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。

·       如果 count为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。

该操作和 SPOP 相似,但 SPOP 将随机元素从集合中移除并返回,而 Srandmember 则仅仅返回随机元素,而不对集合进行任何改动。

语法

redis Srandmember 命令基本语法如下:

redis 127.0.0.1:6379> SRANDMEMBER KEY [count]

可用版本

>= 1.0.0

返回值

只提供集合 key 参数时,返回一个元素;如果集合为空,返回 nil 。 如果提供了 count 参数,那么返回一个数组;如果集合为空,返回空数组。

实例

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "world"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
redis 127.0.0.1:6379> SRANDMEMBER myset1
"bar"
redis 127.0.0.1:6379> SRANDMEMBER myset1 2
1) "Hello"
2) "world"

Redis Srem 命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。

当 key 不是集合类型,返回一个错误。

在 Redis 2.4 版本以前,SREM 只接受单个成员值。

语法

redis Srem 命令基本语法如下:

redis 127.0.0.1:6379> SREM KEY MEMBER1..MEMBERN

可用版本

>= 1.0.0

返回值

被成功移除的元素的数量,不包括被忽略的元素。

实例

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "world"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
redis 127.0.0.1:6379> SREM myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SREM myset1 "foo"
(integer) 0
redis 127.0.0.1:6379> SMEMBERS myset1
1) "bar"
2) "world"

Redis Sunion 命令返回给定集合的并集。不存在的集合 key 被视为空集。

语法

redis Sunion 命令基本语法如下:

redis 127.0.0.1:6379> SUNION KEY KEY1..KEYN

可用版本

>= 1.0.0

返回值

并集成员的列表。

实例

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "world"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "bar"
(integer) 1
redis 127.0.0.1:6379> SUNION myset1 myset2
1) "bar"
2) "world"
3) "hello"
4) "foo"

Redis Sunionstore 命令将给定集合的并集存储在指定的集合 destination 中。如果 destination 已经存在,则将其覆盖。

语法

redis Sunionstore 命令基本语法如下:

redis 127.0.0.1:6379> SUNIONSTORE DESTINATION KEY KEY1..KEYN

可用版本

>= 1.0.0

返回值

结果集中的元素数量。

实例

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "world"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "bar"
(integer) 1
redis 127.0.0.1:6379> SUNIONSTORE myset myset1 myset2
(integer) 1
redis 127.0.0.1:6379> SMEMBERS myset
1) "bar"
2) "world"
3) "hello"
4) "foo"

Redis Sscan 命令用于迭代集合键中的元素。

语法

redis Sscan 命令基本语法如下:

redis 127.0.0.1:6379> SSCAN KEY [MATCH pattern] [COUNT count]

可用版本

>= 1.0.0

返回值

数组列表。

实例

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "hi"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
redis 127.0.0.1:6379> sscan myset1 0 match h*
1) "0"
2) 1) "hello"
   2) "h1"

 

 

 

 

Redis 有序集合(sorted set)

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

实例

redis 127.0.0.1:6379> ZADD w3ckey 1 redis
(integer) 1
redis 127.0.0.1:6379> ZADD w3ckey 2 mongodb
(integer) 1
redis 127.0.0.1:6379> ZADD w3ckey 3 mysql
(integer) 1
redis 127.0.0.1:6379> ZADD w3ckey 3 mysql
(integer) 0
redis 127.0.0.1:6379> ZADD w3ckey 4 mysql
(integer) 0
redis 127.0.0.1:6379> ZRANGE w3ckey 0 10 WITHSCORES
 
1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "4"

在以上实例中我们通过命令 ZADD 向 redis 的有序集合中添加了三个值并关联上分数。


Redis 有序集合命令

下表列出了 redis 有序集合的基本命令:

序号

命令及描述

1

ZADD key score1 member1 [score2 member2] 
向有序集合添加一个或多个成员,或者更新已存在成员的分数

2

ZCARD key 
获取有序集合的成员数

3

ZCOUNT key min max 
计算在有序集合中指定区间分数的成员数

4

ZINCRBY key increment member 
有序集合中对指定成员的分数加上增量 increment

5

ZINTERSTORE destination numkeys key [key ...] 
计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中

6

ZLEXCOUNT key min max 
在有序集合中计算指定字典区间内成员数量

7

ZRANGE key start stop [WITHSCORES] 
通过索引区间返回有序集合成指定区间内的成员

8

ZRANGEBYLEX key min max [LIMIT offset count] 
通过字典区间返回有序集合的成员

9

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 
通过分数返回有序集合指定区间内的成员

10

ZRANK key member 
返回有序集合中指定成员的索引

11

ZREM key member [member ...] 
移除有序集合中的一个或多个成员

12

ZREMRANGEBYLEX key min max 
移除有序集合中给定的字典区间的所有成员

13

ZREMRANGEBYRANK key start stop 
移除有序集合中给定的排名区间的所有成员

14

ZREMRANGEBYSCORE key min max 
移除有序集合中给定的分数区间的所有成员

15

ZREVRANGE key start stop [WITHSCORES] 
返回有序集中指定区间内的成员,通过索引,分数从高到底

16

ZREVRANGEBYSCORE key max min [WITHSCORES] 
返回有序集中指定分数区间内的成员,分数从高到低排序

17

ZREVRANK key member 
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

18

ZSCORE key member 
返回有序集中,成员的分数值

19

ZUNIONSTORE destination numkeys key [key ...] 
计算给定的一个或多个有序集的并集,并存储在新的 key 中

20

ZSCAN key cursor [MATCH pattern] [COUNT count] 
迭代有序集合中的元素(包括元素成员和元素分值)

 

Redis Zadd 命令用于将一个或多个成员元素及其分数值加入到有序集当中。

如果某个成员已经是有序集的成员,那么更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。

分数值可以是整数值或双精度浮点数。

如果有序集合 key 不存在,则创建一个空的有序集并执行 ZADD 操作。

当 key 存在但不是有序集类型时,返回一个错误。

注意: 在 Redis 2.4 版本以前, ZADD 每次只能添加一个元素。

语法

redis Zadd 命令基本语法如下:

redis 127.0.0.1:6379> ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN

可用版本

>= 1.2.0

返回值

被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。

实例

redis 127.0.0.1:6379> ZADD myset 1 "hello"
(integer) 1
redis 127.0.0.1:6379> ZADD myset 1 "foo"
(integer) 1
redis 127.0.0.1:6379> ZADD myset 2 "world" 3 "bar"
(integer) 2
redis 127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES
1) "hello"
2) "1"
3) "foo"
4) "1"
5) "world"
6) "2"
7) "bar"
8) "3"

Redis Zcard 命令用于计算集合中元素的数量。

语法

redis Zcard 命令基本语法如下:

redis 127.0.0.1:6379> ZCARD KEY_NAME

可用版本

>= 1.2.0

返回值

当 key 存在且是有序集类型时,返回有序集的基数。 当 key 不存在时,返回 0 。

实例

redis 127.0.0.1:6379> ZADD myset 1 "hello"
(integer) 1
redis 127.0.0.1:6379> ZADD myset 1 "foo"
(integer) 1
redis 127.0.0.1:6379> ZADD myset 2 "world" 3 "bar"
(integer) 2
redis 127.0.0.1:6379> ZCARD myzset
(integer) 4

Redis Zcount 命令用于计算有序集合中指定分数区间的成员数量。

语法

redis Zcount 命令基本语法如下:

redis 127.0.0.1:6379> ZCOUNT key min max

可用版本

>= 2.0.0

返回值

分数值在 min 和 max 之间的成员的数量。

实例

redis 127.0.0.1:6379> ZADD myzset 1 "hello"
(integer) 1
redis 127.0.0.1:6379> ZADD myzset 1 "foo"
(integer) 1
redis 127.0.0.1:6379> ZADD myzset 2 "world" 3 "bar"
(integer) 2
redis 127.0.0.1:6379> ZCOUNT myzset 1 3
(integer) 4

Redis Zincrby 命令对有序集合中指定成员的分数加上增量 increment

可以通过传递一个负数值 increment ,让分数减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。

当 key 不存在,或分数不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD keyincrement member 。

当 key 不是有序集类型时,返回一个错误。

分数值可以是整数值或双精度浮点数。

语法

redis Zincrby 命令基本语法如下:

redis 127.0.0.1:6379> ZINCRBY key increment member

可用版本

>= 1.2.0

返回值

member 成员的新分数值,以字符串形式表示。

实例

redis 127.0.0.1:6379> ZADD myzset 1 "hello"
(integer) 1
redis 127.0.0.1:6379> ZADD myzset 1 "foo"
(integer) 1
redis 127.0.0.1:6379> ZINCRBY myzset 2 "hello"
(integer) 3
redis 127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES
1) "foo"
2) "2"
3) "hello"
4) "3"

Redis Zinterstore 命令计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination。

默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和。

语法

redis Zinterstore 命令基本语法如下:

redis 127.0.0.1:6379> ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

可用版本

>= 2.0.0

返回值

保存到目标结果集的的成员数量。

实例

# 有序集 mid_test
redis 127.0.0.1:6379> ZADD mid_test 70 "Li Lei"
(integer) 1
redis 127.0.0.1:6379> ZADD mid_test 70 "Han Meimei"
(integer) 1
redis 127.0.0.1:6379> ZADD mid_test 99.5 "Tom"
(integer) 1
 
# 另一个有序集 fin_test
redis 127.0.0.1:6379> ZADD fin_test 88 "Li Lei"
(integer) 1
redis 127.0.0.1:6379> ZADD fin_test 75 "Han Meimei"
(integer) 1
redis 127.0.0.1:6379> ZADD fin_test 99.5 "Tom"
(integer) 1
 
# 交集
redis 127.0.0.1:6379> ZINTERSTORE sum_point 2 mid_test fin_test
(integer) 3
 
# 显示有序集内所有成员及其分数值
redis 127.0.0.1:6379> ZRANGE sum_point 0 -1 WITHSCORES     
1) "Han Meimei"
2) "145"
3) "Li Lei"
4) "158"
5) "Tom"
6) "199"

Redis Zlexcount 命令在计算有序集合中指定字典区间内成员数量。

语法

redis Zlexcount 命令基本语法如下:

redis 127.0.0.1:6379> ZLEXCOUNT KEY MIN MAX

可用版本

>= 2.8.9

返回值

指定区间内的成员数量。

实例

redis 127.0.0.1:6379> ZADD myzset 0 a 0 b 0 c 0 d 0 e
(integer) 5
redis 127.0.0.1:6379> ZADD myzset 0 f 0 g
(integer) 2
redis 127.0.0.1:6379> ZLEXCOUNT myzset - +
(integer) 7
redis 127.0.0.1:6379> ZLEXCOUNT myzset [b [f
(integer) 5

Redis Zrange 返回有序集中,指定区间内的成员。

其中成员的位置按分数值递增(从小到大)来排序。

具有相同分数值的成员按字典序(lexicographical order )来排列。

如果你需要成员按

值递减(从大到小)来排列,请使用 ZREVRANGE 命令。

下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。

你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。

语法

redis Zrange 命令基本语法如下:

redis 127.0.0.1:6379> ZRANGE key start stop [WITHSCORES]

可用版本

>= 1.2.0

返回值

指定区间内,带有分数值(可选)的有序集成员的列表。

实例

redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES             # 显示整个有序集成员
1) "jack"
2) "3500"
3) "tom"
4) "5000"
5) "boss"
6) "10086"
 
redis 127.0.0.1:6379> ZRANGE salary 1 2 WITHSCORES              # 显示有序集下标区间 1 至 2 的成员
1) "tom"
2) "5000"
3) "boss"
4) "10086"
 
redis 127.0.0.1:6379> ZRANGE salary 0 200000 WITHSCORES         # 测试 end 下标超出最大下标时的情况
1) "jack"
2) "3500"
3) "tom"
4) "5000"
5) "boss"
6) "10086"
 
redis > ZRANGE salary 200000 3000000 WITHSCORES                  # 测试当给定区间不存在于有序集时的情况
(empty list or set)

Redis Zrangebylex 通过字典区间返回有序集合的成员。

语法

redis Zrange 命令基本语法如下:

redis 127.0.0.1:6379> ZRANGEBYLEX key min max [LIMIT offset count]

可用版本

>= 2.8.9

返回值

指定区间内的元素列表。

实例

redis 127.0.0.1:6379> ZADD myzset 0 a 0 b 0 c 0 d 0 e 0 f 0 g
(integer) 7
redis 127.0.0.1:6379> ZRANGEBYLEX myzset - [c
1) "a"
2) "b"
3) "c"
redis 127.0.0.1:6379> ZRANGEBYLEX myzset - (c
1) "a"
2) "b"
redis 127.0.0.1:6379> ZRANGEBYLEX myzset [aaa (g
1) "b"
2) "c"
3) "d"
4) "e"
5) "f"
redis> 

 

Redis Zrangebyscore 返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。

具有相同分数值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)。

默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)。

举个例子:

ZRANGEBYSCORE zset (1 5

返回所有符合条件 1 < score = 1.0.5

返回值

指定区间内,带有分数值(可选)的有序集成员的列表。

实例

redis 127.0.0.1:6379> ZADD salary 2500 jack                        # 测试数据
(integer) 0
redis 127.0.0.1:6379> ZADD salary 5000 tom
(integer) 0
redis 127.0.0.1:6379> ZADD salary 12000 peter
(integer) 0
 
redis 127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf               # 显示整个有序集
1) "jack"
2) "tom"
3) "peter"
 
redis 127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf WITHSCORES    # 显示整个有序集及成员的 score 值
1) "jack"
2) "2500"
3) "tom"
4) "5000"
5) "peter"
6) "12000"
 
redis 127.0.0.1:6379> ZRANGEBYSCORE salary -inf 5000 WITHSCORES    # 显示工资 <=5000 的所有成员
1) "jack"
2) "2500"
3) "tom"
4) "5000"
 
redis 127.0.0.1:6379> ZRANGEBYSCORE salary (5000 400000            # 显示工资大于 5000 小于等于 400000 的成员
1) "peter"
 
Redis Zrank 返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。

= 2.0.0

返回值

如果成员是有序集 key 的成员,返回member 的排名。 如果成员不是有序集 key 的成员,返回 nil 。

实例

redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES        # 显示所有成员及其 score 值
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "5000"
 
redis 127.0.0.1:6379> ZRANK salary tom                     # 显示 tom 的薪水排名,第二
(integer) 1

Redis Zrem 命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略。

当 key 存在但不是有序集类型时,返回一个错误。

注意: 在 Redis 2.4 版本以前,ZREM 每次只能删除一个元素。

语法

redis Zrem 命令基本语法如下:

redis 127.0.0.1:6379> ZREM key member [member ...]

可用版本

>= 1.2.0

返回值

被成功移除的成员的数量,不包括被忽略的成员。

实例

# 测试数据
 
redis 127.0.0.1:6379> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"
 
 
# 移除单个元素
 
redis 127.0.0.1:6379> ZREM page_rank google.com
(integer) 1
 
redis 127.0.0.1:6379> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
 
 
# 移除多个元素
 
redis 127.0.0.1:6379> ZREM page_rank baidu.com bing.com
(integer) 2
 
redis 127.0.0.1:6379> ZRANGE page_rank 0 -1 WITHSCORES
(empty list or set)
 
 
# 移除不存在元素
 
redis 127.0.0.1:6379> ZREM page_rank non-exists-element
(integer) 0

 

Redis Zremrangebylex 命令用于移除有序集合中给定的字典区间的所有成员。

语法

redis Zremrangebylex命令基本语法如下:

redis 127.0.0.1:6379> ZREMRANGEBYLEX key min max

可用版本

>= 2.8.9

返回值

被成功移除的成员的数量,不包括被忽略的成员。

实例

redis 127.0.0.1:6379> ZADD myzset 0 aaaa 0 b 0 c 0 d 0 e
(integer) 5
redis 127.0.0.1:6379> ZADD myzset 0 foo 0 zap 0 zip 0 ALPHA 0 alpha
(integer) 5
redis 127.0.0.1:6379> ZRANGE myzset 0 -1
1) "ALPHA"
 2) "aaaa"
 3) "alpha"
 4) "b"
 5) "c"
 6) "d"
 7) "e"
 8) "foo"
 9) "zap"
10) "zip"
redis 127.0.0.1:6379> ZREMRANGEBYLEX myzset [alpha [omega
(integer) 6
redis 127.0.0.1:6379> ZRANGE myzset 0 -1
1) "ALPHA"
2) "aaaa"
3) "zap"
4) "zip"
redis> 

 

Redis Zremrangebyrank 命令用于移除有序集中,指定排名(rank)区间内的所有成员。

语法

redis Zremrangebyrank 命令基本语法如下:

redis 127.0.0.1:6379> ZREMRANGEBYRANK key start stop

可用版本

>= 2.0.0

返回值

被移除成员的数量。

实例

redis 127.0.0.1:6379> ZADD salary 2000 jack
(integer) 1
redis 127.0.0.1:6379> ZADD salary 5000 tom
(integer) 1
redis 127.0.0.1:6379> ZADD salary 3500 peter
(integer) 1
 
redis 127.0.0.1:6379> ZREMRANGEBYRANK salary 0 1       # 移除下标 0 至 1 区间内的成员
(integer) 2
 
redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES    # 有序集只剩下一个成员
1) "tom"
2) "5000"

 

Redis Zremrangebyscore 命令用于移除有序集中,指定分数(score)区间内的所有成员。

语法

redis Zremrangebyscore 命令基本语法如下:

redis 127.0.0.1:6379> ZREMRANGEBYSCORE key min max

可用版本

>= 1.2.0

返回值

被移除成员的数量。

实例

redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES          # 显示有序集内所有成员及其 score 值
1) "tom"
2) "2000"
3) "peter"
4) "3500"
5) "jack"
6) "5000"
 
redis 127.0.0.1:6379> ZREMRANGEBYSCORE salary 1500 3500      # 移除所有薪水在 1500 到 3500 内的员工
(integer) 2
 
redis> ZRANGE salary 0 -1 WITHSCORES          # 剩下的有序集成员
1) "jack"
2) "5000"

Redis Zrevrange 命令返回有序集中,指定区间内的成员。

其中成员的位置按分数值递减(从大到小)来排列。

具有相同分数值的成员按字典序的逆序(reverse lexicographicalorder)排列。

除了成员按分数值递减的次序排列这一点外, ZREVRANGE 命令的其他方面和 ZRANGE 命令一样。

语法

redis Zrevrange 命令基本语法如下:

redis 127.0.0.1:6379> ZREVRANGE key start stop [WITHSCORES]

可用版本

>= 1.2.0

返回值

指定区间内,带有分数值(可选)的有序集成员的列表。

实例

redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES        # 递增排列
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "5000"
 
redis 127.0.0.1:6379> ZREVRANGE salary 0 -1 WITHSCORES     # 递减排列
1) "jack"
2) "5000"
3) "tom"
4) "4000"
5) "peter"
6) "3500"

Redis Zrevrangebyscore 返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列。

具有相同分数值的成员按字典序的逆序(reverse lexicographicalorder )排列。

除了成员按分数值递减的次序排列这一点外, ZREVRANGEBYSCORE 命令的其他方面和 ZRANGEBYSCORE 命令一样。

语法

redis Zrevrangebyscore 命令基本语法如下:

redis 127.0.0.1:6379> ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

可用版本

>= 2.2.0

返回值

指定区间内,带有分数值(可选)的有序集成员的列表。

实例

redis 127.0.0.1:6379> ZADD salary 10086 jack
(integer) 1
redis > ZADD salary 5000 tom
(integer) 1
redis 127.0.0.1:6379> ZADD salary 7500 peter
(integer) 1
redis 127.0.0.1:6379> ZADD salary 3500 joe
(integer) 1
 
redis 127.0.0.1:6379> ZREVRANGEBYSCORE salary +inf -inf   # 逆序排列所有成员
1) "jack"
2) "peter"
3) "tom"
4) "joe"
 
redis 127.0.0.1:6379> ZREVRANGEBYSCORE salary 10000 2000  # 逆序排列薪水介于 10000 和 2000 之间的成员
1) "peter"
2) "tom"
3) "joe"

 

Redis Zrevrank 命令返回有序集中成员的排名。其中有序集成员按分数值递减(从大到小)排序。

排名以 0 为底,也就是说, 分数值最大的成员排名为 0 。

使用 ZRANK 命令可以获得成员按分数值递增(从小到大)排列的排名。

语法

redis Zrevrank 命令基本语法如下:

redis 127.0.0.1:6379> ZREVRANK key member

可用版本

>= 2.2.0

返回值

如果成员是有序集 key 的成员,返回成员的排名。 如果成员不是有序集 key 的成员,返回 nil 。

实例

redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES     # 测试数据
1) "jack"
2) "2000"
3) "peter"
4) "3500"
5) "tom"
6) "5000"
 
redis 127.0.0.1:6379> ZREVRANK salary peter     # peter 的工资排第二
(integer) 1
 
redis 127.0.0.1:6379> ZREVRANK salary tom       # tom 的工资最高
(integer) 0

 

Redis Zscore 命令返回有序集中,成员的分数值。如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil 。

语法

redis Zscore 命令基本语法如下:

redis 127.0.0.1:6379> ZSCORE key member

可用版本

>= 1.2.0

返回值

成员的分数值,以字符串形式表示。

实例

redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES    # 测试数据
1) "tom"
2) "2000"
3) "peter"
4) "3500"
5) "jack"
6) "5000"
 
redis 127.0.0.1:6379> ZSCORE salary peter              # 注意返回值是字符串
"3500"

 

Redis Zunionstore 命令计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination。

默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和 。

语法

redis Zunionstore 命令基本语法如下:

redis 127.0.0.1:6379> ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

可用版本

>= 2.0.0

返回值

保存到 destination 的结果集的成员数量。

实例

redis 127.0.0.1:6379> ZRANGE programmer 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"
 
redis 127.0.0.1:6379> ZRANGE manager 0 -1 WITHSCORES
1) "herry"
2) "2000"
3) "mary"
4) "3500"
5) "bob"
6) "4000"
 
redis 127.0.0.1:6379> ZUNIONSTORE salary 2 programmer manager WEIGHTS 1 3   # 公司决定加薪。。。除了程序员。。。
(integer) 6
 
redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"
7) "herry"
8) "6000"
9) "mary"
10) "10500"
11) "bob"
12) "12000"

Redis Zscan 命令用于迭代有序集合中的元素(包括元素成员和元素分值)

语法

redis Zscan 命令基本语法如下:

redis 127.0.0.1:6379> redis 127.0.0.1:6379> ZSCAN key cursor [MATCH pattern] [COUNT count]

可用版本

>= 2.8.0

返回值

返回的每个元素都是一个有序集合元素,一个有序集合元素由一个成员(member)和一个分值(score)组成。

 

Redis HyperLogLog

Redis 在 2.8.9 版本添加了 HyperLogLog 结构。

Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。

在 Redis 里面,每个HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。


什么是基数?

比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。


实例

以下实例演示了 HyperLogLog 的工作过程:

redis 127.0.0.1:6379> PFADD w3ckey "redis"
 
1) (integer) 1
 
redis 127.0.0.1:6379> PFADD w3ckey "mongodb"
 
1) (integer) 1
 
redis 127.0.0.1:6379> PFADD w3ckey "mysql"
 
1) (integer) 1
 
redis 127.0.0.1:6379> PFCOUNT w3ckey
 
(integer) 3

Redis HyperLogLog 命令

下表列出了 redis HyperLogLog 的基本命令:

序号

命令及描述

1

PFADD key element [element ...] 
添加指定元素到 HyperLogLog 中。

2

PFCOUNT key [key ...] 
返回给定 HyperLogLog 的基数估算值。

3

PFMERGE destkey sourcekey [sourcekey ...] 
将多个 HyperLogLog 合并为一个 HyperLogLog

Redis Pfadd 命令将所有元素参数添加到 HyperLogLog 数据结构中。

语法

redis Pfadd 命令基本语法如下:

redis 127.0.0.1:6379> PFADD key element [element ...]

可用版本

>= 2.8.9

返回值

整型,如果至少有个元素被添加返回 1, 否则返回 0。

实例

redis 127.0.0.1:6379> PFADD mykey a b c d e f g h i j
(integer) 1
redis 127.0.0.1:6379> PFCOUNT mykey
(integer) 10

 

Redis Pfcount 命令返回给定 HyperLogLog 的基数估算值。

语法

redis Pfcount 命令基本语法如下:

redis 127.0.0.1:6379> PFCOUNT key [key ...]

可用版本

>= 2.8.9

返回值

整数,返回给定 HyperLogLog 的基数值,如果多个 HyperLogLog 则返回基数估值之和。

实例

redis 127.0.0.1:6379> PFADD hll foo bar zap
(integer) 1
redis 127.0.0.1:6379> PFADD hll zap zap zap
(integer) 0
redis 127.0.0.1:6379> PFADD hll foo bar
(integer) 0
redis 127.0.0.1:6379> PFCOUNT hll
(integer) 3
redis 127.0.0.1:6379> PFADD some-other-hll 1 2 3
(integer) 1
redis 127.0.0.1:6379> PFCOUNT hll some-other-hll
(integer) 6
redis> 

 

Redis Pgmerge 命令将多个 HyperLogLog 合并为一个 HyperLogLog ,合并后的 HyperLogLog 的基数估算值是通过对所有 给定 HyperLogLog 进行并集计算得出的。

语法

redis Pgmerge 命令基本语法如下:

redis 127.0.0.1:6379> PFMERGE destkey sourcekey [sourcekey ...]

可用版本

>= 2.8.9

返回值

返回 OK。

实例

redis 127.0.0.1:6379> PFADD hll1 foo bar zap a
(integer) 1
redis 127.0.0.1:6379> PFADD hll2 a b c foo
(integer) 1
redis 127.0.0.1:6379> PFMERGE hll3 hll1 hll2
OK
redis 127.0.0.1:6379> PFCOUNT hll3
(integer) 6
redis> 

 

Redis 发布订阅

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

Redis 客户端可以订阅任意数量的频道。

下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和client1 之间的关系:

当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:


实例

以下实例演示了发布订阅是如何工作的。在我们实例中我们创建了订阅频道名为 redisChat:

redis 127.0.0.1:6379> SUBSCRIBE redisChat
 
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redisChat"
3) (integer) 1

现在,我们先重新开启个 redis 客户端,然后在同一个频道 redisChat 发布两次消息,订阅者就能接收到消息。

redis 127.0.0.1:6379> PUBLISH redisChat "Redis is a great caching technique"
 
(integer) 1
 
redis 127.0.0.1:6379> PUBLISH redisChat "Learn redis by w3cschool.cn"
 
(integer) 1
 
# 订阅者的客户端会显示如下消息
1) "message"
2) "redisChat"
3) "Redis is a great caching technique"
1) "message"
2) "redisChat"
3) "Learn redis by w3cschool.cn"

Redis 发布订阅命令

下表列出了 redis 发布订阅常用命令:

序号

命令及描述

1

PSUBSCRIBE pattern [pattern ...] 
订阅一个或多个符合给定模式的频道。

2

PUBSUB subcommand [argument [argument ...]] 
查看订阅与发布系统状态。

3

PUBLISH channel message 
将信息发送到指定的频道。

4

PUNSUBSCRIBE [pattern [pattern ...]] 
退订所有给定模式的频道。

5

SUBSCRIBE channel [channel ...] 
订阅给定的一个或多个频道的信息。

6

UNSUBSCRIBE [channel [channel ...]] 
指退订给定的频道。

Redis Psubscribe 命令订阅一个或多个符合给定模式的频道。

每个模式以 * 作为匹配符,比如 it*匹配所有以 it 开头的频道( it.news 、 it.blog 、 it.tweets 等等)。 news.* 匹配所有以news. 开头的频道( news.it 、news.global.today 等等),诸如此类。

语法

redis Psubscribe 命令基本语法如下:

redis 127.0.0.1:6379> PSUBSCRIBE pattern [pattern ...]

可用版本

>= 2.0.0

返回值

接收到的信息。

实例

redis 127.0.0.1:6379> PSUBSCRIBE mychannel
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "mychannel"
3) (integer) 1

Redis Pubsub 命令用于查看订阅与发布系统状态,它由数个不同格式的子命令组成。

语法

redis Pubsub 命令基本语法如下:

redis 127.0.0.1:6379> PUBSUB <subcommand> [argument [argument ...]]

可用版本

>= 2.8.0

返回值

由活跃频道组成的列表。

实例

redis 127.0.0.1:6379> PUBSUB CHANNELS
(empty list or set)

Redis Publish 命令用于将信息发送到指定的频道。

语法

redis Publish 命令基本语法如下:

redis 127.0.0.1:6379> PUBLISH channel message

可用版本

>= 2.0.0

返回值

接收到信息的订阅者数量。

实例

redis 127.0.0.1:6379> PUBLISH mychannel "hello, i m here"
(integer) 1

Redis Punsubscribe 命令用于退订所有给定模式的频道。

语法

redis Punsubscribe 命令基本语法如下:

redis 127.0.0.1:6379> PUNSUBSCRIBE [pattern [pattern ...]]

可用版本

>= 2.0.0

返回值

这个命令在不同的客户端中有不同的表现。

实例

redis 127.0.0.1:6379> PUNSUBSCRIBE mychannel 
1) "punsubscribe"
2) "a"
3) (integer) 1

 

Redis Subscribe 命令用于订阅给定的一个或多个频道的信息。。

语法

redis Subscribe 命令基本语法如下:

redis 127.0.0.1:6379> SUBSCRIBE channel [channel ...]

可用版本

>= 2.0.0

返回值

接收到的信息

实例

redis 127.0.0.1:6379> SUBSCRIBE mychannel 
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "mychannel"
3) (integer) 1
1) "message"
2) "mychannel"
3) "a"

Redis Unsubscribe 命令用于退订给定的一个或多个频道的信息。

语法

redis Unsubscribe 命令基本语法如下:

redis 127.0.0.1:6379> UNSUBSCRIBE channel [channel ...]

可用版本

>= 2.0.0

返回值

这个命令在不同的客户端中有不同的表现。

实例

redis 127.0.0.1:6379> UNSUBSCRIBE mychannel 
1) "unsubscribe"
2) "a"
3) (integer) 0

 

Redis 事务

Redis 事务可以一次执行多个命令,并且带有以下两个重要的保证:

·       事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

·       事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

一个事务从开始到执行会经历以下三个阶段:

·       开始事务。

·       命令入队。

·       执行事务。


实例

以下是一个事务的例子, 它先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令:

redis 127.0.0.1:6379> MULTI
OK
 
redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUED
 
redis 127.0.0.1:6379> GET book-name
QUEUED
 
redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUED
 
redis 127.0.0.1:6379> SMEMBERS tag
QUEUED
 
redis 127.0.0.1:6379> EXEC
1) OK
2) "Mastering C++ in 21 days"
3) (integer) 3
4) 1) "Mastering Series"
   2) "C++"
   3) "Programming"

Redis 事务命令

下表列出了 redis 事务的相关命令:

序号

命令及描述

1

DISCARD 
取消事务,放弃执行事务块内的所有命令。

2

EXEC 
执行所有事务块内的命令。

3

MULTI 
标记一个事务块的开始。

4

UNWATCH 
取消 WATCH 命令对所有 key 的监视。

5

WATCH key [key ...] 
监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

Redis Discard 命令用于取消事务,放弃执行事务块内的所有命令。

语法

redis Discard 命令基本语法如下:

redis 127.0.0.1:6379> DISCARD

可用版本

>= 2.0.0

返回值

总是返回 OK 。

实例

redis 127.0.0.1:6379> MULTI
OK
 
redis 127.0.0.1:6379> PING
QUEUED
 
redis 127.0.0.1:6379> SET greeting "hello"
QUEUED
 
redis 127.0.0.1:6379> DISCARD
OK

Redis Exec 命令用于执行所有事务块内的命令。

语法

redis Exec 命令基本语法如下:

redis 127.0.0.1:6379> Exec

可用版本

>= 1.2.0

返回值

事务块内所有命令的返回值,按命令执行的先后顺序排列。 当操作被打断时,返回空值 nil 。

实例

# 事务被成功执行
 
redis 127.0.0.1:6379> MULTI
OK
 
redis 127.0.0.1:6379> INCR user_id
QUEUED
 
redis 127.0.0.1:6379> INCR user_id
QUEUED
 
redis 127.0.0.1:6379> INCR user_id
QUEUED
 
redis 127.0.0.1:6379> PING
QUEUED
 
redis 127.0.0.1:6379> EXEC
1) (integer) 1
2) (integer) 2
3) (integer) 3
4) PONG
 
 
# 监视 key ,且事务成功执行
 
redis 127.0.0.1:6379> WATCH lock lock_times
OK
 
redis 127.0.0.1:6379> MULTI
OK
 
redis 127.0.0.1:6379> SET lock "huangz"
QUEUED
 
redis 127.0.0.1:6379> INCR lock_times
QUEUED
 
redis 127.0.0.1:6379> EXEC
1) OK
2) (integer) 1
 
 
# 监视 key ,且事务被打断
 
redis 127.0.0.1:6379> WATCH lock lock_times
OK
 
redis 127.0.0.1:6379> MULTI
OK
 
redis 127.0.0.1:6379> SET lock "joe"        # 就在这时,另一个客户端修改了 lock_times 的值
QUEUED
 
redis 127.0.0.1:6379> INCR lock_times
QUEUED
 
redis 127.0.0.1:6379> EXEC                  # 因为 lock_times 被修改, joe 的事务执行失败
(nil)

Redis Multi 命令用于标记一个事务块的开始。

事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。

语法

redis Multi 命令基本语法如下:

redis 127.0.0.1:6379> Multi

可用版本

>= 1.2.0

返回值

总是返回 OK 。

实例

redis 127.0.0.1:6379> MULTI            # 标记事务开始
OK
 
redis 127.0.0.1:6379> INCR user_id     # 多条命令按顺序入队
QUEUED
 
redis 127.0.0.1:6379> INCR user_id
QUEUED
 
redis 127.0.0.1:6379> INCR user_id
QUEUED
 
redis 127.0.0.1:6379> PING
QUEUED
 
redis 127.0.0.1:6379> EXEC             # 执行
1) (integer) 1
2) (integer) 2
3) (integer) 3
4) PONG

Redis Unwatch 命令用于取消 WATCH 命令对所有 key 的监视。

语法

redis Unwatch 命令基本语法如下:

redis 127.0.0.1:6379> UNWATCH 

可用版本

>= 2.2.0

返回值

总是返回 OK 。

实例

redis 127.0.0.1:6379> WATCH lock lock_times
OK
 
redis 127.0.0.1:6379> UNWATCH
OK

Redis Watch 命令用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断

语法

redis Watch 命令基本语法如下:

redis 127.0.0.1:6379> Watch 

可用版本

>= 2.2.0

返回值

总是返回 OK 。

实例

redis> WATCH lock lock_times
OK

 

Redis 脚本

Redis 脚本使用 Lua 解释器来执行脚本。 Reids 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL

语法

Eval 命令的基本语法如下:

redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]

实例

以下实例演示了 redis 脚本工作过程:

redis 127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
 
1) "key1"
2) "key2"
3) "first"
4) "second"

Redis 脚本命令

下表列出了 redis 脚本常用命令:

序号

命令及描述

1

EVAL script numkeys key [key ...] arg [arg ...] 
执行 Lua 脚本。

2

EVALSHA sha1 numkeys key [key ...] arg [arg ...] 
执行 Lua 脚本。

3

SCRIPT EXISTS script [script ...] 
查看指定的脚本是否已经被保存在缓存当中。

4

SCRIPT FLUSH 
从脚本缓存中移除所有脚本。

5

SCRIPT KILL 
杀死当前正在运行的 Lua 脚本。

6

SCRIPT LOAD script 
将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本。

Redis Eval 命令使用 Lua 解释器执行脚本。

语法

redis Eval 命令基本语法如下:

redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...] 

参数说明:

·       script: 参数是一段 Lua 5.1 脚本程序。脚本不必(也不应该)定义为一个 Lua 函数。

·       numkeys: 用于指定键名参数的个数。

·       key [key ...]: 从 EVAL 的第三个参数开始算起,表示在脚本中所用到的那些 Redis 键(key),这些键名参数可以在 Lua 中通过全局变量 KEYS 数组,用 1 为基址的形式访问( KEYS[1] , KEYS[2] ,以此类推)。

·       arg [arg ...]: 附加参数,在 Lua 中通过全局变量 ARGV 数组访问,访问的形式和 KEYS 变量类似( ARGV[1] 、 ARGV[2] ,诸如此类)。

可用版本

>= 2.6.0

实例

redis 127.0.0.1:6379> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
1) "key1"
2) "key2"
3) "first"
4) "second"

Redis Evalsha 命令根据给定的 sha1 校验码,执行缓存在服务器中的脚本。

语法

redis Evalsha 命令基本语法如下:

redis 127.0.0.1:6379> EVALSHA sha1 numkeys key [key ...] arg [arg ...] 

参数说明:

·       script: 参数是一段 Lua 5.1 脚本程序。脚本不必(也不应该)定义为一个 Lua 函数。

·       numkeys: 用于指定键名参数的个数。

·       key [key ...]: 从 EVAL 的第三个参数开始算起,表示在脚本中所用到的那些 Redis 键(key),这些键名参数可以在 Lua 中通过全局变量 KEYS 数组,用 1 为基址的形式访问( KEYS[1] , KEYS[2] ,以此类推)。

·       arg [arg ...]: 附加参数,在 Lua 中通过全局变量 ARGV 数组访问,访问的形式和 KEYS 变量类似( ARGV[1] 、 ARGV[2] ,诸如此类)。

可用版本

>= 2.6.0

实例

redis 127.0.0.1:6379> SCRIPT LOAD "return 'hello moto'"
"232fd51614574cf0867b83d384a5e898cfd24e5a"
 
redis 127.0.0.1:6379> EVALSHA "232fd51614574cf0867b83d384a5e898cfd24e5a" 0
"hello moto"

Redis Script Exists 命令用于校验指定的脚本是否已经被保存在缓存当中。

语法

redis Script Exists 命令基本语法如下:

redis 127.0.0.1:6379> EVALSHA sha1 numkeys key [key ...] arg [arg ...] 

可用版本

>= 2.6.0

返回值

一个列表,包含 0 和 1 ,前者表示脚本不存在于缓存,后者表示脚本已经在缓存里面了。

列表中的元素和给定的 SHA1 校验和保持对应关系,比如列表的第三个元素的值就表示第三个 SHA1 校验和所指定的脚本在缓存中的状态。

实例

redis 127.0.0.1:6379> SCRIPT LOAD "return 'hello moto'"    # 载入一个脚本
"232fd51614574cf0867b83d384a5e898cfd24e5a"
 
redis 127.0.0.1:6379> SCRIPT EXISTS 232fd51614574cf0867b83d384a5e898cfd24e5a
1) (integer) 1
 
redis 127.0.0.1:6379> SCRIPT FLUSH     # 清空缓存
OK
 
redis 127.0.0.1:6379> SCRIPT EXISTS 232fd51614574cf0867b83d384a5e898cfd24e5a
1) (integer) 0

Redis Script Flush 命令用于清除所有 Lua 脚本缓存。

语法

redis Script Flush 命令基本语法如下:

redis 127.0.0.1:6379> SCRIPT FLUSH

可用版本

>= 2.6.0

返回值

总是返回 OK

实例

redis 127.0.0.1:6379> SCRIPT FLUSH
OK

Redis Script kill 命令用于杀死当前正在运行的 Lua 脚本,当且仅当这个脚本没有执行过任何写操作时,这个命令才生效。

这个命令主要用于终止运行时间过长的脚本,比如一个因为 BUG 而发生无限循环的脚本。

SCRIPT KILL 执行之后,当前正在运行的脚本会被杀死,执行这个脚本的客户端会从 EVAL 命令的阻塞当中退出,并收到一个错误作为返回值。

语法

redis Script kill 命令基本语法如下:

redis 127.0.0.1:6379> SCRIPT KILL

可用版本

>= 2.6.0

返回值

总是返回 OK

实例

redis 127.0.0.1:6379> SCRIPT KILL
OK

Redis Script Load 命令用于将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本。

EVAL 命令也会将脚本添加到脚本缓存中,但是它会立即对输入的脚本进行求值。

如果给定的脚本已经在缓存里面了,那么不执行任何操作。

在脚本被加入到缓存之后,通过 EVALSHA 命令,可以使用脚本的 SHA1 校验和来调用这个脚本。

脚本可以在缓存中保留无限长的时间,直到执行 SCRIPT FLUSH 为止。

关于使用 Redis 对 Lua 脚本进行求值的更多信息,请参见 EVAL 命令。

语法

redis Script Load 命令基本语法如下:

redis 127.0.0.1:6379> SCRIPT LOAD script

可用版本

>= 2.6.0

返回值

给定脚本的 SHA1 校验和

实例

redis 127.0.0.1:6379> SCRIPT LOAD "return 1"
"e0e1f9fabfc9d4800c877a703b823ac0578ff8db"

 

 

 

 

 

 

 

 

 

 

Redis 连接

Redis 连接命令主要是用于连接 redis 服务。

实例

以下实例演示了客户端如何通过密码验证连接到 redis 服务,并检测服务是否在运行:

redis 127.0.0.1:6379> AUTH "password"
OK
redis 127.0.0.1:6379> PING
PONG

Redis 连接命令

下表列出了 redis 连接的基本命令:

序号

命令及描述

1

AUTH password 
验证密码是否正确

2

ECHO message 
打印字符串

3

PING 
查看服务是否运行

4

QUIT 
关闭当前连接

5

SELECT index 
切换到指定的数据库

Redis Auth 命令用于检测给定的密码和配置文件中的密码是否相符。

语法

redis Auth 命令基本语法如下:

redis 127.0.0.1:6379> AUTH PASSWORD 

可用版本

>= 1.0.0

返回值

密码匹配时返回 OK ,否则返回一个错误。

实例

redis 127.0.0.1:6379> AUTH PASSWORD
(error) ERR Client sent AUTH, but no password is set
redis 127.0.0.1:6379> CONFIG SET requirepass "mypass"
OK
redis 127.0.0.1:6379> AUTH mypass
Ok

Redis Echo 命令用于打印给定的字符串。

语法

redis Echo 命令基本语法如下:

redis 127.0.0.1:6379> ECHO message

可用版本

>= 1.0.0

返回值

返回字符串本身。

实例

redis 127.0.0.1:6379> ECHO "Hello World"
"Hello World"

Redis Ping 命令使用客户端向 Redis 服务器发送一个 PING ,如果服务器运作正常的话,会返回一个 PONG 。

通常用于测试与服务器的连接是否仍然生效,或者用于测量延迟值。

语法

redis Ping 命令基本语法如下:

redis 127.0.0.1:6379> PING 

可用版本

>= 1.0.0

返回值

如果连接正常就返回一个 PONG ,否则返回一个连接错误。

实例

# 客户端和服务器连接正常
 
redis 127.0.0.1:6379> PING
PONG
 
# 客户端和服务器连接不正常(网络不正常或服务器未能正常运行)
 
redis 127.0.0.1:6379> PING
Could not connect to Redis at 127.0.0.1:6379: Connection refused

Redis Quit 命令用于关闭与当前客户端与redis服务的连接。

一旦所有等待中的回复(如果有的话)顺利写入到客户端,连接就会被关闭。

语法

redis Quit 命令基本语法如下:

redis 127.0.0.1:6379> QUIT 

可用版本

>= 1.0.0

返回值

总是返回 OK 。

实例

redis 127.0.0.1:6379> QUIT
OK

Redis Select 命令用于切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值。

语法

redis Select 命令基本语法如下:

redis 127.0.0.1:6379> SELECT index 

可用版本

>= 1.0.0

返回值

总是返回 OK 。

实例

redis 127.0.0.1:6379> SET db_number 0         # 默认使用 0 号数据库
OK
 
redis 127.0.0.1:6379> SELECT 1                # 使用 1 号数据库
OK
 
redis 127.0.0.1:6379[1]> GET db_number        # 已经切换到 1 号数据库,注意 Redis 现在的命令提示符多了个 [1]
(nil)
 
redis 127.0.0.1:6379[1]> SET db_number 1
OK
 
redis 127.0.0.1:6379[1]> GET db_number
"1"
 
redis 127.0.0.1:6379[1]> SELECT 3             # 再切换到 3 号数据库
OK
 
redis 127.0.0.1:6379[3]>                      # 提示符从 [1] 改变成了 [3]

 

 

 

 

 

 

 

Redis 服务器

Redis 服务器命令主要是用于管理 redis 服务。

实例

以下实例演示了如何获取 redis 服务器的统计信息:

redis 127.0.0.1:6379> INFO
 
# Server
redis_version:2.8.13
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:c2238b38b1edb0e2
redis_mode:standalone
os:Linux 3.5.0-48-generic x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.7.2
process_id:3856
run_id:0e61abd297771de3fe812a3c21027732ac9f41fe
tcp_port:6379
uptime_in_seconds:11554
uptime_in_days:0
hz:10
lru_clock:16651447
config_file:
 
# Clients
connected_clients:1
client-longest_output_list:0
client-biggest_input_buf:0
blocked_clients:0
 
# Memory
used_memory:589016
used_memory_human:575.21K
used_memory_rss:2461696
used_memory_peak:667312
used_memory_peak_human:651.67K
used_memory_lua:33792
mem_fragmentation_ratio:4.18
mem_allocator:jemalloc-3.6.0
 
# Persistence
loading:0
rdb_changes_since_last_save:3
rdb_bgsave_in_progress:0
rdb_last_save_time:1409158561
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
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:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
 
# Stats
total_connections_received:24
total_commands_processed:294
instantaneous_ops_per_sec:0
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:41
keyspace_misses:82
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:264
 
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
 
# CPU
used_cpu_sys:10.49
used_cpu_user:4.96
used_cpu_sys_children:0.00
used_cpu_user_children:0.01
 
# Keyspace
db0:keys=94,expires=1,avg_ttl=41638810
db1:keys=1,expires=0,avg_ttl=0
db3:keys=1,expires=0,avg_ttl=0

Redis 服务器命令

下表列出了 redis 服务器的相关命令:

序号

命令及描述

1

BGREWRITEAOF 
异步执行一个 AOF(AppendOnly File) 文件重写操作

2

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

3

CLIENT KILL [ip:port] [ID client-id] 
关闭客户端连接

4

CLIENT LIST 
获取连接到服务器的客户端连接列表

5

CLIENT GETNAME 
获取连接的名称

6

CLIENT PAUSE timeout 
在指定时间内终止运行来自客户端的命令

7

CLIENT SETNAME connection-name 
设置当前连接的名称

8

CLUSTER SLOTS 
获取集群节点的映射数组

9

COMMAND 
获取 Redis 命令详情数组

10

COMMAND COUNT 
获取 Redis 命令总数

11

COMMAND GETKEYS 
获取给定命令的所有键

12

TIME 
返回当前服务器时间

13

COMMAND INFO command-name [command-name ...] 
获取指定 Redis 命令描述的数组

14

CONFIG GET parameter 
获取指定配置参数的值

15

CONFIG REWRITE 
对启动 Redis 服务器时所指定的 redis.conf 配置文件进行改写

16

CONFIG SET parameter value 
修改 redis 配置参数,无需重启

17

CONFIG RESETSTAT 
重置 INFO 命令中的某些统计数据

18

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

19

DEBUG OBJECT key 
获取 key 的调试信息

20

DEBUG SEGFAULT 
让 Redis 服务崩溃

21

FLUSHALL 
删除所有数据库的所有key

22

FLUSHDB 
删除当前数据库的所有key

23

INFO [section] 
获取 Redis 服务器的各种信息和统计数值

24

LASTSAVE 
返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示

25

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

26

ROLE 
返回主从实例所属的角色

27

SAVE 
异步保存数据到硬盘

28

SHUTDOWN [NOSAVE] [SAVE] 
异步保存数据到硬盘,并关闭服务器

29

SLAVEOF host port 
将当前服务器转变为指定服务器的从属服务器(slave server)

30

SLOWLOG subcommand [argument] 
管理 redis 的慢日志

31

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

Redis Bgrewriteaof 命令用于异步执行一个 AOF(AppendOnly File) 文件重写操作。重写会创建一个当前 AOF 文件的体积优化版本。

即使 Bgrewriteaof 执行失败,也不会有任何数据丢失,因为旧的 AOF 文件在 Bgrewriteaof 成功之前不会被修改。

注意:从 Redis 2.4 开始, AOF 重写由 Redis 自行触发, BGREWRITEAOF 仅仅用于手动触发重写操作。

语法

redis Bgrewriteaof 命令基本语法如下:

redis 127.0.0.1:6379> BGREWRITEAOF 

可用版本

>= 1.0.0

返回值

反馈信息。

实例

redis 127.0.0.1:6379>
Background append only file rewriting started

Redis Bgsave 命令用于在后台异步保存当前数据库的数据到磁盘。

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

语法

redis Bgsave 命令基本语法如下:

redis 127.0.0.1:6379> BGSAVE

可用版本

>= 1.0.0

返回值

反馈信息。

实例

redis> BGSAVE
Background saving started

Redis Client Kill 命令用于关闭客户端连接。

语法

redis Client Kill 命令基本语法如下:

redis 127.0.0.1:6379> CLIENT KILL ip:port

可用版本

>= 2.4.0

返回值

成功关闭时,返回 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

Redis Client List 命令用于返回所有连接到服务器的客户端信息和统计数据。

语法

redis Client List 命令基本语法如下:

redis 127.0.0.1:6379> CLIENT LIST

可用版本

>= 2.4.0

返回值

命令返回多行字符串,这些字符串按以下形式被格式化:

·       每个已连接客户端对应一行(以 LF 分割)

·       每行字符串由一系列 属性=值 形式的域组成,每个域之间以空格分开

以下是域的含义:

·       addr : 客户端的地址和端口

·       fd : 套接字所使用的文件描述符

·       age : 以秒计算的已连接时长

·       idle : 以秒计算的空闲时长

·       flags : 客户端 flag

·       db : 该客户端正在使用的数据库 ID

·       sub : 已订阅频道的数量

·       psub : 已订阅模式的数量

·       multi : 在事务中被执行的命令数量

·       qbuf : 查询缓冲区的长度(字节为单位, 0 表示没有分配查询缓冲区)

·       qbuf-free : 查询缓冲区剩余空间的长度(字节为单位, 0 表示没有剩余空间)

·       obl : 输出缓冲区的长度(字节为单位, 0 表示没有分配输出缓冲区)

·       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)

实例

redis 127.0.0.1:6379> 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

 

Redis Client Getname 命令用于返回 CLIENT SETNAME 命令为连接设置的名字。 因为新创建的连接默认是没有名字的,对于没有名字的连接, CLIENT GETNAME 返回空白回复。

语法

redis Client Getname 命令基本语法如下:

redis 127.0.0.1:6379> CLIENT GETNAME

可用版本

>= 2.6.9

返回值

如果连接没有设置名字,那么返回空白回复; 如果有设置名字,那么返回名字。

实例

# 新连接默认没有名字
 
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 Client Pause 命令用于阻塞客户端命令一段时间(以毫秒计)。

语法

redis Client Pause 命令基本语法如下:

redis 127.0.0.1:6379> CLIENT PAUSE timeout 

可用版本

>= 2.9.50

返回值

返回 OK。如果 timeout 参数是非法的返回错误。


 

Redis Client Setname 命令用于指定当前连接的名称。

这个名字会显示在 CLIENT LIST 命令的结果中, 用于识别当前正在与服务器进行连接的客户端。

语法

redis Client Setname 命令基本语法如下:

redis 127.0.0.1:6379> CLIENT SETNAME connection-name

可用版本

>= 2.6.9

返回值

设置成功时返回 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)

 

Redis Client Slots 命令用于当前的集群状态,以数组形式展示。

语法

redis Client Slots 命令基本语法如下:

redis 127.0.0.1:6379> CLUSTER SLOTS 

可用版本

>= 3.0.0

返回值

IP/端口嵌套的列表数组。

实例

redis 127.0.0.1:6379> cluster slots
1) 1) (integer) 0
   2) (integer) 4095
   3) 1) "127.0.0.1"
      2) (integer) 7000
   4) 1) "127.0.0.1"
      2) (integer) 7004
2) 1) (integer) 12288
   2) (integer) 16383
   3) 1) "127.0.0.1"
      2) (integer) 7003
   4) 1) "127.0.0.1"
      2) (integer) 7007
3) 1) (integer) 4096
   2) (integer) 8191
   3) 1) "127.0.0.1"
      2) (integer) 7001
   4) 1) "127.0.0.1"
      2) (integer) 7005
4) 1) (integer) 8192
   2) (integer) 12287
   3) 1) "127.0.0.1"
      2) (integer) 7002
   4) 1) "127.0.0.1"
      2) (integer) 7006

 

Redis Command 命令用于返回所有的Redis命令的详细信息,以数组形式展示。

语法

redis Command 命令基本语法如下:

redis 127.0.0.1:6379> COMMAND  

可用版本

>= 2.8.13

返回值

嵌套的Redis命令的详细信息列表。列表顺序是随机的。

实例

redis 127.0.0.1:6379> COMMAND
1) 1) "pfcount"
     2) (integer) -2
     3) 1) write
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
  2) 1) "command"
     2) (integer) 0
     3) 1) readonly
        2) loading
        3) stale
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
  3) 1) "zscan"
     2) (integer) -3
     3) 1) readonly
        2) random
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
  4) 1) "echo"
     2) (integer) 2
     3) 1) readonly
        2) fast
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
  5) 1) "select"
     2) (integer) 2
     3) 1) readonly
        2) loading
        3) fast
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
  6) 1) "zcount"
     2) (integer) 4
     3) 1) readonly
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
  7) 1) "substr"
     2) (integer) 4
     3) 1) readonly
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
  8) 1) "pttl"
     2) (integer) 2
     3) 1) readonly
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
  9) 1) "hincrbyfloat"
     2) (integer) 4
     3) 1) write
        2) denyoom
        3) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 10) 1) "hlen"
     2) (integer) 2
     3) 1) readonly
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 11) 1) "incrby"
     2) (integer) 3
     3) 1) write
        2) denyoom
        3) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 12) 1) "setex"
     2) (integer) 4
     3) 1) write
        2) denyoom
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 13) 1) "persist"
     2) (integer) 2
     3) 1) write
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 14) 1) "setbit"
     2) (integer) 4
     3) 1) write
        2) denyoom
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 15) 1) "info"
     2) (integer) -1
     3) 1) readonly
        2) loading
        3) stale
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 16) 1) "scard"
     2) (integer) 2
     3) 1) readonly
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 17) 1) "srandmember"
     2) (integer) -2
     3) 1) readonly
        2) random
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 18) 1) "lrem"
     2) (integer) 4
     3) 1) write
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 19) 1) "append"
     2) (integer) 3
     3) 1) write
        2) denyoom
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 20) 1) "hgetall"
     2) (integer) 2
     3) 1) readonly
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 21) 1) "zincrby"
     2) (integer) 4
     3) 1) write
        2) denyoom
        3) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 22) 1) "rpop"
     2) (integer) 2
     3) 1) write
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 23) 1) "cluster"
     2) (integer) -2
     3) 1) readonly
        2) admin
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 24) 1) "ltrim"
     2) (integer) 4
     3) 1) write
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 25) 1) "flushdb"
     2) (integer) 1
     3) 1) write
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 26) 1) "rpoplpush"
     2) (integer) 3
     3) 1) write
        2) denyoom
     4) (integer) 1
     5) (integer) 2
     6) (integer) 1
 27) 1) "expire"
     2) (integer) 3
     3) 1) write
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 28) 1) "psync"
     2) (integer) 3
     3) 1) readonly
        2) admin
        3) noscript
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 29) 1) "zremrangebylex"
     2) (integer) 4
     3) 1) write
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 30) 1) "pubsub"
     2) (integer) -2
     3) 1) readonly
        2) pubsub
        3) random
        4) loading
        5) stale
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 31) 1) "setnx"
     2) (integer) 3
     3) 1) write
        2) denyoom
        3) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 32) 1) "pexpireat"
     2) (integer) 3
     3) 1) write
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 33) 1) "psubscribe"
     2) (integer) -2
     3) 1) readonly
        2) pubsub
        3) noscript
        4) loading
        5) stale
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 34) 1) "zrevrange"
     2) (integer) -4
     3) 1) readonly
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 35) 1) "hmget"
     2) (integer) -3
     3) 1) readonly
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 36) 1) "object"
     2) (integer) -2
     3) 1) readonly
     4) (integer) 2
     5) (integer) 2
     6) (integer) 2
 37) 1) "watch"
     2) (integer) -2
     3) 1) readonly
        2) noscript
        3) fast
     4) (integer) 1
     5) (integer) -1
     6) (integer) 1
 38) 1) "setrange"
     2) (integer) 4
     3) 1) write
        2) denyoom
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 39) 1) "sdiffstore"
     2) (integer) -3
     3) 1) write
        2) denyoom
     4) (integer) 1
     5) (integer) -1
     6) (integer) 1
 40) 1) "flushall"
     2) (integer) 1
     3) 1) write
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 41) 1) "sadd"
     2) (integer) -3
     3) 1) write
        2) denyoom
        3) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 42) 1) "renamenx"
     2) (integer) 3
     3) 1) write
        2) fast
     4) (integer) 1
     5) (integer) 2
     6) (integer) 1
 43) 1) "zrangebyscore"
     2) (integer) -4
     3) 1) readonly
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 44) 1) "bitop"
     2) (integer) -4
     3) 1) write
        2) denyoom
     4) (integer) 2
     5) (integer) -1
     6) (integer) 1
 45) 1) "get"
     2) (integer) 2
     3) 1) readonly
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 46) 1) "hmset"
     2) (integer) -4
     3) 1) write
        2) denyoom
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 47) 1) "type"
     2) (integer) 2
     3) 1) readonly
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 48) 1) "evalsha"
     2) (integer) -3
     3) 1) noscript
        2) movablekeys
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 49) 1) "zrevrangebyscore"
     2) (integer) -4
     3) 1) readonly
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 50) 1) "set"
     2) (integer) -3
     3) 1) write
        2) denyoom
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 51) 1) "getset"
     2) (integer) 3
     3) 1) write
        2) denyoom
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 52) 1) "punsubscribe"
     2) (integer) -1
     3) 1) readonly
        2) pubsub
        3) noscript
        4) loading
        5) stale
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 53) 1) "publish"
     2) (integer) 3
     3) 1) readonly
        2) pubsub
        3) loading
        4) stale
        5) fast
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 54) 1) "lset"
     2) (integer) 4
     3) 1) write
        2) denyoom
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 55) 1) "rename"
     2) (integer) 3
     3) 1) write
     4) (integer) 1
     5) (integer) 2
     6) (integer) 1
 56) 1) "bgsave"
     2) (integer) 1
     3) 1) readonly
        2) admin
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 57) 1) "decrby"
     2) (integer) 3
     3) 1) write
        2) denyoom
        3) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 58) 1) "sunion"
     2) (integer) -2
     3) 1) readonly
        2) sort_for_script
     4) (integer) 1
     5) (integer) -1
     6) (integer) 1
 59) 1) "blpop"
     2) (integer) -3
     3) 1) write
        2) noscript
     4) (integer) 1
     5) (integer) -2
     6) (integer) 1
 60) 1) "zrem"
     2) (integer) -3
     3) 1) write
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 61) 1) "readonly"
     2) (integer) 1
     3) 1) readonly
        2) fast
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 62) 1) "exists"
     2) (integer) 2
     3) 1) readonly
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 63) 1) "linsert"
     2) (integer) 5
     3) 1) write
        2) denyoom
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 64) 1) "lindex"
     2) (integer) 3
     3) 1) readonly
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 65) 1) "scan"
     2) (integer) -2
     3) 1) readonly
        2) random
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 66) 1) "migrate"
     2) (integer) -6
     3) 1) write
        2) admin
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 67) 1) "ping"
     2) (integer) 1
     3) 1) readonly
        2) stale
        3) fast
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 68) 1) "zunionstore"
     2) (integer) -4
     3) 1) write
        2) denyoom
        3) movablekeys
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 69) 1) "latency"
     2) (integer) -2
     3) 1) readonly
        2) admin
        3) noscript
        4) loading
        5) stale
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 70) 1) "role"
     2) (integer) 1
     3) 1) admin
        2) noscript
        3) loading
        4) stale
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 71) 1) "ttl"
     2) (integer) 2
     3) 1) readonly
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 72) 1) "del"
     2) (integer) -2
     3) 1) write
     4) (integer) 1
     5) (integer) -1
     6) (integer) 1
 73) 1) "wait"
     2) (integer) 3
     3) 1) readonly
        2) noscript
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 74) 1) "zscore"
     2) (integer) 3
     3) 1) readonly
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 75) 1) "zrevrangebylex"
     2) (integer) -4
     3) 1) readonly
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 76) 1) "sscan"
     2) (integer) -3
     3) 1) readonly
        2) random
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 77) 1) "incrbyfloat"
     2) (integer) 3
     3) 1) write
        2) denyoom
        3) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 78) 1) "decr"
     2) (integer) 2
     3) 1) write
        2) denyoom
        3) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 79) 1) "getbit"
     2) (integer) 3
     3) 1) readonly
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 80) 1) "spop"
     2) (integer) 2
     3) 1) write
        2) noscript
        3) random
        4) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 81) 1) "hkeys"
     2) (integer) 2
     3) 1) readonly
        2) sort_for_script
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 82) 1) "pfmerge"
     2) (integer) -2
     3) 1) write
        2) denyoom
     4) (integer) 1
     5) (integer) -1
     6) (integer) 1
 83) 1) "zrange"
     2) (integer) -4
     3) 1) readonly
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 84) 1) "monitor"
     2) (integer) 1
     3) 1) readonly
        2) admin
        3) noscript
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 85) 1) "zinterstore"
     2) (integer) -4
     3) 1) write
        2) denyoom
        3) movablekeys
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 86) 1) "rpushx"
     2) (integer) 3
     3) 1) write
        2) denyoom
        3) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 87) 1) "llen"
     2) (integer) 2
     3) 1) readonly
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 88) 1) "hincrby"
     2) (integer) 4
     3) 1) write
        2) denyoom
        3) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 89) 1) "save"
     2) (integer) 1
     3) 1) readonly
        2) admin
        3) noscript
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 90) 1) "zremrangebyrank"
     2) (integer) 4
     3) 1) write
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 91) 1) "auth"
     2) (integer) 2
     3) 1) readonly
        2) noscript
        3) loading
        4) stale
        5) fast
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 92) 1) "zcard"
     2) (integer) 2
     3) 1) readonly
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 93) 1) "psetex"
     2) (integer) 4
     3) 1) write
        2) denyoom
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 94) 1) "shutdown"
     2) (integer) -1
     3) 1) readonly
        2) admin
        3) loading
        4) stale
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 95) 1) "sync"
     2) (integer) 1
     3) 1) readonly
        2) admin
        3) noscript
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 96) 1) "dbsize"
     2) (integer) 1
     3) 1) readonly
        2) fast
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 97) 1) "expireat"
     2) (integer) 3
     3) 1) write
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
 98) 1) "subscribe"
     2) (integer) -2
     3) 1) readonly
        2) pubsub
        3) noscript
        4) loading
        5) stale
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
 99) 1) "brpop"
     2) (integer) -3
     3) 1) write
        2) noscript
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
100) 1) "sort"
     2) (integer) -2
     3) 1) write
        2) denyoom
        3) movablekeys
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
101) 1) "sunionstore"
     2) (integer) -3
     3) 1) write
        2) denyoom
     4) (integer) 1
     5) (integer) -1
     6) (integer) 1
102) 1) "zrangebylex"
     2) (integer) -4
     3) 1) readonly
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
103) 1) "zlexcount"
     2) (integer) 4
     3) 1) readonly
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
104) 1) "lpush"
     2) (integer) -3
     3) 1) write
        2) denyoom
        3) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
105) 1) "incr"
     2) (integer) 2
     3) 1) write
        2) denyoom
        3) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
106) 1) "mget"
     2) (integer) -2
     3) 1) readonly
     4) (integer) 1
     5) (integer) -1
     6) (integer) 1
107) 1) "getrange"
     2) (integer) 4
     3) 1) readonly
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
108) 1) "slaveof"
     2) (integer) 3
     3) 1) admin
        2) noscript
        3) stale
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
109) 1) "bitpos"
     2) (integer) -3
     3) 1) readonly
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
110) 1) "rpush"
     2) (integer) -3
     3) 1) write
        2) denyoom
        3) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
111) 1) "config"
     2) (integer) -2
     3) 1) readonly
        2) admin
        3) stale
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
112) 1) "srem"
     2) (integer) -3
     3) 1) write
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
113) 1) "mset"
     2) (integer) -3
     3) 1) write
        2) denyoom
     4) (integer) 1
     5) (integer) -1
     6) (integer) 2
114) 1) "lrange"
     2) (integer) 4
     3) 1) readonly
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
115) 1) "replconf"
     2) (integer) -1
     3) 1) readonly
        2) admin
        3) noscript
        4) loading
        5) stale
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
116) 1) "hsetnx"
     2) (integer) 4
     3) 1) write
        2) denyoom
        3) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
117) 1) "discard"
     2) (integer) 1
     3) 1) readonly
        2) noscript
        3) fast
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
118) 1) "pexpire"
     2) (integer) 3
     3) 1) write
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
119) 1) "pfdebug"
     2) (integer) -3
     3) 1) write
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
120) 1) "asking"
     2) (integer) 1
     3) 1) readonly
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
121) 1) "client"
     2) (integer) -2
     3) 1) readonly
        2) admin
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
122) 1) "pfselftest"
     2) (integer) 1
     3) 1) readonly
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
123) 1) "bgrewriteaof"
     2) (integer) 1
     3) 1) readonly
        2) admin
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
124) 1) "zremrangebyscore"
     2) (integer) 4
     3) 1) write
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
125) 1) "sinterstore"
     2) (integer) -3
     3) 1) write
        2) denyoom
     4) (integer) 1
     5) (integer) -1
     6) (integer) 1
126) 1) "lpushx"
     2) (integer) 3
     3) 1) write
        2) denyoom
        3) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
127) 1) "restore"
     2) (integer) -4
     3) 1) write
        2) denyoom
        3) admin
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
128) 1) "unsubscribe"
     2) (integer) -1
     3) 1) readonly
        2) pubsub
        3) noscript
        4) loading
        5) stale
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
129) 1) "zrank"
     2) (integer) 3
     3) 1) readonly
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
130) 1) "readwrite"
     2) (integer) 1
     3) 1) readonly
        2) fast
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
131) 1) "hget"
     2) (integer) 3
     3) 1) readonly
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
132) 1) "bitcount"
     2) (integer) -2
     3) 1) readonly
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
133) 1) "randomkey"
     2) (integer) 1
     3) 1) readonly
        2) random
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
134) 1) "restore-asking"
     2) (integer) -4
     3) 1) write
        2) denyoom
        3) admin
        4) asking
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
135) 1) "time"
     2) (integer) 1
     3) 1) readonly
        2) random
        3) fast
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
136) 1) "zrevrank"
     2) (integer) 3
     3) 1) readonly
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
137) 1) "hset"
     2) (integer) 4
     3) 1) write
        2) denyoom
        3) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
138) 1) "sinter"
     2) (integer) -2
     3) 1) readonly
        2) sort_for_script
     4) (integer) 1
     5) (integer) -1
     6) (integer) 1
139) 1) "dump"
     2) (integer) 2
     3) 1) readonly
        2) admin
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
140) 1) "move"
     2) (integer) 3
     3) 1) write
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
141) 1) "strlen"
     2) (integer) 2
     3) 1) readonly
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
142) 1) "unwatch"
     2) (integer) 1
     3) 1) readonly
        2) noscript
        3) fast
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
143) 1) "lpop"
     2) (integer) 2
     3) 1) write
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
144) 1) "smembers"
     2) (integer) 2
     3) 1) readonly
        2) sort_for_script
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
145) 1) "msetnx"
     2) (integer) -3
     3) 1) write
        2) denyoom
     4) (integer) 1
     5) (integer) -1
     6) (integer) 2
146) 1) "pfadd"
     2) (integer) -2
     3) 1) write
        2) denyoom
        3) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
147) 1) "zadd"
     2) (integer) -4
     3) 1) write
        2) denyoom
        3) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
148) 1) "lastsave"
     2) (integer) 1
     3) 1) readonly
        2) random
        3) fast
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
149) 1) "exec"
     2) (integer) 1
     3) 1) noscript
        2) skip_monitor
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
150) 1) "sismember"
     2) (integer) 3
     3) 1) readonly
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
151) 1) "debug"
     2) (integer) -2
     3) 1) admin
        2) noscript
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
152) 1) "slowlog"
     2) (integer) -2
     3) 1) readonly
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
153) 1) "hexists"
     2) (integer) 3
     3) 1) readonly
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
154) 1) "eval"
     2) (integer) -3
     3) 1) noscript
        2) movablekeys
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
155) 1) "smove"
     2) (integer) 4
     3) 1) write
        2) fast
     4) (integer) 1
     5) (integer) 2
     6) (integer) 1
156) 1) "multi"
     2) (integer) 1
     3) 1) readonly
        2) noscript
        3) fast
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
157) 1) "sdiff"
     2) (integer) -2
     3) 1) readonly
        2) sort_for_script
     4) (integer) 1
     5) (integer) -1
     6) (integer) 1
158) 1) "hscan"
     2) (integer) -3
     3) 1) readonly
        2) random
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
159) 1) "brpoplpush"
     2) (integer) 4
     3) 1) write
        2) denyoom
        3) noscript
     4) (integer) 1
     5) (integer) 2
     6) (integer) 1
160) 1) "script"
     2) (integer) -2
     3) 1) readonly
        2) admin
        3) noscript
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
161) 1) "keys"
     2) (integer) 2
     3) 1) readonly
        2) sort_for_script
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
162) 1) "hdel"
     2) (integer) -3
     3) 1) write
        2) fast
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1
163) 1) "hvals"
     2) (integer) 2
     3) 1) readonly
        2) sort_for_script
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1

 

Redis Command Count 命令用于统计 redis 命令的个数。

语法

redis Command Count 命令基本语法如下:

redis 127.0.0.1:6379> COMMAND COUNT

可用版本

>= 2.8.13

返回值

redis 命令数。

实例

redis 127.0.0.1:6379> COMMAND COUNT
(integer) 163

 

Redis Command Getkeys 命令用于获取所有 key。

语法

redis Command Getkeys 命令基本语法如下:

redis 127.0.0.1:6379> COMMAND GETKEYS

可用版本

>= 2.8.13

返回值

key 的列表。

实例

redis 127.0.0.1:6379> COMMAND GETKEYS MSET a b c d e f 
1) "a"
2) "c"
3) "e"

 

Redis Time 命令用于返回当前服务器时间。

语法

redis Time 命令基本语法如下:

redis 127.0.0.1:6379> TIME 

可用版本

>= 2.6.0

返回值

一个包含两个字符串的列表: 第一个字符串是当前时间(以 UNIX 时间戳格式表示),而第二个字符串是当前这一秒钟已经逝去的微秒数。

实例

redis 127.0.0.1:6379> TIME 
1) "1410856598"
2) "928370"

 

Redis Command Info 命令用于获取 redis 命令的描述信息。

语法

redis Command Info 命令基本语法如下:

redis 127.0.0.1:6379> COMMAND INFO command-name [command-name ...] 

可用版本

>= 2.8.13

返回值

命令描述信息的嵌套列表。

实例

redis 127.0.0.1:6379> COMMAND INFO get set eval 
1) 1) "get"
   2) (integer) 2
   3) 1) readonly
      2) fast
   4) (integer) 1
   5) (integer) 1
   6) (integer) 1
2) 1) "set"
   2) (integer) -3
   3) 1) write
      2) denyoom
   4) (integer) 1
   5) (integer) 1
   6) (integer) 1
3) 1) "eval"
   2) (integer) -3
   3) 1) noscript
      2) movablekeys
   4) (integer) 0
   5) (integer) 0
   6) (integer) 0
redis> COMMAND INFO foo evalsha config bar
1) (nil)
2) 1) "evalsha"
   2) (integer) -3
   3) 1) noscript
      2) movablekeys
   4) (integer) 0
   5) (integer) 0
   6) (integer) 0
3) 1) "config"
   2) (integer) -2
   3) 1) readonly
      2) admin
      3) stale
   4) (integer) 0
   5) (integer) 0
   6) (integer) 0
4) (nil)

 

Redis Config Get 命令用于获取 redis 服务的配置参数。

在 Redis 2.4 版本中, 有部分参数没有办法用 CONFIG GET 访问,但是在最新的 Redis 2.6 版本中,所有配置参数都已经可以用 CONFIG GET 访问了。

语法

redis Config Get 命令基本语法如下:

redis 127.0.0.1:6379> CONFIG GET parameter

可用版本

>= 2.0.0

返回值

给定配置参数的值。

实例

redis 127.0.0.1:6379> 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"

 

Redis Config rewrite 命令对启动 Redis 服务器时所指定的redis.conf 配置文件进行改写。

CONFIG SET 命令可以对服务器的当前配置进行修改, 而修改后的配置可能和 redis.conf 文件中所描述的配置不一样, CONFIG REWRITE 的作用就是通过尽可能少的修改,将服务器当前所使用的配置记录到 redis.conf 文件中。

语法

redis Config rewrite 命令基本语法如下:

redis 127.0.0.1:6379> CONFIG REWRITE parameter

可用版本

>= 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
 
# ... 其他选项

 

Redis Config Set 命令可以动态地调整 Redis 服务器的配置(configuration)而无须重启。

你可以使用它修改配置参数,或者改变 Redis 的持久化(Persistence)方式。

语法

redis Config Set 命令基本语法如下:

redis 127.0.0.1:6379> CONFIG Set parameter value 

可用版本

>= 2.0.0

返回值

当设置成功时返回 OK ,否则返回一个错误。

实例

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

 

Redis Config Resetstat 命令用于重置 INFO 命令中的某些统计数据,包括:

·       Keyspacehits (键空间命中次数)

·       Keyspacemisses (键空间不命中次数)

·       Number ofcommands processed (执行命令的次数)

·       Number ofconnections received (连接服务器的次数)

·       Number ofexpired keys (过期key的数量)

·       Number ofrejected connections (被拒绝的连接数量)

·       Latestfork(2) time(最后执行 fork(2) 的时间)

·       The aof_delayed_fsync counter(aof_delayed_fsync 计数器的值)

语法

redis Config Resetstat 命令基本语法如下:

redis 127.0.0.1:6379> CONFIG RESETSTAT

可用版本

>= 2.0.0

返回值

总是返回 OK 。

实例

重置前 INFO 命令输出信息:

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:1205426
 
# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
 
# Memory
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.5
 
# Persistence
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:0
 
# Stats
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:0
 
# Replication
role:master
connected_slaves:0
 
# CPU
used_cpu_sys:0.01
used_cpu_user:0.00
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
 
# Keyspace
db0:keys=20,expires=0
 
 
<p>执行重置命令:</p>
<pre>
redis 127.0.0.1:6379> CONFIG RESETSTAT
OK

重置后查看 INFO 命令输出信息:

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:134
uptime_in_days:0
lru_clock:1205438
 
# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
 
# Memory
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.5
 
# Persistence
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:0
 
# Stats
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:0
 
# Replication
role:master
connected_slaves:0
 
# CPU
used_cpu_sys:0.05
used_cpu_user:0.02
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
 
# Keyspace
db0:keys=20,expires=0

 

Redis Dbsize 命令用于返回当前数据库的 key 的数量。

语法

redis DBSIZE 命令基本语法如下:

redis 127.0.0.1:6379> DBSIZE

可用版本

>= 1.0.0

返回值

当前数据库的 key 的数量。

实例

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

 

Redis Debug Object 命令是一个调试命令,它不应被客户端所使用。

语法

redis Debug Object 命令基本语法如下:

redis 127.0.0.1:6379> DEBUG OBJECT key

可用版本

>= 1.0.0

返回值

当 key 存在时,返回有关信息。 当key 不存在时,返回一个错误。

实例

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

 

Redis Debug Segfault 命令执行一个非法的内存访问从而让 Redis 崩溃,仅在开发时用于 BUG 调试。

语法

redis Debug Segfault 命令基本语法如下:

redis 127.0.0.1:6379> DEBUG SEGFAULT 

可用版本

>= 1.0.0

返回值

实例

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

 

Redis Flushall 命令用于清空整个 Redis 服务器的数据(删除所有数据库的所有 key )。

语法

redis Flushall 命令基本语法如下:

redis 127.0.0.1:6379> FLUSHALL 

可用版本

>= 1.0.0

返回值

总是返回 OK 。

实例

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

 

Redis Flushdb 命令用于清空当前数据库中的所有 key。

语法

redis Flushdb 命令基本语法如下:

redis 127.0.0.1:6379> FLUSHDB 

可用版本

>= 1.0.0

返回值

总是返回 OK 。

实例

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

 

Redis Info 命令以一种易于理解和阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。

通过给定可选的参数 section ,可以让命令只返回某一部分的信息:

·           

server : 一般Redis 服务器信息,包含以下域:

·           

o  redis_version: Redis 服务器版本

o  redis_git_sha1: Git SHA1

o  redis_git_dirty: Git dirty flag

o  os : Redis服务器的宿主操作系统

o  arch_bits: 架构(32 或64 位)

o  multiplexing_api: Redis 所使用的事件处理机制

o  gcc_version: 编译 Redis 时所使用的 GCC 版本

o  process_id: 服务器进程的 PID

o  run_id :Redis 服务器的随机标识符(用于 Sentinel 和集群)

o  tcp_port :TCP/IP 监听端口

o  uptime_in_seconds: 自 Redis 服务器启动以来,经过的秒数

o  uptime_in_days: 自 Redis 服务器启动以来,经过的天数

o  lru_clock: 以分钟为单位进行自增的时钟,用于 LRU 管理

·           

clients : 已连接客户端信息,包含以下域:

·           

o  connected_clients: 已连接客户端的数量(不包括通过从属服务器连接的客户端)

o  client_longest_output_list: 当前连接的客户端当中,最长的输出列表

o  client_longest_input_buf: 当前连接的客户端当中,最大输入缓存

o  blocked_clients: 正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量

·           

memory : 内存信息,包含以下域:

·           

o  used_memory: 由 Redis 分配器分配的内存总量,以字节(byte)为单位

o  used_memory_human: 以人类可读的格式返回 Redis 分配的内存总量

o  used_memory_rss: 从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps 等命令的输出一致。

o  used_memory_peak: Redis 的内存消耗峰值(以字节为单位)

o  used_memory_peak_human: 以人类可读的格式返回 Redis 的内存消耗峰值

o  used_memory_lua: Lua 引擎所使用的内存大小(以字节为单位)

o  mem_fragmentation_ratio: used_memory_rss 和used_memory 之间的比率

o  mem_allocator: 在编译时指定的, Redis 所使用的内存分配器。可以是 libc 、 jemalloc 或者tcmalloc 。

在理想情况下,used_memory_rss 的值应该只比 used_memory 稍微高一点儿。

当 rss > used ,且两者的值相差较大时,表示存在(内部或外部的)内存碎片。

内存碎片的比率可以通过 mem_fragmentation_ratio 的值看出。

当 used > rss 时,表示 Redis 的部分内存被操作系统换出到交换空间了,在这种情况下,操作可能会产生明显的延迟。

当 Redis 释放内存时,分配器可能会,也可能不会,将内存返还给操作系统。

如果 Redis 释放了内存,却没有将内存返还给操作系统,那么 used_memory 的值可能和操作系统显示的 Redis 内存占用并不一致。

查看 used_memory_peak 的值可以验证这种情况是否发生。

·           

persistence : RDB 和 AOF 的相关信息

·           

·           

stats : 一般统计信息

·           

·           

replication : 主/从复制信息

·           

·           

cpu : CPU 计算量统计信息

·           

·           

commandstats : Redis 命令统计信息

·           

·           

cluster : Redis 集群信息

·           

·           

keyspace : 数据库相关的统计信息

·           

语法

redis Info 命令基本语法如下:

redis 127.0.0.1:6379> INFO [section] 

可用版本

>= 1.0.0

返回值

字符串,文本行的集合。

实例

redis 127.0.0.1:6379> 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:1680564
 
# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
 
# Memory
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.0
 
# Persistence
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:-1
 
# Stats
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:0
 
# Replication
role:master
connected_slaves:0
 
# CPU
used_cpu_sys:0.03
used_cpu_user:0.01
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
 
# Keyspace

 

Redis Lastsave 命令返回最近一次Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示。

语法

redis Lastsave 命令基本语法如下:

redis 127.0.0.1:6379> LASTSAVE 

可用版本

>= 1.0.0

返回值

字符串,文本行的集合。

实例

redis 127.0.0.1:6379> LASTSAVE 
(integer) 1410853592

 

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

语法

redis Monitor 命令基本语法如下:

redis 127.0.0.1:6379> MONITOR 

可用版本

>= 1.0.0

返回值

总是返回 OK 。

实例

redis 127.0.0.1:6379> MONITOR 
OK
1410855382.370791 [0 127.0.0.1:60581] "info"
1410855404.062722 [0 127.0.0.1:60581] "get" "a"

 

Redis Role 命令查看主从实例所属的角色,角色有master, slave, sentinel。

语法

redis Role 命令基本语法如下:

redis 127.0.0.1:6379> ROLE 

可用版本

>= 2.8.12

返回值

返回一个数组:第一个参数是 master, slave, sentinel 三个中的一个。

实例

redis 127.0.0.1:6379> ROLE 
1) "master"
2) (integer) 0
3) (empty list or set)
redis> 

 

Redis Save 命令执行一个同步保存操作,将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘。

语法

redis Save 命令基本语法如下:

redis 127.0.0.1:6379> SAVE 

可用版本

>= 1.0.0

返回值

保存成功时返回 OK 。

实例

redis 127.0.0.1:6379> SAVE 
OK

 

Redis Shutdown 命令执行以下操作:

·       停止所有客户端

·       如果有至少一个保存点在等待,执行 SAVE 命令

·       如果 AOF 选项被打开,更新 AOF 文件

·       关闭 redis服务器(server)

语法

redis Shutdown 命令基本语法如下:

redis 127.0.0.1:6379> SHUTDOWN [NOSAVE] [SAVE] 

可用版本

>= 1.0.0

返回值

执行失败时返回错误。 执行成功时不返回任何信息,服务器和客户端的连接断开,客户端自动退出。

实例

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

 

 

Redis Slaveof 命令可以将当前服务器转变为指定服务器的从属服务器(slave server)。

如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。

另外,对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。

利用『 SLAVEOF NO ONE 不会丢弃同步所得数据集』这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。

语法

redis Slaveof 命令基本语法如下:

redis 127.0.0.1:6379> SLAVEOF host port  

可用版本

>= 1.0.0

返回值

总是返回 OK 。

实例

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

 

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

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

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

语法

redis Showlog 命令基本语法如下:

redis 127.0.0.1:6379> SLOWLOG subcommand [argument]

可用版本

>= 2.2.12

返回值

取决于不同命令,返回不同的值。

实例

查看日志信息:

redis 127.0.0.1:6379> slowlog get 2
1) 1) (integer) 14
   2) (integer) 1309448221
   3) (integer) 15
   4) 1) "ping"
2) 1) (integer) 13
   2) (integer) 1309448128
   3) (integer) 30
   4) 1) "slowlog"
      2) "get"
      3) "100"

查看当前日志的数量:

redis 127.0.0.1:6379> SLOWLOG LEN
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值