Redis 教程




Redis 教程

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。 Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

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

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

Redis 优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

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

  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
  • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的另一个优点是, 相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。





Redis 安装


Window 下安装

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

image

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

打开一个cmd窗口 使用cd命令切换目录到 C: edis 运行 redis-server.exe redis.conf 

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

Redis 安装

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

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

设置键值对 set myKey abc

取出键值对 get myKey

Redis 安装


windows下Redis的安装和使用


1、要安装Redis,首先要获取安装包。Windows的Redis安装包需要到以下GitHub链接找到。链接:https://github.com/MSOpenTech/redis。打开网站后,找到Release,点击前往下载页面。

 

2、在下载网页中,找到最后发行的版本(此处是3.2.100)。找到Redis-x64-3.2.100.msi和Redis-x64-3.2.100.zip,点击下载。这里说明一下,第一个是msi微软格式的安装包,第二个是压缩包。

3、双击刚下载好的msi格式的安装包(Redis-x64-3.2.100.msi)开始安装。

4、选择“同意协议”,点击下一步继续。

5、选择“添加Redis目录到环境变量PATH中”,这样方便系统自动识别Redis执行文件在哪里。

6、端口号可保持默认的6379,并选择防火墙例外,从而保证外部可以正常访问Redis服务。

7、设定最大值为100M。作为实验和学习,100M足够了。

8、点击安装后,正式的安装过程开始。稍等一会即可完成。

9、安装完毕后,需要先做一些设定工作,以便服务启动后能正常运行。使用文本编辑器,这里使用Notepad++,打开Redis服务配置文件。注意:不要找错了,通常为redis.windows-service.conf,而不是redis.windows.conf。后者是以非系统服务方式启动程序使用的配置文件。

10、找到含有requirepass字样的地方,追加一行,输入requirepass 12345。这是访问Redis时所需的密码,一般测试情况下可以不用设定密码。不过,即使是作为本地访问,也建议设定一个密码。此处以简单的12345来演示。

11、点击“开始”>右击“计算机”>选择“管理”。在左侧栏中依次找到并点击“计算机管理(本地)”>服务和应用程序>服务。再在右侧找到Redis名称的服务,查看启动情况。如未启动,则手动启动之。正常情况下,服务应该正常启动并运行了。

12、最后来测试一下Redis是否正常提供服务。进入Redis的目录,cd C:Program FilesRedis。输入redis-cli并回车。(redis-cli是客户端程序)如图正常提示进入,并显示正确端口号,则表示服务已经启动。

 
13、使用服务前需要先通过密码验证。输入“auth 12345”并回车(12345是之前设定的密码)。返回提示OK表示验证通过。
14、实际测试一下读写。输入set mykey1 "I love you all!”并回车,用来保存一个键值。再输入get mykey1,获取刚才保存的键值。
15、注意事项
  • 1.Windows使用的这个Redis是64位版本的,32位操作系统的同学就不要折腾了。
  • 2.作为服务运行的Redis配置文件,通常为redis.windows-service.conf,而不是redis.windows.conf。小心不要选错了。






Linux 下安装

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

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

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

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

下面启动redis服务.

  1. $ cd src
  2. $ ./redis-server

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

  1. $ cd src
  2. $ ./redis-server redis.conf

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

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

  1. $ cd src
  2. $ ./redis-cli
  3. redis>set foo bar
  4. OK
  5. redis>get foo
  6. "bar"

Ubuntu 下安装

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

  1. $sudo apt-get update
  2. $sudo apt-get install redis-server

启动 Redis

  1. $ redis-server

查看 redis 是否启动?

  1. $ redis-cli

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

  1. redis 127.0.0.1:6379>

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

  1. redis 127.0.0.1:6379> ping
  2. PONG

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



Redis 配置


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

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


语法3

Redis CONFIG 命令格式如下:

  1. redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME

实例

127.0.0.1:6379> config get loglevel
1) "loglevel"
2) "notice"
127.0.0.1:6379>

image


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

实例

127.0.0.1:6379> CONFIG GET *
  1) "dbfilename"
  2) "dump.rdb"
  3) "requirepass"
  4) "123456"
  5) "masterauth"
  6) ""
  7) "unixsocket"
  8) ""
  9) "logfile"
 10) "Logs/redis_log.txt"
 11) "pidfile"
 12) "/var/run/redis.pid"
 13) "maxmemory"
 14) "0"
 15) "maxmemory-samples"
 16) "5"
 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) "10000"
 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) "cluster-node-timeout"
 76) "15000"
 77) "cluster-migration-barrier"
 78) "1"
 79) "cluster-slave-validity-factor"
 80) "10"
 81) "repl-diskless-sync-delay"
 82) "5"
 83) "cluster-require-full-coverage"
 84) "yes"
 85) "no-appendfsync-on-rewrite"
 86) "no"
 87) "slave-serve-stale-data"
 88) "yes"
 89) "slave-read-only"
 90) "yes"
 91) "stop-writes-on-bgsave-error"
 92) "yes"
 93) "daemonize"
 94) "no"
 95) "rdbcompression"
 96) "yes"
 97) "rdbchecksum"
 98) "yes"
 99) "activerehashing"
100) "yes"
101) "repl-disable-tcp-nodelay"
102) "no"
103) "repl-diskless-sync"
104) "no"
105) "aof-rewrite-incremental-fsync"
106) "yes"
107) "aof-load-truncated"
108) "yes"
109) "appendonly"
110) "no"
111) "dir"
112) "I:\Mysql_DataBase\Redis-x64-3.0.504\Redis"
113) "maxmemory-policy"
114) "noeviction"
115) "appendfsync"
116) "everysec"
117) "save"
118) "jd 900 jd 300 jd 60"
119) "loglevel"
120) "notice"
121) "client-output-buffer-limit"
122) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
123) "unixsocketperm"
124) "0"
125) "slaveof"
126) ""
127) "notify-keyspace-events"
128) ""
129) "bind"
130) ""
127.0.0.1:6379>

image










 


编辑配置

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

语法  CONFIG SET 命令基本语法:


  1. redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE

 

实例

image

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



参数说明

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  cmd 访问连接方式

I:Mysql_DataBaseRedis-x64-3.0.504Redis>dir
 驱动器 I 中的卷是 新加卷
 卷的序列号是 A237-7007

 I:Mysql_DataBaseRedis-x64-3.0.504Redis 的目录

2021/05/15  15:22    <DIR>          .
2021/05/15  15:22    <DIR>          ..
2021/05/15  15:22               383 dump.rdb
2016/07/01  15:54             1,024 EventLog.dll
2021/05/07  22:06    <DIR>          Logs
2016/07/01  15:52            12,618 Redis on Windows Release Notes.docx
2016/07/01  15:52            16,769 Redis on Windows.docx
2016/07/01  15:55           406,016 redis-benchmark.exe
2016/07/01  15:55         4,370,432 redis-benchmark.pdb
2016/07/01  15:55           257,024 redis-check-aof.exe
2016/07/01  15:55         3,518,464 redis-check-aof.pdb
2016/07/01  15:55           268,288 redis-check-dump.exe
2016/07/01  15:55         3,485,696 redis-check-dump.pdb
2016/07/01  15:55           482,304 redis-cli.exe
2016/07/01  15:55         4,517,888 redis-cli.pdb
2016/07/01  15:55         1,553,408 redis-server.exe
2016/07/01  15:55         6,909,952 redis-server.pdb
2021/05/07  22:24            43,947 redis.windows-service.conf
2016/07/01  15:52            43,927 redis.windows.conf
2016/07/01  09:17            14,265 Windows Service Documentation.docx
              17 个文件     25,902,405 字节
               3 个目录 3,279,902,744,576 可用字节

I:Mysql_DataBaseRedis-x64-3.0.504Redis>redis-cli -h 127.0.0.1 -p 6379 -a "123456"

image



 

Redis 数据类型


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


String(字符串)

string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。string类型是Redis最基本的数据类型,一个键最大能存储512MB。

实例

image

127.0.0.1:6379> set name "alan.com"
OK
127.0.0.1:6379> get name
"alan.com"
127.0.0.1:6379>

在以上实例中我们使用了 Redis 的 SET  GET 命令。键为 name,对应的值为alan.com注意:一个键最大能存储512MB。


Hash(哈希)

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

实例

127.0.0.1:6379> hmset  user:1 username alan.com password alan.com points 200
OK
127.0.0.1:6379> hgetall user:1
1) "username"
2) "alan.com"
3) "password"
4) "alan.com"
5) "points"
6) "200"
127.0.0.1:6379>

image

以上实例中 hash 数据类型存储了包含用户脚本信息的用户对象。 实例中我们使用了 Redis HMSET, HEGTALL 命令,user:1 为键值。每个 hash 可以存储 232 - 1 键值对(40多亿)。


List(列表)

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

实例

127.0.0.1:6379> lpush alan.com redis
(integer) 1
127.0.0.1:6379> lpush alan.com mongodb
(integer) 2
127.0.0.1:6379> lpush alan.com rebitmq
(integer) 3
127.0.0.1:6379> lrange alan.com 0 10
1) "rebitmq"
2) "mongodb"
3) "redis"
127.0.0.1:6379>


image

 

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


Set(集合)

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

 

 

sadd 命令

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

  1. sadd key member

实例

127.0.0.1:6379> sadd set.alan.com redis
(integer) 1
127.0.0.1:6379> sadd set.alan.com mongodb
(integer) 1
127.0.0.1:6379> sadd set.alan.com rebitmq
(integer) 1
127.0.0.1:6379> smembers set.alan.com
1) "rebitmq"
2) "mongodb"
3) "redis"
127.0.0.1:6379>

image

 

 

注意:以上实例中 rabitmq 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

image

 

 

 

 



zset(sorted set:有序集合)

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

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

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

 

 

zadd 命令

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

  1. zadd key score member

实例

image

127.0.0.1:6379> zadd foshan 0 redis
(integer) 1
127.0.0.1:6379> zadd foshan 0 mongodb
(integer) 1
127.0.0.1:6379> zadd foshan 0 rebitmq
(integer) 1
127.0.0.1:6379> zadd foshan 0 rebitmq
(integer) 0
127.0.0.1:6379> ZRANGEBYSCORE foshan 0 1000
1) "mongodb"
2) "rebitmq"
3) "redis"
127.0.0.1:6379>





 



Redis 命令


Redis 命令




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

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

语法

Redis 客户端的基本语法为:

  1. $ redis-cli

实例

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

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

  1. $redis-cli
  2. redis 127.0.0.1:6379>
  3. redis 127.0.0.1:6379> PING
  4.  
  5. PONG

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


在远程服务上执行命令


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

语法


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

实例

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

 I:Mysql_DataBaseRedis-x64-3.0.504 的目录

2021/05/07  22:06    <DIR>          .
2021/05/07  22:06    <DIR>          ..
2021/05/07  22:05            20,084 QQ截图20210507220538.png
2021/05/07  22:06            18,658 QQ截图20210507220601.png
2021/05/07  22:06            16,828 QQ截图20210507220608.png
2021/05/11  21:34    <DIR>          Redis
2021/05/07  22:04         6,733,824 Redis-x64-3.0.504.msi
               4 个文件      6,789,394 字节
               3 个目录 3,278,030,254,080 可用字节

I:Mysql_DataBaseRedis-x64-3.0.504>redis-cli -h 127.0.0.1 -p 6379 -a "123456"
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>

image







Redis 键(key)




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

语法

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

  1. redis 127.0.0.1:6379> COMMAND KEY_NAME


实例

127.0.0.1:6379> set w3ckey redis
OK
127.0.0.1:6379> get w3ckey
"redis"
127.0.0.1:6379> del w3ckey
(integer) 1
127.0.0.1:6379> get w3ckey
(nil)
127.0.0.1:6379>

image


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


Redis keys 命令

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

序号命令及描述
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 DEL 命令


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

语法

redis DEL 命令基本语法如下:

  1. redis 127.0.0.1:6379> DEL KEY_NAME

可用版本

>= 1.0.0

返回值

被删除 key 的数量。

实例

127.0.0.1:6379> set w3ckey redis
OK
127.0.0.1:6379> get w3ckey
"redis"
127.0.0.1:6379> del w3ckey
(integer) 1
127.0.0.1:6379> get w3ckey
(nil)
127.0.0.1:6379>

image





Redis Dump 命令


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

语法

redis DUMP 命令基本语法如下:

  1. redis 127.0.0.1:6379> DUMP KEY_NAME
可用版本

>= 2.6.0

返回值

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

实例

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

  1. redis> SET greeting "hello, dumping world!"
  2. OK

现在使用 DUMP 序列化键值。

  1. redis> DUMP greeting
  2. "x00x15hello, dumping world!x06x00Exa0Zx82xd8rxc1xde"
  3.  
  4. redis> DUMP not-exists-key
  5. (nil)




Redis EXISTS 命令


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

语法

redis EXISTS 命令基本语法如下:

  1. redis 127.0.0.1:6379> EXISTS KEY_NAME
可用版本

>= 1.0.0

返回值

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

实例
  1. redis 127.0.0.1:6379> EXISTS apiref.comcc-new-key
  2. (integer) 0

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

  1. redis 127.0.0.1:6379> set apiref.comcc-new-key newkey
  2. OK
  3. redis 127.0.0.1:6379> EXISTS apiref.comcc-new-key
  4. (integer) 1
  5. redis 127.0.0.1:6379>

Redis Expire 命令


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

语法

redis Expire 命令基本语法如下:

  1. 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 并赋值:

  1. redis 127.0.0.1:6379> SET w3ckey redis
  2. OK

为 key 设置过期时间:

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

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



Redis Expireat 命令


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

语法

redis Expireat 命令基本语法如下:

  1. 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 并赋值:

  1. redis 127.0.0.1:6379> SET w3ckey redis
  2. OK

为 key 设置过期时间:

  1. redis 127.0.0.1:6379> EXPIREAT w3ckey 1293840000
  2. (integer) 1
  3. EXISTS w3ckey
  4. (integer) 0

Redis PEXPIREAT 命令


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

语法

redis PEXPIREAT 命令基本语法如下:

  1. 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 并赋值:

  1. redis 127.0.0.1:6379> SET w3ckey redis
  2. OK

为 key 设置过期时间:

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

Redis Keys 命令


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

语法

redis KEYS 命令基本语法如下:

  1. redis 127.0.0.1:6379> KEYS PATTERN
可用版本

>= 1.0.0

返回值

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

实例

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

  1. redis 127.0.0.1:6379> SET w3c1 redis
  2. OK
  3. redis 127.0.0.1:6379> SET w3c2 mysql
  4. OK
  5. redis 127.0.0.1:6379> SET w3c3 mongodb
  6. OK

查找以 w3c 为开头的 key:

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

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

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

Redis Move 命令


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

语法

redis Move 命令基本语法如下:

  1. redis 127.0.0.1:6379> MOVE KEY_NAME DESTINATION_DATABASE
可用版本

>= 1.0.0

返回值

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

实例
  1. # key 存在于当前数据库
  2.  
  3. redis> SELECT 0 # redis默认使用数据库 0,为了清晰起见,这里再显式指定一次。
  4. OK
  5.  
  6. redis> SET song "secret base - Zone"
  7. OK
  8.  
  9. redis> MOVE song 1 # 将 song 移动到数据库 1
  10. (integer) 1
  11.  
  12. redis> EXISTS song # song 已经被移走
  13. (integer) 0
  14.  
  15. redis> SELECT 1 # 使用数据库 1
  16. OK
  17.  
  18. redis:1> EXISTS song # 证实 song 被移到了数据库 1 (注意命令提示符变成了"redis:1",表明正在使用数据库 1)
  19. (integer) 1
  20.  
  21.  
  22. # 当 key 不存在的时候
  23.  
  24. redis:1> EXISTS fake_key
  25. (integer) 0
  26.  
  27. redis:1> MOVE fake_key 0 # 试图从数据库 1 移动一个不存在的 key 到数据库 0,失败
  28. (integer) 0
  29.  
  30. redis:1> select 0 # 使用数据库0
  31. OK
  32.  
  33. redis> EXISTS fake_key # 证实 fake_key 不存在
  34. (integer) 0
  35.  
  36.  
  37. # 当源数据库和目标数据库有相同的 key 时
  38.  
  39. redis> SELECT 0 # 使用数据库0
  40. OK
  41. redis> SET favorite_fruit "banana"
  42. OK
  43.  
  44. redis> SELECT 1 # 使用数据库1
  45. OK
  46. redis:1> SET favorite_fruit "apple"
  47. OK
  48.  
  49. redis:1> SELECT 0 # 使用数据库0,并试图将 favorite_fruit 移动到数据库 1
  50. OK
  51.  
  52. redis> MOVE favorite_fruit 1 # 因为两个数据库有相同的 key,MOVE 失败
  53. (integer) 0
  54.  
  55. redis> GET favorite_fruit # 数据库 0 的 favorite_fruit 没变
  56. "banana"
  57.  
  58. redis> SELECT 1
  59. OK
  60.  
  61. redis:1> GET favorite_fruit # 数据库 1 的 favorite_fruit 也是
  62. "apple"




Redis PERSIST 命令


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

语法

redis PERSIST 命令基本语法如下:

  1. redis 127.0.0.1:6379> PERSIST KEY_NAME
可用版本

>= 2.2.0

返回值

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

实例
  1. redis> SET mykey "Hello"
  2. OK
  3.  
  4. redis> EXPIRE mykey 10 # 为 key 设置生存时间
  5. (integer) 1
  6.  
  7. redis> TTL mykey
  8. (integer) 10
  9.  
  10. redis> PERSIST mykey # 移除 key 的生存时间
  11. (integer) 1
  12.  
  13. redis> TTL mykey
  14. (integer) -1


Redis Pttl 命令


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

语法

redis Pttl 命令基本语法如下:

  1. redis 127.0.0.1:6379> PTTL KEY_NAME
可用版本

>= 2.6.0

返回值

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

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

实例
  1. # 不存在的 key
  2.  
  3. redis> FLUSHDB
  4. OK
  5.  
  6. redis> PTTL key
  7. (integer) -2
  8.  
  9.  
  10. # key 存在,但没有设置剩余生存时间
  11.  
  12. redis> SET key value
  13. OK
  14.  
  15. redis> PTTL key
  16. (integer) -1
  17.  
  18.  
  19. # 有剩余生存时间的 key
  20.  
  21. redis> PEXPIRE key 10086
  22. (integer) 1
  23.  
  24. redis> PTTL key
  25. (integer) 6179

Redis TTL 命令


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

语法

redis TTL 命令基本语法如下:

  1. redis 127.0.0.1:6379> TTL KEY_NAME
可用版本

>= 1.0.0

返回值

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

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

实例
  1. # 不存在的 key
  2.  
  3. redis> FLUSHDB
  4. OK
  5.  
  6. redis> TTL key
  7. (integer) -2
  8.  
  9.  
  10. # key 存在,但没有设置剩余生存时间
  11.  
  12. redis> SET key value
  13. OK
  14.  
  15. redis> TTL key
  16. (integer) -1
  17.  
  18.  
  19. # 有剩余生存时间的 key
  20.  
  21. redis> EXPIRE key 10086
  22. (integer) 1
  23.  
  24. redis> TTL key
  25. (integer) 10084

Redis RANDOMKEY 命令


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

语法

redis RANDOMKEY 命令基本语法如下:

  1. redis 127.0.0.1:6379> RANDOMKEY
可用版本

>= 1.0.0

返回值

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

实例
  1. # 数据库不为空
  2.  
  3. redis> MSET fruit "apple" drink "beer" food "cookies" # 设置多个 key
  4. OK
  5.  
  6. redis> RANDOMKEY
  7. "fruit"
  8.  
  9. redis> RANDOMKEY
  10. "food"
  11.  
  12. redis> KEYS * # 查看数据库内所有key,证明 RANDOMKEY 并不删除 key
  13. 1) "food"
  14. 2) "drink"
  15. 3) "fruit"
  16.  
  17.  
  18. # 数据库为空
  19.  
  20. redis> FLUSHDB # 删除当前数据库所有 key
  21. OK
  22.  
  23. redis> RANDOMKEY
  24. (nil)




Redis Rename 命令


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

语法

redis Rename 命令基本语法如下:

  1. 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 命令将覆盖旧值。

实例
  1. # key 存在且 newkey 不存在
  2.  
  3. redis> SET message "hello world"
  4. OK
  5.  
  6. redis> RENAME message greeting
  7. OK
  8.  
  9. redis> EXISTS message # message 不复存在
  10. (integer) 0
  11.  
  12. redis> EXISTS greeting # greeting 取而代之
  13. (integer) 1
  14.  
  15.  
  16. # 当 key 不存在时,返回错误
  17.  
  18. redis> RENAME fake_key never_exists
  19. (error) ERR no such key
  20.  
  21.  
  22. # newkey 已存在时, RENAME 会覆盖旧 newkey
  23.  
  24. redis> SET pc "lenovo"
  25. OK
  26.  
  27. redis> SET personal_computer "dell"
  28. OK
  29.  
  30. redis> RENAME pc personal_computer
  31. OK
  32.  
  33. redis> GET pc
  34. (nil)
  35.  
  36. redis:1> GET personal_computer # 原来的值 dell 被覆盖了
  37. "lenovo"



Redis Renamenx 命令


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

语法

redis Renamenx 命令基本语法如下:

  1. redis 127.0.0.1:6379> RENAMENX OLD_KEY_NAME NEW_KEY_NAME
可用版本

>= 1.0.0

返回值

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

实例
  1. # newkey 不存在,改名成功
  2.  
  3. redis> SET player "MPlyaer"
  4. OK
  5.  
  6. redis> EXISTS best_player
  7. (integer) 0
  8.  
  9. redis> RENAMENX player best_player
  10. (integer) 1
  11.  
  12.  
  13. # newkey存在时,失败
  14.  
  15. redis> SET animal "bear"
  16. OK
  17.  
  18. redis> SET favorite_animal "butterfly"
  19. OK
  20.  
  21. redis> RENAMENX animal favorite_animal
  22. (integer) 0
  23.  
  24. redis> get animal
  25. "bear"
  26.  
  27. redis> get favorite_animal
  28. "butterfly"

Redis Type 命令



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

语法

redis Renamenx 命令基本语法如下:

  1. redis 127.0.0.1:6379> TYPE KEY_NAME

可用版本

>= 1.0.0

返回值

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

  • none (key不存在)
  • string (字符串)
  • list (列表)
  • set (集合)
  • zset (有序集)
  • hash (哈希表)

实例

  1. # 字符串
  2.  
  3. redis> SET weather "sunny"
  4. OK
  5.  
  6. redis> TYPE weather
  7. string
  8.  
  9.  
  10. # 列表
  11.  
  12. redis> LPUSH book_list "programming in scala"
  13. (integer)1
  14.  
  15. redis> TYPE book_list
  16. list
  17.  
  18.  
  19. # 集合
  20.  
  21. redis> SADD pat "dog"
  22. (integer)1
  23.  
  24. redis> TYPE pat
  25. set






Redis 字符串(String)


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

语法

  1. 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> 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 命令



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

语法

redis SET 命令基本语法如下:

  1. 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 并设置值。

  1. # 对不存在的键进行设置
  2.  
  3. redis 127.0.0.1:6379> SET key "value"
  4. OK
  5.  
  6. redis 127.0.0.1:6379> GET key
  7. "value"
  8.  
  9.  
  10. # 对已存在的键进行设置
  11.  
  12. redis 127.0.0.1:6379> SET key "new-value"
  13. OK
  14.  
  15. redis 127.0.0.1:6379> GET key
  16. "new-value"




Redis Get 命令



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

语法

redis Get 命令基本语法如下:

  1. redis 127.0.0.1:6379> GET KEY_NAME

可用版本

>= 1.0.0

返回值

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

实例

  1. # 对不存在的 key 或字符串类型 key 进行 GET
  2.  
  3. redis> GET db
  4. (nil)
  5.  
  6. redis> SET db redis
  7. OK
  8.  
  9. redis> GET db
  10. "redis"
  11.  
  12.  
  13. # 对不是字符串类型的 key 进行 GET
  14.  
  15. redis> DEL db
  16. (integer)1
  17.  
  18. redis> LPUSH db redis mongodb mysql
  19. (integer)3
  20.  
  21. redis> GET db
  22. (error) ERR Operation against a key holding the wrong kind of value




Redis Getrange 命令



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

语法

redis Getrange 命令基本语法如下:

  1. redis 127.0.0.1:6379> GETRANGE KEY_NAME start end

可用版本

>= 2.4.0

返回值

截取得到的子字符串。

实例

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

  1. redis 127.0.0.1:6379> SET mykey "This is my test key"
  2. OK
  3. redis 127.0.0.1:6379> GETRANGE mykey 03
  4. "This"
  5. redis 127.0.0.1:6379> GETRANGE mykey 0-1
  6. "This is my test key"




Redis Getset 命令



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

语法

redis Getset 命令基本语法如下:

  1. redis 127.0.0.1:6379> GETSET KEY_NAME VALUE

可用版本

>= 1.0.0

返回值

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

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

实例

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

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




Redis Getbit 命令



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

语法

redis Getbit 命令基本语法如下:

  1. redis 127.0.0.1:6379> GETBIT KEY_NAME OFFSET

可用版本

>= 2.2.0

返回值

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

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

实例

  1. # 对不存在的 key 或者不存在的 offset 进行 GETBIT, 返回 0
  2.  
  3. redis> EXISTS bit
  4. (integer)0
  5.  
  6. redis> GETBIT bit 10086
  7. (integer)0
  8.  
  9.  
  10. # 对已存在的 offset 进行 GETBIT
  11.  
  12. redis> SETBIT bit 100861
  13. (integer)0
  14.  
  15. redis> GETBIT bit 10086
  16. (integer)1




Redis Mget 命令



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

语法

redis Mget 命令基本语法如下:

  1. redis 127.0.0.1:6379> MGET KEY1 KEY2 .. KEYN

可用版本

>= 1.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> SET key1 "hello"
  2. OK
  3. redis 127.0.0.1:6379> SET key2 "world"
  4. OK
  5. redis 127.0.0.1:6379> MGET key1 key2 someOtherKey
  6. 1)"Hello"
  7. 2)"World"
  8. 3)(nil)





Redis Setbit 命令



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

语法

redis Setbit 命令基本语法如下:

  1. redis 127.0.0.1:6379>Setbit KEY_NAME OFFSET

可用版本

>= 2.2.0

返回值

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

实例

  1. redis> SETBIT bit 100861
  2. (integer)0
  3.  
  4. redis> GETBIT bit 10086
  5. (integer)1
  6.  
  7. redis> GETBIT bit 100# bit 默认被初始化为 0
  8. (integer)0



Redis Setex 命令



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

语法

redis Setex 命令基本语法如下:

  1. redis 127.0.0.1:6379> SETEX KEY_NAME TIMEOUT VALUE

可用版本

>= 2.0.0

返回值

设置成功时返回 OK 。

实例

  1. redis 127.0.0.1:6379> SETEX mykey 60 redis
  2. OK
  3. redis 127.0.0.1:6379> TTL mykey
  4. 60
  5. redis 127.0.0.1:6379> GET mykey
  6. "redis




Redis Setnx 命令



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

语法

redis Setnx 命令基本语法如下:

  1. redis 127.0.0.1:6379> SETNX KEY_NAME VALUE

可用版本

>= 1.0.0

返回值

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

实例

  1. redis> EXISTS job # job 不存在
  2. (integer)0
  3.  
  4. redis> SETNX job "programmer"# job 设置成功
  5. (integer)1
  6.  
  7. redis> SETNX job "code-farmer"# 尝试覆盖 job ,失败
  8. (integer)0
  9.  
  10. redis> GET job # 没有被覆盖
  11. "programmer"





Redis Setrange 命令



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

语法

redis Setrange 命令基本语法如下:

  1. redis 127.0.0.1:6379> SETRANGE KEY_NAME OFFSET VALUE

可用版本

>= 2.2.0

返回值

被修改后的字符串长度。

实例

  1. redis 127.0.0.1:6379> SET key1 "Hello World"
  2. OK
  3. redis 127.0.0.1:6379> SETRANGE key1 6"Redis"
  4. (integer)11
  5. redis 127.0.0.1:6379> GET key1
  6. "Hello Redis"






Redis Strlen 命令



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

语法

redis Strlen 命令基本语法如下:

  1. redis 127.0.0.1:6379> STRLEN KEY_NAME

可用版本

>= 2.2.0

返回值

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

实例

  1. # 获取字符串的长度
  2.  
  3. redis> SET mykey "Hello world"
  4. OK
  5.  
  6. redis> STRLEN mykey
  7. (integer)11
  8.  
  9.  
  10. # 不存在的 key 长度为 0
  11.  
  12. redis> STRLEN nonexisting
  13. (integer)0



Redis Mset 命令



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

语法

redis Mset 命令基本语法如下:

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

可用版本

>= 1.0.1

返回值

总是返回 OK 。

实例

  1. redis 127.0.0.1:6379> MSET key1 "Hello" key2 "World"
  2. OK
  3. redis 127.0.0.1:6379> GET key1
  4. "Hello"
  5. redis 127.0.0.1:6379> GET key2
  6. 1)"World"






Redis Msetnx 命令



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

语法

redis Msetnx 命令基本语法如下:

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

可用版本

>= 1.0.1

返回值

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

实例

  1. # 对不存在的 key 进行 MSETNX
  2.  
  3. redis> MSETNX rmdbs "MySQL" nosql "MongoDB" key-value-store "redis"
  4. (integer)1
  5.  
  6. redis> MGET rmdbs nosql key-value-store
  7. 1)"MySQL"
  8. 2)"MongoDB"
  9. 3)"redis"
  10.  
  11.  
  12. # MSET 的给定 key 当中有已存在的 key
  13.  
  14. redis> MSETNX rmdbs "Sqlite" language "python"# rmdbs 键已经存在,操作失败
  15. (integer)0
  16.  
  17. redis> EXISTS language # 因为 MSET 是原子性操作,language 没有被设置
  18. (integer)0
  19.  
  20. redis> GET rmdbs # rmdbs 也没有被修改
  21. "MySQL"



Redis Psetex 命令



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

语法

redis Psetex 命令基本语法如下:

  1. redis 127.0.0.1:6379> PSETEX key1 EXPIRY_IN_MILLISECONDS value1

可用版本

>= 2.6.0

返回值

设置成功时返回 OK 。

实例

  1. redis 127.0.0.1:6379> PSETEX mykey 1000"Hello"
  2. OK
  3. redis 127.0.0.1:6379> PTTL mykey
  4. 999
  5. redis 127.0.0.1:6379> GET mykey
  6. 1)"Hello"



Redis Incr 命令



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

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

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

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

语法

redis Incr 命令基本语法如下:

  1. redis 127.0.0.1:6379> INCR KEY_NAME

可用版本

>= 1.0.0

返回值

执行 INCR 命令之后 key 的值。

实例

  1. redis> SET page_view 20
  2. OK
  3.  
  4. redis> INCR page_view
  5. (integer)21
  6.  
  7. redis> GET page_view # 数字值在 Redis 中以字符串的形式保存
  8. "21"



Redis Incrby 命令



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

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

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

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

语法

redis Incrby 命令基本语法如下:

  1. redis 127.0.0.1:6379> INCRBY KEY_NAME INCR_AMOUNT

可用版本

>= 1.0.0

返回值

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

实例

  1. # key 存在且是数字值
  2.  
  3. redis> SET rank 50
  4. OK
  5.  
  6. redis> INCRBY rank 20
  7. (integer)70
  8.  
  9. redis> GET rank
  10. "70"
  11.  
  12.  
  13. # key 不存在时
  14.  
  15. redis> EXISTS counter
  16. (integer)0
  17.  
  18. redis> INCRBY counter 30
  19. (integer)30
  20.  
  21. redis> GET counter
  22. "30"
  23.  
  24.  
  25. # key 不是数字值时
  26.  
  27. redis> SET book "long long ago..."
  28. OK
  29.  
  30. redis> INCRBY book 200
  31. (error) ERR value isnot an integer orout of range



Redis Incrbyfloat 命令



Redis Incrbyfloat 命令为 key 中所储存的值加上指定的浮点数增量值。

如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0 ,再执行加法操作。

语法

redis Incrbyfloat 命令基本语法如下:

  1. redis 127.0.0.1:6379> INCRBYFLOAT KEY_NAME INCR_AMOUNT

可用版本

>= 2.6.0

返回值

执行命令之后 key 的值。

实例

  1. # 值和增量都不是指数符号
  2.  
  3. redis> SET mykey 10.50
  4. OK
  5.  
  6. redis> INCRBYFLOAT mykey 0.1
  7. "10.6"
  8.  
  9.  
  10. # 值和增量都是指数符号
  11.  
  12. redis> SET mykey 314e-2
  13. OK
  14.  
  15. redis> GET mykey # 用 SET 设置的值可以是指数符号
  16. "314e-2"
  17.  
  18. redis> INCRBYFLOAT mykey 0# 但执行 INCRBYFLOAT 之后格式会被改成非指数符号
  19. "3.14"
  20.  
  21.  
  22. # 可以对整数类型执行
  23.  
  24. redis> SET mykey 3
  25. OK
  26.  
  27. redis> INCRBYFLOAT mykey 1.1
  28. "4.1"
  29.  
  30.  
  31. # 后跟的 0 会被移除
  32.  
  33. redis> SET mykey 3.0
  34. OK
  35.  
  36. redis> GET mykey # SET 设置的值小数部分可以是 0
  37. "3.0"
  38.  
  39. redis> INCRBYFLOAT mykey 1.000000000000000000000# 但 INCRBYFLOAT 会将无用的 0 忽略掉,有需要的话,将浮点变为整数
  40. "4"
  41.  
  42. redis> GET mykey
  43. "4"




Redis Decr 命令



Redis Decr 命令将 key 中储存的数字值减一。

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

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

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

语法

redis Decr 命令基本语法如下:

  1. redis 127.0.0.1:6379> DECR KEY_NAME

可用版本

>= 1.0.0

返回值

执行命令之后 key 的值。

实例

  1. # 对存在的数字值 key 进行 DECR
  2.  
  3. redis> SET failure_times 10
  4. OK
  5.  
  6. redis> DECR failure_times
  7. (integer)9
  8.  
  9.  
  10. # 对不存在的 key 值进行 DECR
  11.  
  12. redis> EXISTS count
  13. (integer)0
  14.  
  15. redis> DECR count
  16. (integer)-1
  17.  
  18.  
  19. # 对存在但不是数值的 key 进行 DECR
  20.  
  21. redis> SET company YOUR_CODE_SUCKS.LLC
  22. OK
  23.  
  24. redis> DECR company
  25. (error) ERR value isnot an integer orout of range



Redis Decrby 命令



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

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

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

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

语法

redis Decrby 命令基本语法如下:

  1. redis 127.0.0.1:6379> DECRBY KEY_NAME DECREMENT_AMOUNT

可用版本

>= 1.0.0

返回值

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

实例

  1. # 对已存在的 key 进行 DECRBY
  2.  
  3. redis> SET count 100
  4. OK
  5.  
  6. redis> DECRBY count 20
  7. (integer)80
  8.  
  9.  
  10. # 对不存在的 key 进行DECRBY
  11.  
  12. redis> EXISTS pages
  13. (integer)0
  14.  
  15. redis> DECRBY pages 10
  16. (integer)-10



Redis Append 命令



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

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

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

语法

redis Append 命令基本语法如下:

  1. redis 127.0.0.1:6379> APPEND KEY_NAME NEW_VALUE

可用版本

>= 2.0.0

返回值

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

实例

  1. # 对不存在的 key 执行 APPEND
  2.  
  3. redis> EXISTS myphone # 确保 myphone 不存在
  4. (integer)0
  5.  
  6. redis> APPEND myphone "nokia"# 对不存在的 key 进行 APPEND ,等同于 SET myphone "nokia"
  7. (integer)5# 字符长度
  8.  
  9.  
  10. # 对已存在的字符串进行 APPEND
  11.  
  12. redis> APPEND myphone " - 1110"# 长度从 5 个字符增加到 12 个字符
  13. (integer)12
  14.  
  15. redis> GET myphone
  16. "nokia - 1110"




Redis hash 命令

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

序号命令及描述
1 HDEL key field2 [field2] 
删除一个或多个哈希表字段
2 HEXISTS key field 
查看哈希表 key 中,指定的字段是否存在。
3 HGET key field 
获取存储在哈希表中指定字段的值/td>
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 哈希(Hash)


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

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

实例

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


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



Redis Hdel 命令



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

语法

redis Hdel 命令基本语法如下:

  1. redis 127.0.0.1:6379> HDEL KEY_NAME FIELD1.. FIELDN

可用版本

>= 2.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> HSET myhash field1 "foo"
  2. (integer)1
  3. redis 127.0.0.1:6379> HDEL myhash field1
  4. (integer)1
  5. redis 127.0.0.1:6379> HDEL myhash field2
  6. (integer)0



Redis Hexists 命令



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

语法

redis Hexists 命令基本语法如下:

  1. redis 127.0.0.1:6379> HEXISTS KEY_NAME FIELD_NAME

可用版本

>= 2.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> HSET myhash field1 "foo"
  2. (integer)1
  3. redis 127.0.0.1:6379> HEXISTS myhash field1
  4. (integer)1
  5. redis 127.0.0.1:6379> HEXISTS myhash field2
  6. (integer)0


Redis Hgetall 命令



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

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

语法

redis Hgetall 命令基本语法如下:

  1. redis 127.0.0.1:6379> HGETALL KEY_NAME

可用版本

>= 2.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> HSET myhash field1 "foo"
  2. (integer)1
  3. redis 127.0.0.1:6379> HSET myhash field2 "bar"
  4. (integer)1
  5. redis 127.0.0.1:6379> HGETALL myhash
  6. 1)"field1"
  7. 2)"Hello"
  8. 3)"field2"
  9. 4)"World"



Redis Hincrby 命令



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

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

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

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

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

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

语法

redis Hincrby 命令基本语法如下:

  1. redis 127.0.0.1:6379> HINCRBY KEY_NAME FIELD_NAME INCR_BY_NUMBER

可用版本

>= 2.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> HSET myhash field1 20
  2. (integer)1
  3. redis 127.0.0.1:6379> HINCRBY myhash field 1
  4. (integer)21
  5. redis 127.0.0.1:6379> HINCRBY myhash field -1
  6. (integer)20



Redis Hincrbyfloat 命令



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

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

语法

redis Hincrbyfloat 命令基本语法如下:

  1. redis 127.0.0.1:6379> HINCRBYFLOAT KEY_NAME FIELD_NAME INCR_BY_NUMBER

可用版本

>= 2.6.0

返回值

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

实例

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




Redis Hkeys 命令



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

语法

redis Hkeys 命令基本语法如下:

  1. redis 127.0.0.1:6379> HKEYS KEY_NAME FIELD_NAME INCR_BY_NUMBER

可用版本

>= 2.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> HSET myhash field1 "foo"
  2. (integer)1
  3. redis 127.0.0.1:6379> HSET myhash field2 "bar"
  4. (integer)1
  5. redis 127.0.0.1:6379> HKEYS myhash
  6. 1)"field1"
  7. 2)"field2"


Redis Hlen 命令



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

语法

redis Hlen 命令基本语法如下:

  1. redis 127.0.0.1:6379> HLEN KEY_NAME

可用版本

>= 2.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> HSET myhash field1 "foo"
  2. (integer)1
  3. redis 127.0.0.1:6379> HSET myhash field2 "bar"
  4. (integer)1
  5. redis 127.0.0.1:6379> HLEN myhash
  6. (integer)2




Redis Hmget 命令



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

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

语法

redis Hmget 命令基本语法如下:

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

可用版本

>= 2.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> HSET myhash field1 "foo"
  2. (integer)1
  3. redis 127.0.0.1:6379> HSET myhash field2 "bar"
  4. (integer)1
  5. redis 127.0.0.1:6379> HMGET myhash field1 field2 nofield
  6. 1)"foo"
  7. 2)"bar"
  8. 3)(nil)


Redis Hset 命令



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

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

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

语法

redis Hset 命令基本语法如下:

  1. redis 127.0.0.1:6379> HSET KEY_NAME FIELD VALUE

可用版本

>= 2.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> HSET myhash field1 "foo"
  2. OK
  3. redis 127.0.0.1:6379> HGET myhash field1
  4. "foo"
  5.  
  6. redis 127.0.0.1:6379> HSET website google "www.g.cn"# 设置一个新域
  7. (integer)1
  8.  
  9. redis 127.0.0.1:6379>HSET website google "www.google.com"# 覆盖一个旧域
  10. (integer)0




Redis Hsetnx 命令



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

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

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

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

语法

redis Hsetnx 命令基本语法如下:

  1. redis 127.0.0.1:6379> HSETNX KEY_NAME FIELD VALUE

可用版本

>= 2.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> HSETNX myhash field1 "foo"
  2. (integer)1
  3. redis 127.0.0.1:6379> HSETNX myhash field1 "bar"
  4. (integer)0
  5. redis 127.0.0.1:6379> HGET myhash field1
  6. "foo"
  7.  
  8. redis 127.0.0.1:6379> HSETNX nosql key-value-store redis
  9. (integer)1
  10.  
  11. redis 127.0.0.1:6379> HSETNX nosql key-value-store redis # 操作无效, key-value-store 已存在
  12. (integer)0





Redis Hvals 命令



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

语法

redis Hvals 命令基本语法如下:

  1. redis 127.0.0.1:6379> HVALS KEY_NAME FIELD VALUE

可用版本

>= 2.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> HSET myhash field1 "foo"
  2. (integer)1
  3. redis 127.0.0.1:6379> HSET myhash field2 "bar"
  4. (integer)1
  5. redis 127.0.0.1:6379> HVALS myhash
  6. 1)"foo"
  7. 2)"bar"
  8.  
  9. # 空哈希表/不存在的key
  10.  
  11. redis 127.0.0.1:6379> EXISTS not_exists
  12. (integer)0
  13.  
  14. redis 127.0.0.1:6379> HVALS not_exists
  15. (empty list orset)




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 列表(List)


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

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

实例

  1. redis 127.0.0.1:6379> LPUSH w3ckey redis
  2. (integer)1
  3. redis 127.0.0.1:6379> LPUSH w3ckey mongodb
  4. (integer)2
  5. redis 127.0.0.1:6379> LPUSH w3ckey mysql
  6. (integer)3
  7. redis 127.0.0.1:6379> LRANGE w3ckey 010
  8.  
  9. 1)"mysql"
  10. 2)"mongodb"
  11. 3)"redis"

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


Redis Blpop 命令



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

语法

redis Blpop 命令基本语法如下:

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

可用版本

>= 2.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> BLPOP list1 100

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


  1. (nil)
  2. (100.06s)



Redis Brpop 命令



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

语法

redis Blpop 命令基本语法如下:

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

可用版本

>= 2.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> BRPOP list1 100

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


  1. (nil)
  2. (100.06s)



Redis Brpoplpush 命令



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

语法

redis Brpoplpush 命令基本语法如下:

  1. redis 127.0.0.1:6379> BRPOPLPUSH LIST1 ANOTHER_LIST TIMEOUT

可用版本

>= 2.0.0

返回值

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

实例

  1. # 非空列表
  2.  
  3. redis> BRPOPLPUSH msg reciver 500
  4. "hello moto"# 弹出元素的值
  5. (3.38s)# 等待时长
  6.  
  7. redis> LLEN reciver
  8. (integer)1
  9.  
  10. redis> LRANGE reciver 00
  11. 1)"hello moto"
  12.  
  13.  
  14. # 空列表
  15.  
  16. redis> BRPOPLPUSH msg reciver 1
  17. (nil)
  18. (1.34s)




Redis Lindex 命令



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

语法

redis Lindex 命令基本语法如下:

  1. redis 127.0.0.1:6379> LINDEX KEY_NAME INDEX_POSITION

可用版本

>= 1.0.0

返回值

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

实例


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



Redis Llen 命令



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

语法

redis Llen 命令基本语法如下:

  1. redis 127.0.0.1:6379> LLEN KEY_NAME

可用版本

>= 1.0.0

返回值

列表的长度。

实例



127.0.0.1:6379> RPUSH list1 "foo"
(integer) 4
127.0.0.1:6379>  LRANGE list1 0 -1
1) "foo"
2) "Yes"
3) "bar"
4) "foo"
127.0.0.1:6379> RPUSH list1 "bar"
(integer) 5
127.0.0.1:6379>  LRANGE list1 0 -1
1) "foo"
2) "Yes"
3) "bar"
4) "foo"
5) "bar"
127.0.0.1:6379>  LLEN list1
(integer) 5
127.0.0.1:6379>



Redis Lpop 命令



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

语法

redis Lpop 命令基本语法如下:

  1. redis 127.0.0.1:6379> LLEN KEY_NAME

可用版本

>= 1.0.0

返回值

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

实例


127.0.0.1:6379>  LLEN list1
(integer) 5
127.0.0.1:6379> RPUSH list1 "foo"
(integer) 6
127.0.0.1:6379> RPUSH list1 "bar"
(integer) 7
127.0.0.1:6379>  LPOP list1
"foo"
127.0.0.1:6379>



Redis Lpush 命令



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

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

语法

redis Lpush 命令基本语法如下:

  1. redis 127.0.0.1:6379> LPUSH KEY_NAME VALUE1.. VALUEN

可用版本

>= 1.0.0

返回值

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

实例


127.0.0.1:6379> LPUSH list1 "foo"
(integer) 7
127.0.0.1:6379>  LPUSH list1 "bar"
(integer) 8
127.0.0.1:6379>  LRANGE list1 0 -1
1) "bar"
2) "foo"
3) "Yes"
4) "bar"
5) "foo"
6) "bar"
7) "foo"
8) "bar"
127.0.0.1:6379>


Redis Lpushx 命令



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

语法

redis Lpushx 命令基本语法如下:

  1. redis 127.0.0.1:6379> LPUSHX KEY_NAME VALUE1.. VALUEN

可用版本

>= 2.2.0

返回值

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

实例

  1. 127.0.0.1:6379> LPUSH list1 "foo"
  2. (integer)1
  3. 127.0.0.1:6379> LPUSHX list1 "bar"
  4. (integer)2
  5. 127.0.0.1:6379> LPUSHX list2 "bar"
  6. (integer)0
  7. 127.0.0.1:6379> LRANGE list1 0-1
  8. 1)"bar"
  9. 2)"foo"


Redis Lrange 命令



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

语法

redis Lrange 命令基本语法如下:

  1. redis 127.0.0.1:6379> LRANGE KEY_NAME START END

可用版本

>= 1.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> LPUSH list1 "foo"
  2. (integer)1
  3. redis 127.0.0.1:6379> LPUSH list1 "bar"
  4. (integer)2
  5. redis 127.0.0.1:6379> LPUSHX list1 "bar"
  6. (integer)0
  7. redis 127.0.0.1:6379> LRANGE list1 0-1
  8. 1)"bar"
  9. 2)"bar"
  10. 3)"foo"




Redis Lrem 命令



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

COUNT 的值可以是以下几种:

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

语法

redis Lrem 命令基本语法如下:

  1. redis 127.0.0.1:6379> LREM KEY_NAME COUNT VALUE

可用版本

>= 1.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> RPUSH mylist "hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> RPUSH mylist "hello"
  4. (integer)2
  5. redis 127.0.0.1:6379> RPUSH mylist "foo"
  6. (integer)3
  7. redis 127.0.0.1:6379> RPUSH mylist "hello"
  8. (integer)4
  9. redis 127.0.0.1:6379> LREM mylist -2"hello"
  10. (integer)2



Redis Lset 命令



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

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

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

语法

redis Lset 命令基本语法如下:

  1. redis 127.0.0.1:6379> LSET KEY_NAME INDEX VALUE

可用版本

>= 1.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> RPUSH mylist "hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> RPUSH mylist "hello"
  4. (integer)2
  5. redis 127.0.0.1:6379> RPUSH mylist "foo"
  6. (integer)3
  7. redis 127.0.0.1:6379> RPUSH mylist "hello"
  8. (integer)4
  9. redis 127.0.0.1:6379> LSET mylist 0"bar"
  10. OK
  11. redis 127.0.0.1:6379> LRANGE mylist 0-1
  12. 1:"bar"
  13. 2)"hello"
  14. 3)"foo"
  15. 4)"hello"



Redis Ltrim 命令



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

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

语法

redis Ltrim 命令基本语法如下:

  1. redis 127.0.0.1:6379> LTRIM KEY_NAME START STOP

可用版本

>= 1.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> RPUSH mylist "hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> RPUSH mylist "hello"
  4. (integer)2
  5. redis 127.0.0.1:6379> RPUSH mylist "foo"
  6. (integer)3
  7. redis 127.0.0.1:6379> RPUSH mylist "bar"
  8. (integer)4
  9. redis 127.0.0.1:6379> LTRIM mylist 1-1
  10. OK
  11. redis 127.0.0.1:6379> LRANGE mylist 0-1
  12. 1)"hello"
  13. 2)"foo"
  14. 3)"bar"



Redis Rpop 命令



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

语法

redis Rpop 命令基本语法如下:

  1. redis 127.0.0.1:6379> RPOP KEY_NAME

可用版本

>= 1.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> RPUSH mylist "hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> RPUSH mylist "hello"
  4. (integer)2
  5. redis 127.0.0.1:6379> RPUSH mylist "foo"
  6. (integer)3
  7. redis 127.0.0.1:6379> RPUSH mylist "bar"
  8. (integer)4
  9. redis 127.0.0.1:6379> RPOP mylist
  10. OK
  11. redis 127.0.0.1:6379> LRANGE mylist 0-1
  12. 1)"hello"
  13. 2)"hello"
  14. 3)"foo"




Redis Lpush 命令



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

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

语法

redis Lpush 命令基本语法如下:

  1. redis 127.0.0.1:6379> LPUSH KEY_NAME VALUE1.. VALUEN

可用版本

>= 1.0.0

返回值

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

实例

  1. 127.0.0.1:6379> LPUSH list1 "foo"
  2. (integer)1
  3. 127.0.0.1:6379> LPUSH list1 "bar"
  4. (integer)2
  5. 127.0.0.1:6379> LRANGE list1 0-1
  6. 1)"bar"
  7. 2)"foo"




Redis Lpushx 命令



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

语法

redis Lpushx 命令基本语法如下:

  1. redis 127.0.0.1:6379> LPUSHX KEY_NAME VALUE1.. VALUEN

可用版本

>= 2.2.0

返回值

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

实例

  1. 127.0.0.1:6379> LPUSH list1 "foo"
  2. (integer)1
  3. 127.0.0.1:6379> LPUSHX list1 "bar"
  4. (integer)2
  5. 127.0.0.1:6379> LPUSHX list2 "bar"
  6. (integer)0
  7. 127.0.0.1:6379> LRANGE list1 0-1
  8. 1)"bar"
  9. 2)"foo"


Redis Lrange 命令



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

语法

redis Lrange 命令基本语法如下:

  1. redis 127.0.0.1:6379> LRANGE KEY_NAME START END

可用版本

>= 1.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> LPUSH list1 "foo"
  2. (integer)1
  3. redis 127.0.0.1:6379> LPUSH list1 "bar"
  4. (integer)2
  5. redis 127.0.0.1:6379> LPUSHX list1 "bar"
  6. (integer)0
  7. redis 127.0.0.1:6379> LRANGE list1 0-1
  8. 1)"bar"
  9. 2)"bar"
  10. 3)"foo"





 


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 集合(Set)


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

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

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

实例

  1. redis 127.0.0.1:6379> SADD w3ckey redis
  2. (integer)1
  3. redis 127.0.0.1:6379> SADD w3ckey mongodb
  4. (integer)1
  5. redis 127.0.0.1:6379> SADD w3ckey mysql
  6. (integer)1
  7. redis 127.0.0.1:6379> SADD w3ckey mysql
  8. (integer)0
  9. redis 127.0.0.1:6379> SMEMBERS w3ckey
  10.  
  11. 1)"mysql"
  12. 2)"mongodb"
  13. 3)"redis"

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


Redis Sadd 命令



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

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

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

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

语法

redis Sadd 命令基本语法如下:

  1. redis 127.0.0.1:6379> SADD KEY_NAME VALUE1..VALUEN

可用版本

>= 1.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> SADD myset "hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> SADD myset "foo"
  4. (integer)1
  5. redis 127.0.0.1:6379> SADD myset "hello"
  6. (integer)0
  7. redis 127.0.0.1:6379> SMEMBERS myset
  8. 1)"hello"
  9. 2)"foo"




Redis Scard 命令



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

语法

redis Scard 命令基本语法如下:

  1. redis 127.0.0.1:6379> SCARD KEY_NAME

可用版本

>= 1.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> SADD myset "hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> SADD myset "foo"
  4. (integer)1
  5. redis 127.0.0.1:6379> SADD myset "hello"
  6. (integer)0
  7. redis 127.0.0.1:6379> SCARD myset
  8. (integer)2




Redis Sdiff 命令



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

语法

redis Sdiff 命令基本语法如下:

  1. redis 127.0.0.1:6379> SDIFF FIRST_KEY OTHER_KEY1..OTHER_KEYN

可用版本

>= 1.0.0

返回值

包含差集成员的列表。

实例

  1. redis 127.0.0.1:6379> SADD myset "hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> SADD myset "foo"
  4. (integer)1
  5. redis 127.0.0.1:6379> SADD myset "bar"
  6. (integer)1
  7. redis 127.0.0.1:6379> SADD myset2 "hello"
  8. (integer)1
  9. redis 127.0.0.1:6379> SADD myset2 "world"
  10. (integer)1
  11. redis 127.0.0.1:6379> SDIFF myset myset2
  12. 1)"foo"
  13. 2)"bar"




Redis Sdiffstore 命令



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

语法

redis Sdiffstore 命令基本语法如下:

  1. redis 127.0.0.1:6379> SDIFFSTORE DESTINATION_KEY KEY1..KEYN

可用版本

>= 1.0.0

返回值

结果集中的元素数量。

实例

  1. redis 127.0.0.1:6379> SADD myset "hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> SADD myset "foo"
  4. (integer)1
  5. redis 127.0.0.1:6379> SADD myset "bar"
  6. (integer)1
  7. redis 127.0.0.1:6379> SADD myset2 "hello"
  8. (integer)1
  9. redis 127.0.0.1:6379> SADD myset2 "world"
  10. (integer)1
  11. redis 127.0.0.1:6379> SDIFFSTORE destset myset myset2
  12. (integer)2
  13. redis 127.0.0.1:6379> SMEMBERS destset
  14. 1)"foo"
  15. 2)"bar"



Redis Sinter 命令



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

语法

redis Sinter 命令基本语法如下:

  1. redis 127.0.0.1:6379> SINTER KEY KEY1..KEYN

可用版本

>= 1.0.0

返回值

交集成员的列表。

实例

  1. redis 127.0.0.1:6379> SADD myset "hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> SADD myset "foo"
  4. (integer)1
  5. redis 127.0.0.1:6379> SADD myset "bar"
  6. (integer)1
  7. redis 127.0.0.1:6379> SADD myset2 "hello"
  8. (integer)1
  9. redis 127.0.0.1:6379> SADD myset2 "world"
  10. (integer)1
  11. redis 127.0.0.1:6379> SINTER myset myset2
  12. 1)"hello"




Redis Sinterstore 命令



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

语法

redis Sinterstore 命令基本语法如下:

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

可用版本

>= 1.0.0

返回值

交集成员的列表。

实例

  1. redis 127.0.0.1:6379> SADD myset1 "hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> SADD myset1 "foo"
  4. (integer)1
  5. redis 127.0.0.1:6379> SADD myset1 "bar"
  6. (integer)1
  7. redis 127.0.0.1:6379> SADD myset2 "hello"
  8. (integer)1
  9. redis 127.0.0.1:6379> SADD myset2 "world"
  10. (integer)1
  11. redis 127.0.0.1:6379> SINTERSTORE myset myset1 myset2
  12. (integer)1
  13. redis 127.0.0.1:6379> SMEMBERS myset
  14. 1)"hello"




Redis Sismember 命令



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

语法

redis Sismember 命令基本语法如下:

  1. redis 127.0.0.1:6379> SISMEMBER KEY VALUE

可用版本

>= 1.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> SADD myset1 "hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> SISMEMBER myset1 "hello"
  4. (integer)1
  5. redis 127.0.0.1:6379> SISMEMBER myset1 "world"
  6. (integer)0




Redis Smembers 命令



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

语法

redis Smembers 命令基本语法如下:

  1. redis 127.0.0.1:6379> SMEMBERS KEY VALUE

可用版本

>= 1.0.0

返回值

集合中的所有成员。

实例

  1. redis 127.0.0.1:6379> SADD myset1 "hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> SADD myset1 "world"
  4. (integer)1
  5. redis 127.0.0.1:6379> SMEMBERS myset1
  6. 1)"World"
  7. 2)"Hello"




Redis Smove 命令



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

SMOVE 是原子性操作。

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

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

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

语法

redis Smove 命令基本语法如下:

  1. redis 127.0.0.1:6379> SMOVE SOURCE DESTINATION MEMBER

可用版本

>= 1.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> SADD myset1 "hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> SADD myset1 "world"
  4. (integer)1
  5. redis 127.0.0.1:6379> SADD myset1 "bar"
  6. (integer)1
  7. redis 127.0.0.1:6379> SADD myset2 "foo"
  8. (integer)1
  9. redis 127.0.0.1:6379> SMOVE myset1 myset2 "bar"
  10. (integer)1
  11. redis 127.0.0.1:6379> SMEMBERS myset1
  12. 1)"World"
  13. 2)"Hello"
  14. redis 127.0.0.1:6379> SMEMBERS myset2
  15. 1)"foo"
  16. 2)"bar"




Redis Spop 命令



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

语法

redis Spop 命令基本语法如下:

  1. redis 127.0.0.1:6379> SPOP KEY

可用版本

>= 1.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> SADD myset1 "hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> SADD myset1 "world"
  4. (integer)1
  5. redis 127.0.0.1:6379> SADD myset1 "bar"
  6. (integer)1
  7. redis 127.0.0.1:6379> SPOP myset1
  8. "bar"
  9. redis 127.0.0.1:6379> SMEMBERS myset1
  10. 1)"Hello"
  11. 2)"world"





Redis Srandmember 命令



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

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

  • 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。
  • 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。

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

语法

redis Srandmember 命令基本语法如下:

  1. redis 127.0.0.1:6379> SRANDMEMBER KEY [count]

可用版本

>= 1.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> SADD myset1 "hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> SADD myset1 "world"
  4. (integer)1
  5. redis 127.0.0.1:6379> SADD myset1 "bar"
  6. (integer)1
  7. redis 127.0.0.1:6379> SRANDMEMBER myset1
  8. "bar"
  9. redis 127.0.0.1:6379> SRANDMEMBER myset1 2
  10. 1)"Hello"
  11. 2)"world"



Redis Srem 命令



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

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

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

语法

redis Srem 命令基本语法如下:

  1. redis 127.0.0.1:6379> SREM KEY MEMBER1..MEMBERN

可用版本

>= 1.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> SADD myset1 "hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> SADD myset1 "world"
  4. (integer)1
  5. redis 127.0.0.1:6379> SADD myset1 "bar"
  6. (integer)1
  7. redis 127.0.0.1:6379> SREM myset1 "hello"
  8. (integer)1
  9. redis 127.0.0.1:6379> SREM myset1 "foo"
  10. (integer)0
  11. redis 127.0.0.1:6379> SMEMBERS myset1
  12. 1)"bar"
  13. 2)"world"






Redis Sunion 命令



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

语法

redis Sunion 命令基本语法如下:

  1. redis 127.0.0.1:6379> SUNION KEY KEY1..KEYN

可用版本

>= 1.0.0

返回值

并集成员的列表。

实例

  1. redis 127.0.0.1:6379> SADD myset1 "hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> SADD myset1 "world"
  4. (integer)1
  5. redis 127.0.0.1:6379> SADD myset1 "bar"
  6. (integer)1
  7. redis 127.0.0.1:6379> SADD myset2 "hello"
  8. (integer)1
  9. redis 127.0.0.1:6379> SADD myset2 "bar"
  10. (integer)1
  11. redis 127.0.0.1:6379> SUNION myset1 myset2
  12. 1)"bar"
  13. 2)"world"
  14. 3)"hello"
  15. 4)"foo"





Redis Sunionstore 命令



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

语法

redis Sunionstore 命令基本语法如下:

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

可用版本

>= 1.0.0

返回值

结果集中的元素数量。

实例

  1. redis 127.0.0.1:6379> SADD myset1 "hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> SADD myset1 "world"
  4. (integer)1
  5. redis 127.0.0.1:6379> SADD myset1 "bar"
  6. (integer)1
  7. redis 127.0.0.1:6379> SADD myset2 "hello"
  8. (integer)1
  9. redis 127.0.0.1:6379> SADD myset2 "bar"
  10. (integer)1
  11. redis 127.0.0.1:6379> SUNIONSTORE myset myset1 myset2
  12. (integer)1
  13. redis 127.0.0.1:6379> SMEMBERS myset
  14. 1)"bar"
  15. 2)"world"
  16. 3)"hello"
  17. 4)"foo"




Redis Sscan 命令



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

语法

redis Sscan 命令基本语法如下:

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

可用版本

>= 1.0.0

返回值

数组列表。

实例

  1. redis 127.0.0.1:6379> SADD myset1 "hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> SADD myset1 "hi"
  4. (integer)1
  5. redis 127.0.0.1:6379> SADD myset1 "bar"
  6. (integer)1
  7. redis 127.0.0.1:6379> sscan myset1 0 match h*
  8. 1)"0"
  9. 2)1)"hello"
  10. 2)"h1"





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 有序集合(sorted set)


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

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

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

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

实例

  1. redis 127.0.0.1:6379> ZADD w3ckey 1 redis
  2. (integer)1
  3. redis 127.0.0.1:6379> ZADD w3ckey 2 mongodb
  4. (integer)1
  5. redis 127.0.0.1:6379> ZADD w3ckey 3 mysql
  6. (integer)1
  7. redis 127.0.0.1:6379> ZADD w3ckey 3 mysql
  8. (integer)0
  9. redis 127.0.0.1:6379> ZADD w3ckey 4 mysql
  10. (integer)0
  11. redis 127.0.0.1:6379> ZRANGE w3ckey 010 WITHSCORES
  12.  
  13. 1)"redis"
  14. 2)"1"
  15. 3)"mongodb"
  16. 4)"2"
  17. 5)"mysql"
  18. 6)"4"

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


Redis Zadd 命令


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

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

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

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

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

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

语法

redis Zadd 命令基本语法如下:

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

可用版本

>= 1.2.0

返回值

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

实例

  1. redis 127.0.0.1:6379> ZADD myset 1"hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> ZADD myset 1"foo"
  4. (integer)1
  5. redis 127.0.0.1:6379> ZADD myset 2"world"3"bar"
  6. (integer)2
  7. redis 127.0.0.1:6379> ZRANGE myzset 0-1 WITHSCORES
  8. 1)"hello"
  9. 2)"1"
  10. 3)"foo"
  11. 4)"1"
  12. 5)"world"
  13. 6)"2"
  14. 7)"bar"
  15. 8)"3"



Redis Zcard 命令


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

语法

redis Zcard 命令基本语法如下:

  1. redis 127.0.0.1:6379> ZCARD KEY_NAME

可用版本

>= 1.2.0

返回值

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

实例

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



Redis Zcount 命令


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

语法

redis Zcount 命令基本语法如下:

  1. redis 127.0.0.1:6379> ZCOUNT key min max

可用版本

>= 2.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> ZADD myzset 1"hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> ZADD myzset 1"foo"
  4. (integer)1
  5. redis 127.0.0.1:6379> ZADD myzset 2"world"3"bar"
  6. (integer)2
  7. redis 127.0.0.1:6379> ZCOUNT myzset 13
  8. (integer)4



Redis Zincrby 命令


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

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

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

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

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

语法

redis Zincrby 命令基本语法如下:

  1. redis 127.0.0.1:6379> ZINCRBY key increment member

可用版本

>= 1.2.0

返回值

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

实例

  1. redis 127.0.0.1:6379> ZADD myzset 1"hello"
  2. (integer)1
  3. redis 127.0.0.1:6379> ZADD myzset 1"foo"
  4. (integer)1
  5. redis 127.0.0.1:6379> ZINCRBY myzset 2"hello"
  6. (integer)3
  7. redis 127.0.0.1:6379> ZRANGE myzset 0-1 WITHSCORES
  8. 1)"foo"
  9. 2)"2"
  10. 3)"hello"
  11. 4)"3"



Redis Zinterstore 命令


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

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

语法

redis Zinterstore 命令基本语法如下:

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

可用版本

>= 2.0.0

返回值

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

实例

  1. # 有序集 mid_test
  2. redis 127.0.0.1:6379> ZADD mid_test 70"Li Lei"
  3. (integer)1
  4. redis 127.0.0.1:6379> ZADD mid_test 70"Han Meimei"
  5. (integer)1
  6. redis 127.0.0.1:6379> ZADD mid_test 99.5"Tom"
  7. (integer)1
  8.  
  9. # 另一个有序集 fin_test
  10. redis 127.0.0.1:6379> ZADD fin_test 88"Li Lei"
  11. (integer)1
  12. redis 127.0.0.1:6379> ZADD fin_test 75"Han Meimei"
  13. (integer)1
  14. redis 127.0.0.1:6379> ZADD fin_test 99.5"Tom"
  15. (integer)1
  16.  
  17. # 交集
  18. redis 127.0.0.1:6379> ZINTERSTORE sum_point 2 mid_test fin_test
  19. (integer)3
  20.  
  21. # 显示有序集内所有成员及其分数值
  22. redis 127.0.0.1:6379> ZRANGE sum_point 0-1 WITHSCORES
  23. 1)"Han Meimei"
  24. 2)"145"
  25. 3)"Li Lei"
  26. 4)"158"
  27. 5)"Tom"
  28. 6)"199"




Redis Zlexcount 命令


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

语法

redis Zlexcount 命令基本语法如下:

  1. redis 127.0.0.1:6379> ZLEXCOUNT KEY MIN MAX

可用版本

>= 2.8.9

返回值

指定区间内的成员数量。

实例

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



Redis Zrange 命令


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

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

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

如果你需要成员按

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

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

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

语法

redis Zrange 命令基本语法如下:

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

可用版本

>= 1.2.0

返回值

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

实例

  1. redis 127.0.0.1:6379> ZRANGE salary 0-1 WITHSCORES # 显示整个有序集成员
  2. 1)"jack"
  3. 2)"3500"
  4. 3)"tom"
  5. 4)"5000"
  6. 5)"boss"
  7. 6)"10086"
  8.  
  9. redis 127.0.0.1:6379> ZRANGE salary 12 WITHSCORES # 显示有序集下标区间 1 至 2 的成员
  10. 1)"tom"
  11. 2)"5000"
  12. 3)"boss"
  13. 4)"10086"
  14.  
  15. redis 127.0.0.1:6379> ZRANGE salary 0200000 WITHSCORES # 测试 end 下标超出最大下标时的情况
  16. 1)"jack"
  17. 2)"3500"
  18. 3)"tom"
  19. 4)"5000"
  20. 5)"boss"
  21. 6)"10086"
  22.  
  23. redis > ZRANGE salary 2000003000000 WITHSCORES # 测试当给定区间不存在于有序集时的情况
  24. (empty list orset)



Redis Zrangebylex 命令


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

语法

redis Zrange 命令基本语法如下:

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

可用版本

>= 2.8.9

返回值

指定区间内的元素列表。

实例

  1. redis 127.0.0.1:6379> ZADD myzset 0 a 0 b 0 c 0 d 0 e 0 f 0 g
  2. (integer)7
  3. redis 127.0.0.1:6379> ZRANGEBYLEX myzset -[c
  4. 1)"a"
  5. 2)"b"
  6. 3)"c"
  7. redis 127.0.0.1:6379> ZRANGEBYLEX myzset -(c
  8. 1)"a"
  9. 2)"b"
  10. redis 127.0.0.1:6379> ZRANGEBYLEX myzset [aaa (g
  11. 1)"b"
  12. 2)"c"
  13. 3)"d"
  14. 4)"e"
  15. 5)"f"
  16. redis>



Redis Zremrangebyrank 命令


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

语法

redis Zremrangebyrank 命令基本语法如下:

  1. redis 127.0.0.1:6379> ZREMRANGEBYRANK key start stop

可用版本

>= 2.0.0

返回值

被移除成员的数量。

实例

  1. redis 127.0.0.1:6379> ZADD salary 2000 jack
  2. (integer)1
  3. redis 127.0.0.1:6379> ZADD salary 5000 tom
  4. (integer)1
  5. redis 127.0.0.1:6379> ZADD salary 3500 peter
  6. (integer)1
  7.  
  8. redis 127.0.0.1:6379> ZREMRANGEBYRANK salary 01# 移除下标 0 至 1 区间内的成员
  9. (integer)2
  10.  
  11. redis 127.0.0.1:6379> ZRANGE salary 0-1 WITHSCORES # 有序集只剩下一个成员
  12. 1)"tom"
  13. 2)"5000"



Redis Zrank 命令


Redis Zrank 返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。

语法

redis Zrank 命令基本语法如下:

  1. redis 127.0.0.1:6379> ZRANK key member
可用版本

>= 2.0.0

返回值

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

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




Redis Zrem 命令


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

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

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

语法

redis Zrem 命令基本语法如下:

  1. redis 127.0.0.1:6379> ZRANK key member

可用版本

>= 1.2.0

返回值

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

实例

  1. # 测试数据
  2.  
  3. redis 127.0.0.1:6379> ZRANGE page_rank 0-1 WITHSCORES
  4. 1)"bing.com"
  5. 2)"8"
  6. 3)"baidu.com"
  7. 4)"9"
  8. 5)"google.com"
  9. 6)"10"
  10.  
  11.  
  12. # 移除单个元素
  13.  
  14. redis 127.0.0.1:6379> ZREM page_rank google.com
  15. (integer)1
  16.  
  17. redis 127.0.0.1:6379> ZRANGE page_rank 0-1 WITHSCORES
  18. 1)"bing.com"
  19. 2)"8"
  20. 3)"baidu.com"
  21. 4)"9"
  22.  
  23.  
  24. # 移除多个元素
  25.  
  26. redis 127.0.0.1:6379> ZREM page_rank baidu.com bing.com
  27. (integer)2
  28.  
  29. redis 127.0.0.1:6379> ZRANGE page_rank 0-1 WITHSCORES
  30. (empty list orset)
  31.  
  32.  
  33. # 移除不存在元素
  34.  
  35. redis 127.0.0.1:6379> ZREM page_rank non-exists-element
  36. (integer)0



Redis Zrangebyscore 命令


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

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

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

举个例子:

  1. ZRANGEBYSCORE zset (15

返回所有符合条件 1

  1. ZRANGEBYSCORE zset (5(10

则返回所有符合条件 5

语法

redis Zrangebyscore 命令基本语法如下:

  1. redis 127.0.0.1:6379> ZRANGEBYSCORE key min max [WITHSCORES][LIMIT offset count]

可用版本

>= 1.0.5

返回值

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

实例

  1. redis 127.0.0.1:6379> ZADD salary 2500 jack # 测试数据
  2. (integer)0
  3. redis 127.0.0.1:6379> ZADD salary 5000 tom
  4. (integer)0
  5. redis 127.0.0.1:6379> ZADD salary 12000 peter
  6. (integer)0
  7.  
  8. redis 127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf # 显示整个有序集
  9. 1)"jack"
  10. 2)"tom"
  11. 3)"peter"
  12.  
  13. redis 127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf WITHSCORES # 显示整个有序集及成员的 score 值
  14. 1)"jack"
  15. 2)"2500"
  16. 3)"tom"
  17. 4)"5000"
  18. 5)"peter"
  19. 6)"12000"
  20.  
  21. redis 127.0.0.1:6379> ZRANGEBYSCORE salary -inf 5000 WITHSCORES # 显示工资 <=5000 的所有成员
  22. 1)"jack"
  23. 2)"2500"
  24. 3)"tom"
  25. 4)"5000"
  26.  
  27. redis 127.0.0.1:6379> ZRANGEBYSCORE salary (5000400000# 显示工资大于 5000 小于等于 400000 的成员
  28. 1)"peter"




Redis Zremrangebylex 命令


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

语法

redis Zremrangebylex命令基本语法如下:

  1. redis 127.0.0.1:6379> ZREMRANGEBYLEX key min max

可用版本

>= 2.8.9

返回值

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

实例

  1. redis 127.0.0.1:6379> ZADD myzset 0 aaaa 0 b 0 c 0 d 0 e
  2. (integer)5
  3. redis 127.0.0.1:6379> ZADD myzset 0 foo 0 zap 0 zip 0 ALPHA 0 alpha
  4. (integer)5
  5. redis 127.0.0.1:6379> ZRANGE myzset 0-1
  6. 1)"ALPHA"
  7. 2)"aaaa"
  8. 3)"alpha"
  9. 4)"b"
  10. 5)"c"
  11. 6)"d"
  12. 7)"e"
  13. 8)"foo"
  14. 9)"zap"
  15. 10)"zip"
  16. redis 127.0.0.1:6379> ZREMRANGEBYLEX myzset [alpha [omega
  17. (integer)6
  18. redis 127.0.0.1:6379> ZRANGE myzset 0-1
  19. 1)"ALPHA"
  20. 2)"aaaa"
  21. 3)"zap"
  22. 4)"zip"
  23. redis>



Redis Zremrangebyscore 命令


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

语法

redis Zremrangebyscore 命令基本语法如下:

  1. redis 127.0.0.1:6379> ZREMRANGEBYSCORE key min max

可用版本

>= 1.2.0

返回值

被移除成员的数量。

实例

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



Redis Zrevrange 命令


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

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

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

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

语法

redis Zrevrange 命令基本语法如下:

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

可用版本

>= 1.2.0

返回值

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

实例

  1. redis 127.0.0.1:6379> ZRANGE salary 0-1 WITHSCORES # 递增排列
  2. 1)"peter"
  3. 2)"3500"
  4. 3)"tom"
  5. 4)"4000"
  6. 5)"jack"
  7. 6)"5000"
  8.  
  9. redis 127.0.0.1:6379> ZREVRANGE salary 0-1 WITHSCORES # 递减排列
  10. 1)"jack"
  11. 2)"5000"
  12. 3)"tom"
  13. 4)"4000"
  14. 5)"peter"
  15. 6)"3500"



Redis Zrevrangebyscore 命令


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

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

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

语法

redis Zrevrangebyscore 命令基本语法如下:

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

可用版本

>= 2.2.0

返回值

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

实例

  1. redis 127.0.0.1:6379> ZADD salary 10086 jack
  2. (integer)1
  3. redis > ZADD salary 5000 tom
  4. (integer)1
  5. redis 127.0.0.1:6379> ZADD salary 7500 peter
  6. (integer)1
  7. redis 127.0.0.1:6379> ZADD salary 3500 joe
  8. (integer)1
  9.  
  10. redis 127.0.0.1:6379> ZREVRANGEBYSCORE salary +inf -inf # 逆序排列所有成员
  11. 1)"jack"
  12. 2)"peter"
  13. 3)"tom"
  14. 4)"joe"
  15.  
  16. redis 127.0.0.1:6379> ZREVRANGEBYSCORE salary 100002000# 逆序排列薪水介于 10000 和 2000 之间的成员
  17. 1)"peter"
  18. 2)"tom"
  19. 3)"joe"


Redis Zrevrank 命令


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

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

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

语法

redis Zrevrank 命令基本语法如下:

  1. redis 127.0.0.1:6379> ZREVRANK key member

可用版本

>= 2.2.0

返回值

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

实例

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





Redis Zscore 命令


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

语法

redis Zscore 命令基本语法如下:

  1. redis 127.0.0.1:6379> ZSCORE key member

可用版本

>= 1.2.0

返回值

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

实例

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




Redis Zunionstore 命令


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

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

语法

redis Zunionstore 命令基本语法如下:

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

可用版本

>= 2.0.0

返回值

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

实例

  1. redis 127.0.0.1:6379> ZRANGE programmer 0-1 WITHSCORES
  2. 1)"peter"
  3. 2)"2000"
  4. 3)"jack"
  5. 4)"3500"
  6. 5)"tom"
  7. 6)"5000"
  8.  
  9. redis 127.0.0.1:6379> ZRANGE manager 0-1 WITHSCORES
  10. 1)"herry"
  11. 2)"2000"
  12. 3)"mary"
  13. 4)"3500"
  14. 5)"bob"
  15. 6)"4000"
  16.  
  17. redis 127.0.0.1:6379> ZUNIONSTORE salary 2 programmer manager WEIGHTS 13# 公司决定加薪。。。除了程序员。。。
  18. (integer)6
  19.  
  20. redis 127.0.0.1:6379> ZRANGE salary 0-1 WITHSCORES
  21. 1)"peter"
  22. 2)"2000"
  23. 3)"jack"
  24. 4)"3500"
  25. 5)"tom"
  26. 6)"5000"
  27. 7)"herry"
  28. 8)"6000"
  29. 9)"mary"
  30. 10)"10500"
  31. 11)"bob"
  32. 12)"12000"


Redis Zscan 命令


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

语法

redis Zscan 命令基本语法如下:

  1. 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 HyperLogLog 的基本命令:

序号命令及描述
1 PFADD key element [element ...] 
添加指定元素到 HyperLogLog 中。
2 PFCOUNT key [key ...] 
返回给定 HyperLogLog 的基数估算值。
3 PFMERGE destkey sourcekey [sourcekey ...] 
将多个 HyperLogLog 合并为一个 HyperLogLog

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 的工作过程:

  1. redis 127.0.0.1:6379> PFADD w3ckey "redis"
  2.  
  3. 1)(integer)1
  4.  
  5. redis 127.0.0.1:6379> PFADD w3ckey "mongodb"
  6.  
  7. 1)(integer)1
  8.  
  9. redis 127.0.0.1:6379> PFADD w3ckey "mysql"
  10.  
  11. 1)(integer)1
  12.  
  13. redis 127.0.0.1:6379> PFCOUNT w3ckey
  14.  
  15. (integer)3


Redis Debug Segfault 命令


Redis Debug Segfault 命令执行一个非法的内存访问从而让 Redis 崩溃,仅在开发时用于 BUG 调试。

语法

redis Debug Segfault 命令基本语法如下:

  1. redis 127.0.0.1:6379> DEBUG SEGFAULT

可用版本

>= 1.0.0

返回值

实例

  1. redis 127.0.0.1:6379> DEBUG SEGFAULT
  2. Couldnot connect to Redis at 127.0.0.1:6379:Connection refused
  3. not connected>



Redis Pfcount 命令


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

语法

redis Pfcount 命令基本语法如下:

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

可用版本

>= 2.8.9

返回值

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

实例

  1. redis 127.0.0.1:6379> PFADD hll foo bar zap
  2. (integer)1
  3. redis 127.0.0.1:6379> PFADD hll zap zap zap
  4. (integer)0
  5. redis 127.0.0.1:6379> PFADD hll foo bar
  6. (integer)0
  7. redis 127.0.0.1:6379> PFCOUNT hll
  8. (integer)3
  9. redis 127.0.0.1:6379> PFADD some-other-hll 123
  10. (integer)1
  11. redis 127.0.0.1:6379> PFCOUNT hll some-other-hll
  12. (integer)6
  13. redis>



Redis Pgmerge 命令


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

语法

redis Pgmerge 命令基本语法如下:

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

可用版本

>= 2.8.9

返回值

返回 OK。

实例

  1. redis 127.0.0.1:6379> PFADD hll1 foo bar zap a
  2. (integer)1
  3. redis 127.0.0.1:6379> PFADD hll2 a b c foo
  4. (integer)1
  5. redis 127.0.0.1:6379> PFMERGE hll3 hll1 hll2
  6. OK
  7. redis 127.0.0.1:6379> PFCOUNT hll3
  8. (integer)6
  9. redis>



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 发布订阅


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

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

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

pubsub1

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

pubsub2


实例

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

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

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

  1. redis 127.0.0.1:6379> PUBLISH redisChat "Redis is a great caching technique"
  2.  
  3. (integer)1
  4.  
  5. redis 127.0.0.1:6379> PUBLISH redisChat "Learn redis by apiref.com"
  6.  
  7. (integer)1
  8.  
  9. # 订阅者的客户端会显示如下消息
  10. 1)"message"
  11. 2)"redisChat"
  12. 3)"Redis is a great caching technique"
  13. 1)"message"
  14. 2)"redisChat"
  15. 3)"Learn redis by apiref.com"


Redis Psubscribe 命令


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

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

语法

redis Psubscribe 命令基本语法如下:

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

可用版本

>= 2.0.0

返回值

接收到的信息。

实例

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



Redis Pubsub 命令


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

语法

redis Pubsub 命令基本语法如下:

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

可用版本

>= 2.8.0

返回值

由活跃频道组成的列表。

实例

  1. redis 127.0.0.1:6379> PUBSUB CHANNELS
  2. (empty list orset)



Redis Publish 命令


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

语法

redis Publish 命令基本语法如下:

  1. redis 127.0.0.1:6379> PUBLISH channel message

可用版本

>= 2.0.0

返回值

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

实例

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



Redis Punsubscribe 命令


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

语法

redis Punsubscribe 命令基本语法如下:

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

可用版本

>= 2.0.0

返回值

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

实例

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



Redis Subscribe 命令


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

语法

redis Subscribe 命令基本语法如下:

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

可用版本

>= 2.0.0

返回值

接收到的信息

实例

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




Redis Unsubscribe 命令


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

语法

redis Unsubscribe 命令基本语法如下:

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

可用版本

>= 2.0.0

返回值

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

实例

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



Redis 事务命令

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

序号命令及描述
1 DISCARD 
取消事务,放弃执行事务块内的所有命令。
2 EXEC 
执行所有事务块内的命令。
3 MULTI 
标记一个事务块的开始。
4 UNWATCH 
取消 WATCH 命令对所有 key 的监视。
5 WATCH key [key ...] 
监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

Redis 事务


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

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

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

  • 开始事务。
  • 命令入队。
  • 执行事务。

实例

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

  1. redis 127.0.0.1:6379> MULTI
  2. OK
  3.  
  4. redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
  5. QUEUED
  6.  
  7. redis 127.0.0.1:6379> GET book-name
  8. QUEUED
  9.  
  10. redis 127.0.0.1:6379> SADD tag "C++""Programming""Mastering Series"
  11. QUEUED
  12.  
  13. redis 127.0.0.1:6379> SMEMBERS tag
  14. QUEUED
  15.  
  16. redis 127.0.0.1:6379> EXEC
  17. 1) OK
  18. 2)"Mastering C++ in 21 days"
  19. 3)(integer)3
  20. 4)1)"Mastering Series"
  21. 2)"C++"
  22. 3)"Programming"


Redis Discard 命令


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

语法

redis Discard 命令基本语法如下:

  1. redis 127.0.0.1:6379> DISCARD

可用版本

>= 2.0.0

返回值

总是返回 OK 。

实例

  1. redis 127.0.0.1:6379> MULTI
  2. OK
  3.  
  4. redis 127.0.0.1:6379> PING
  5. QUEUED
  6.  
  7. redis 127.0.0.1:6379> SET greeting "hello"
  8. QUEUED
  9.  
  10. redis 127.0.0.1:6379> DISCARD
  11. OK



Redis Exec 命令


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

语法

redis Exec 命令基本语法如下:

  1. redis 127.0.0.1:6379> Exec

可用版本

>= 1.2.0

返回值

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

实例

  1. # 事务被成功执行
  2.  
  3. redis 127.0.0.1:6379> MULTI
  4. OK
  5.  
  6. redis 127.0.0.1:6379> INCR user_id
  7. QUEUED
  8.  
  9. redis 127.0.0.1:6379> INCR user_id
  10. QUEUED
  11.  
  12. redis 127.0.0.1:6379> INCR user_id
  13. QUEUED
  14.  
  15. redis 127.0.0.1:6379> PING
  16. QUEUED
  17.  
  18. redis 127.0.0.1:6379> EXEC
  19. 1) (integer) 1
  20. 2) (integer) 2
  21. 3) (integer) 3
  22. 4) PONG
  23.  
  24.  
  25. # 监视 key ,且事务成功执行
  26.  
  27. redis 127.0.0.1:6379> WATCH lock lock_times
  28. OK
  29.  
  30. redis 127.0.0.1:6379> MULTI
  31. OK
  32.  
  33. redis 127.0.0.1:6379> SET lock "huangz"
  34. QUEUED
  35.  
  36. redis 127.0.0.1:6379> INCR lock_times
  37. QUEUED
  38.  
  39. redis 127.0.0.1:6379> EXEC
  40. 1) OK
  41. 2) (integer) 1
  42.  
  43.  
  44. # 监视 key ,且事务被打断
  45.  
  46. redis 127.0.0.1:6379> WATCH lock lock_times
  47. OK
  48.  
  49. redis 127.0.0.1:6379> MULTI
  50. OK
  51.  
  52. redis 127.0.0.1:6379> SET lock "joe" # 就在这时,另一个客户端修改了 lock_times 的值
  53. QUEUED
  54.  
  55. redis 127.0.0.1:6379> INCR lock_times
  56. QUEUED
  57.  
  58. redis 127.0.0.1:6379> EXEC # 因为 lock_times 被修改, joe 的事务执行失败
  59. (nil)



Redis Multi 命令


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

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

语法

redis Multi 命令基本语法如下:

  1. redis 127.0.0.1:6379> Multi

可用版本

>= 1.2.0

返回值

总是返回 OK 。

实例

  1. redis 127.0.0.1:6379> MULTI # 标记事务开始
  2. OK
  3.  
  4. redis 127.0.0.1:6379> INCR user_id # 多条命令按顺序入队
  5. QUEUED
  6.  
  7. redis 127.0.0.1:6379> INCR user_id
  8. QUEUED
  9.  
  10. redis 127.0.0.1:6379> INCR user_id
  11. QUEUED
  12.  
  13. redis 127.0.0.1:6379> PING
  14. QUEUED
  15.  
  16. redis 127.0.0.1:6379> EXEC # 执行
  17. 1) (integer) 1
  18. 2) (integer) 2
  19. 3) (integer) 3
  20. 4) PONG





Redis Unwatch 命令


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

语法

redis Unwatch 命令基本语法如下:

  1. redis 127.0.0.1:6379> UNWATCH

可用版本

>= 2.2.0

返回值

总是返回 OK 。

实例

  1. redis 127.0.0.1:6379> WATCH lock lock_times
  2. OK
  3.  
  4. redis 127.0.0.1:6379> UNWATCH
  5. OK




Redis Watch 命令


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

语法

redis Watch 命令基本语法如下:

  1. redis 127.0.0.1:6379> Watch

可用版本

>= 2.2.0

返回值

总是返回 OK 。

实例

  1. redis> WATCH lock lock_times
  2. OK








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 脚本


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

语法

Eval 命令的基本语法如下:

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

实例

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

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





Redis Eval 命令


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

语法

redis Eval 命令基本语法如下:

  1. 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

实例

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



Redis Evalsha 命令


Redis Evalsha 命令根据给定的 sha1 校验码,执行缓存在服务器中的脚本。

语法

redis Evalsha 命令基本语法如下:

  1. 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

实例

  1. redis 127.0.0.1:6379> SCRIPT LOAD "return 'hello moto'"
  2. "232fd51614574cf0867b83d384a5e898cfd24e5a"
  3.  
  4. redis 127.0.0.1:6379> EVALSHA "232fd51614574cf0867b83d384a5e898cfd24e5a" 0
  5. "hello moto"



Redis Script Exists 命令


Redis Script Exists 命令用于校验指定的脚本是否已经被保存在缓存当中。

语法

redis Script Exists 命令基本语法如下:

  1. redis 127.0.0.1:6379> EVALSHA sha1 numkeys key [key ...] arg [arg ...]

可用版本

>= 2.6.0

返回值

一个列表,包含 0 和 1 ,前者表示脚本不存在于缓存,后者表示脚本已经在缓存里面了。

列表中的元素和给定的 SHA1 校验和保持对应关系,比如列表的第三个元素的值就表示第三个 SHA1 校验和所指定的脚本在缓存中的状态。

实例

  1. redis 127.0.0.1:6379> SCRIPT LOAD "return 'hello moto'" # 载入一个脚本
  2. "232fd51614574cf0867b83d384a5e898cfd24e5a"
  3.  
  4. redis 127.0.0.1:6379> SCRIPT EXISTS 232fd51614574cf0867b83d384a5e898cfd24e5a
  5. 1) (integer) 1
  6.  
  7. redis 127.0.0.1:6379> SCRIPT FLUSH # 清空缓存
  8. OK
  9.  
  10. redis 127.0.0.1:6379> SCRIPT EXISTS 232fd51614574cf0867b83d384a5e898cfd24e5a
  11. 1) (integer) 0



Redis Script Flush 命令


Redis Script Flush 命令用于清除所有 Lua 脚本缓存。

语法

redis Script Flush 命令基本语法如下:

  1. redis 127.0.0.1:6379> SCRIPT FLUSH

可用版本

>= 2.6.0

返回值

总是返回 OK

实例

  1. redis 127.0.0.1:6379> SCRIPT FLUSH
  2. OK




Redis Script kill 命令


Redis Script kill 命令用于杀死当前正在运行的 Lua 脚本,当且仅当这个脚本没有执行过任何写操作时,这个命令才生效。

这个命令主要用于终止运行时间过长的脚本,比如一个因为 BUG 而发生无限循环的脚本。

SCRIPT KILL 执行之后,当前正在运行的脚本会被杀死,执行这个脚本的客户端会从 EVAL 命令的阻塞当中退出,并收到一个错误作为返回值。

语法

redis Script kill 命令基本语法如下:

  1. redis 127.0.0.1:6379> SCRIPT KILL

可用版本

>= 2.6.0

返回值

总是返回 OK

实例

  1. redis 127.0.0.1:6379> SCRIPT KILL
  2. OK



Redis Script Load 命令


Redis Script Load 命令用于将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本。

EVAL 命令也会将脚本添加到脚本缓存中,但是它会立即对输入的脚本进行求值。

如果给定的脚本已经在缓存里面了,那么不执行任何操作。

在脚本被加入到缓存之后,通过 EVALSHA 命令,可以使用脚本的 SHA1 校验和来调用这个脚本。

脚本可以在缓存中保留无限长的时间,直到执行 SCRIPT FLUSH 为止。

关于使用 Redis 对 Lua 脚本进行求值的更多信息,请参见 EVAL 命令。

语法

redis Script Load 命令基本语法如下:

  1. redis 127.0.0.1:6379> SCRIPT LOAD script

可用版本

>= 2.6.0

返回值

给定脚本的 SHA1 校验和

实例

  1. redis 127.0.0.1:6379> SCRIPT LOAD "return 1"
  2. "e0e1f9fabfc9d4800c877a703b823ac0578ff8db"





Redis 连接命令

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


序号命令及描述
1 AUTH password 
验证密码是否正确
2 ECHO message 
打印字符串
3 PING 
查看服务是否运行
4 QUIT 
关闭当前连接
5 SELECT index 
切换到指定的数据库



Redis 连接


Redis 连接命令主要是用于连接 redis 服务。

实例

以下实例演示了客户端如何通过密码验证连接到 redis 服务,并检测服务是否在运行:

  1. redis 127.0.0.1:6379> AUTH "password"
  2. OK
  3. redis 127.0.0.1:6379> PING
  4. PONG




Redis Auth 命令


Redis Auth 命令用于检测给定的密码和配置文件中的密码是否相符。

语法

redis Auth 命令基本语法如下:

  1. redis 127.0.0.1:6379> AUTH PASSWORD

可用版本

>= 1.0.0

返回值

密码匹配时返回 OK ,否则返回一个错误。

实例

  1. redis 127.0.0.1:6379> AUTH PASSWORD
  2. (error) ERR Client sent AUTH, but no password is set
  3. redis 127.0.0.1:6379> CONFIG SET requirepass "mypass"
  4. OK
  5. redis 127.0.0.1:6379> AUTH mypass
  6. Ok


Redis Echo 命令


Redis Echo 命令用于打印给定的字符串。

语法

redis Echo 命令基本语法如下:

  1. redis 127.0.0.1:6379> ECHO message

可用版本

>= 1.0.0

返回值

返回字符串本身。

实例

  1. redis 127.0.0.1:6379> ECHO "Hello World"
  2. "Hello World"



Redis Ping 命令


Redis Ping 命令使用客户端向 Redis 服务器发送一个 PING ,如果服务器运作正常的话,会返回一个 PONG 。

通常用于测试与服务器的连接是否仍然生效,或者用于测量延迟值。

语法

redis Ping 命令基本语法如下:

  1. redis 127.0.0.1:6379> PING

可用版本

>= 1.0.0

返回值

如果连接正常就返回一个 PONG ,否则返回一个连接错误。

实例

  1. # 客户端和服务器连接正常
  2.  
  3. redis 127.0.0.1:6379> PING
  4. PONG
  5.  
  6. # 客户端和服务器连接不正常(网络不正常或服务器未能正常运行)
  7.  
  8. redis 127.0.0.1:6379> PING
  9. Could not connect to Redis at 127.0.0.1:6379: Connection refused



Redis Quit 命令


Redis Quit 命令用于关闭与当前客户端与redis服务的连接。

一旦所有等待中的回复(如果有的话)顺利写入到客户端,连接就会被关闭。

语法

redis Quit 命令基本语法如下:

  1. redis 127.0.0.1:6379> QUIT

可用版本

>= 1.0.0

返回值

总是返回 OK 。

实例

  1. redis 127.0.0.1:6379> QUIT
  2. OK



Redis Select 命令


Redis Select 命令用于切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值。

语法

redis Select 命令基本语法如下:

  1. redis 127.0.0.1:6379> SELECT index

可用版本

>= 1.0.0

返回值

总是返回 OK 。

实例

  1. redis 127.0.0.1:6379> SET db_number 0 # 默认使用 0 号数据库
  2. OK
  3.  
  4. redis 127.0.0.1:6379> SELECT 1 # 使用 1 号数据库
  5. OK
  6.  
  7. redis 127.0.0.1:6379[1]> GET db_number # 已经切换到 1 号数据库,注意 Redis 现在的命令提示符多了个 [1]
  8. (nil)
  9.  
  10. redis 127.0.0.1:6379[1]> SET db_number 1
  11. OK
  12.  
  13. redis 127.0.0.1:6379[1]> GET db_number
  14. "1"
  15.  
  16. redis 127.0.0.1:6379[1]> SELECT 3 # 再切换到 3 号数据库
  17. OK
  18.  
  19. redis 127.0.0.1:6379[3]> # 提示符从 [1] 改变成了 [3]



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 服务器


Redis 服务器命令主要是用于管理 redis 服务。

实例

以下实例演示了如何获取 redis 服务器的统计信息:

  1. redis 127.0.0.1:6379> INFO
  2.  
  3. # Server
  4. redis_version:2.8.13
  5. redis_git_sha1:00000000
  6. redis_git_dirty:0
  7. redis_build_id:c2238b38b1edb0e2
  8. redis_mode:standalone
  9. os:Linux 3.5.0-48-generic x86_64
  10. arch_bits:64
  11. multiplexing_api:epoll
  12. gcc_version:4.7.2
  13. process_id:3856
  14. run_id:0e61abd297771de3fe812a3c21027732ac9f41fe
  15. tcp_port:6379
  16. uptime_in_seconds:11554
  17. uptime_in_days:0
  18. hz:10
  19. lru_clock:16651447
  20. config_file:
  21.  
  22. # Clients
  23. connected_clients:1
  24. client-longest_output_list:0
  25. client-biggest_input_buf:0
  26. blocked_clients:0
  27.  
  28. # Memory
  29. used_memory:589016
  30. used_memory_human:575.21K
  31. used_memory_rss:2461696
  32. used_memory_peak:667312
  33. used_memory_peak_human:651.67K
  34. used_memory_lua:33792
  35. mem_fragmentation_ratio:4.18
  36. mem_allocator:jemalloc-3.6.0
  37.  
  38. # Persistence
  39. loading:0
  40. rdb_changes_since_last_save:3
  41. rdb_bgsave_in_progress:0
  42. rdb_last_save_time:1409158561
  43. rdb_last_bgsave_status:ok
  44. rdb_last_bgsave_time_sec:0
  45. rdb_current_bgsave_time_sec:-1
  46. aof_enabled:0
  47. aof_rewrite_in_progress:0
  48. aof_rewrite_scheduled:0
  49. aof_last_rewrite_time_sec:-1
  50. aof_current_rewrite_time_sec:-1
  51. aof_last_bgrewrite_status:ok
  52. aof_last_write_status:ok
  53.  
  54. # Stats
  55. total_connections_received:24
  56. total_commands_processed:294
  57. instantaneous_ops_per_sec:0
  58. rejected_connections:0
  59. sync_full:0
  60. sync_partial_ok:0
  61. sync_partial_err:0
  62. expired_keys:0
  63. evicted_keys:0
  64. keyspace_hits:41
  65. keyspace_misses:82
  66. pubsub_channels:0
  67. pubsub_patterns:0
  68. latest_fork_usec:264
  69.  
  70. # Replication
  71. role:master
  72. connected_slaves:0
  73. master_repl_offset:0
  74. repl_backlog_active:0
  75. repl_backlog_size:1048576
  76. repl_backlog_first_byte_offset:0
  77. repl_backlog_histlen:0
  78.  
  79. # CPU
  80. used_cpu_sys:10.49
  81. used_cpu_user:4.96
  82. used_cpu_sys_children:0.00
  83. used_cpu_user_children:0.01
  84.  
  85. # Keyspace
  86. db0:keys=94,expires=1,avg_ttl=41638810
  87. db1:keys=1,expires=0,avg_ttl=0
  88. db3:keys=1,expires=0,avg_ttl=0










为人:谦逊、激情、博学、审问、慎思、明辨、 笃行
学问:纸上得来终觉浅,绝知此事要躬行
为事:工欲善其事,必先利其器。
态度:道阻且长,行则将至;行而不辍,未来可期
转载请标注出处!
原文地址:https://www.cnblogs.com/ios9/p/14742687.html