注意:以下命令并不是Redis全部命令。

string

redis字符串可以存储一个字符串。

SET key value

设置指定 key 的值。

127.0.0.1:6379> SET animal cat # 设置animal的值为cat
OK

GET key

获取指定 key 的值。

127.0.0.1:6379> GET animal
"cat"
127.0.0.1:6379> GET animal2
(nil) # 不存在

SETEX key seconds value

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

127.0.0.1:6379> SETEX animal 60 cat # 设置有效期为60秒
OK
127.0.0.1:6379> TTL animal # 查询animal有效期还剩多少秒
58
127.0.0.1:6379> GET animal # 60秒后再查返回(nil)
(nil)

PSETEX key milliseconds value

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

SETNX key value

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

127.0.0.1:6379> SETNX animal cat
(integer) 1 # 返回1说明设置成功
127.0.0.1:6379> SETNX animal dog
(integer) 0 # 返回0说明设置失败
127.0.0.1:6379> GET animal
"cat" # 获取出来的还是第一次设置的cat,说明第二次没设置成功

INCR key

将 key 中储存的数字值增一(注意值必须是数字才行, 而且key必须存在)。

127.0.0.1:6379> INCR animal # 值不是数字执行命令报错
(error) ERR value is not an integer or out of range
127.0.0.1:6379> SET num 1
OK
127.0.0.1:6379> INCR num # 自增1
(integer) 2 # 这里返回自增后的数字
127.0.0.1:6379> GET num
"2"

DECR key

将 key 中储存的数字值减一(注意值必须是数字才行, 而且key必须存在)。

127.0.0.1:6379> DECR num # 减1
(integer) 0 # 这里返回减1后的数字
127.0.0.1:6379> GET num
"0"

INCRBY key increment/DECRBY key decrement

与上面的INCR key和DECR key不同的是,这里可以通过第二个参数指定要增加或减少的数字。

hash

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

HSET key field value

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

127.0.0.1:6379> HSET person name xiaohong # key为person,field为name,value为xiaohong
(integer) 1
127.0.0.1:6379> HSET person age 18
(integer) 1

HGET key field value

获取存储在哈希表中指定字段的值。

127.0.0.1:6379> HGET person name
"xiaohong"
127.0.0.1:6379> HGET person age
"18"

HDEL key field1 [field2]

删除一个或多个哈希表字段。

127.0.0.1:6379> HDEL person name age
(integer) 2

HMSET key field1 value1 [field2 value2]

同时将多个 field-value (域-值)对设置到哈希表 key 中。

127.0.0.1:6379> HMSET person name xiaohong age 18
OK

HMGET key field1 [field2]

获取所有给定字段的值。

127.0.0.1:6379> HMGET person name age
1) "xiaohong"
2) "18"

HSETNX key field value

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

127.0.0.1:6379> HSETNX person name xiaoming
(integer) 0 # 返回0说明已经存在,设置失败

HEXISTS key field

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

127.0.0.1:6379> HEXISTS person name
(integer) 1 # 返回1说明存在
127.0.0.1:6379> HEXISTS person name2
(integer) 0 # 返回0说明不存在

HGETALL key

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

127.0.0.1:6379> HGETALL person
1) "name"
2) "xiaohong"
3) "age"
4) "18"

HKEYS key

获取在哈希表中指定 key 的所有字段。

127.0.0.1:6379> HKEYS person
1) "name"
2) "age"

HVALS key

获取在哈希表中指定 key 的所有字段。

127.0.0.1:6379> HVALS person
1) "xiaohong"
2) "18"

HLEN key

获取哈希表中字段的数量。

127.0.0.1:6379> HLEN person
(integer) 1

list

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

RPUSH key value1 [value2]

在列表中添加一个或多个值(push到列表尾部)。

127.0.0.1:6379> RPUSH student stu1 stu2 stu3 stu4 stu5 stu6
(integer) 6
127.0.0.1:6379> RPUSH student stu7
(integer) 7

LPUSH key value1 [value2]

将一个或多个值插入到列表头部。

127.0.0.1:6379> LPUSH student stu0
(integer) 8

LRANGE key start stop

获取列表指定范围内的元素。

127.0.0.1:6379> LRANGE student 0 3
1) "stu0"
2) "stu1"
3) "stu2"
4) "stu3"

RPOP key

移除列表的最后一个元素,返回值为移除的元素。

127.0.0.1:6379> RPOP student
"stu7" # 返回被移除的值

LPOP key

移除列表的第一个元素,返回值为移除的元素。

127.0.0.1:6379> LPOP student
"stu0" # 返回被移除的值

BLPOP key1 [key2] timeout

移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止(单位:秒)。

127.0.0.1:6379> BLPOP student 10 # 10秒后超时
1) "student"
2) "stu1"

BRPOP key1 [key2] timeout

移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止(单位:秒)。

127.0.0.1:6379> BRPOP student 10 # 10秒后超时
1) "student"
2) "stu6"

LREM key count value

移除列表元素。

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

LINDEX key index

通过索引获取列表中的元素。

127.0.0.1:6379> LINDEX student 0
"stu2"

set

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

SADD key member1 [member2]

向集合添加一个或多个成员。

127.0.0.1:6379> SADD letter A B C D E F
(integer) 6

SPOP key [count]

移除并返回集合中的随机元素。

127.0.0.1:6379> SPOP letter 1
"F"

SREM key member1 [member2]

移除集合中一个或多个成员。

127.0.0.1:6379> SREM letter D E
(integer) 2

SMEMBERS key

返回集合中的所有成员。

127.0.0.1:6379> SMEMBERS letter
1) "A"
2) "B"
3) "C"

SISMEMBER key member

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

127.0.0.1:6379> SISMEMBER letter A
(integer) 1 # 返回1说明存在
127.0.0.1:6379> SISMEMBER letter a
(integer) 0 # 返回0说明不存在

SCARD key

获取集合的成员数。

127.0.0.1:6379> SCARD letter
(integer) 3

SDIFF key1 [key2]

返回第一个集合与其他集合之间的差集。

SINTER key1 [key2]

返回给定所有集合的交集

SUNION key1 [key2]

返回所有给定集合的并集。

sorted set

Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。

ZADD key score1 member1 [score2 member2]

向有序集合添加一个或多个成员,或者更新已存在成员的分数。

127.0.0.1:6379> ZADD math 80 xiaohong 90 xiaoming
(integer) 2 # 成功添加两个成员
127.0.0.1:6379> ZADD math 80 xiaozhang 95 xiaoming
(integer) 1 # 成功添加xiaozhang,并将xiaoming的score更新为95

ZSCORE key member

返回有序集中,成员的分数值。

127.0.0.1:6379> ZSCORE math xiaoming
"95"

ZRANK key member

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

127.0.0.1:6379> ZRANK math xiaoming
(integer) 2

ZREVRANK key member【倒序】

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

127.0.0.1:6379> ZREVRANK math xiaoming
(integer) 0 # 返回0代表xiaoming排名第一
127.0.0.1:6379> ZREVRANK math xiaocai
(nil) # 不存在

ZRANGE key start stop [WITHSCORES]

返回有序集中,指定区间内的成员,其中成员的位置按分数值递增(从小到大)来排序。

127.0.0.1:6379> ZRANGE math 0 -1 WITHSCORES # 返回所有成员,WITHSCORES表示返回结果中带score数据
1) "xiaohong"
2) "80"
3) "xiaozhang"
4) "80"
5) "xiaoming"
6) "95"

ZREVRANGE key start stop [WITHSCORES] 【倒序】

返回有序集中指定区间内的成员,通过索引,分数从高到低。

127.0.0.1:6379> ZREVRANGE math 0 -1 WITHSCORES # 返回所有成功,WITHSCORES表示返回结果中带score数据
1) "xiaoming"
2) "95"
3) "xiaozhang"
4) "80"
5) "xiaohong"
6) "80"
127.0.0.1:6379> ZREVRANGE math 0 -1
1) "xiaoming"
2) "xiaozhang"
3) "xiaohong"

ZRANGEBYSCORE key min max [WITHSCORES]

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

127.0.0.1:6379> ZRANGEBYSCORE math -inf inf WITHSCORES # 显示整个有序集合
1) "xiaohong"
2) "80"
3) "xiaozhang"
4) "80"
5) "xiaoming"
6) "95"
127.0.0.1:6379> ZRANGEBYSCORE math (80 95 WITHSCORES # 显示80 < score <=95的有序集合
1) "xiaoming"
2) "95"

ZREVRANGEBYSCORE key max min [WITHSCORES] 【倒序】

返回有序集中指定分数区间内的成员,分数从高到低排序。【注意参数是max在min前面】

127.0.0.1:6379> ZREVRANGEBYSCORE math 100 90 WITHSCORES # 查询分数在90-100之间的成员
1) "xiaoming"
2) "95"

ZCARD key

获取有序集合的成员数。

127.0.0.1:6379> ZCARD math
(integer) 3 # 有三个成员

ZCOUNT key min max

计算在有序集合中指定区间分数的成员数。【不知道为什么这里不用ZCOUNTBYSCORE】

127.0.0.1:6379> ZCOUNT math (80 95
(integer) 1

ZREM key member [member …]

移除有序集合中的一个或多个成员。

127.0.0.1:6379> ZREM math xiaohong
(integer) 1

ZREMRANGEBYRANK key start stop

移除有序集合中给定的排名区间的所有成员。

ZREMRANGEBYSCORE key min max

移除有序集合中给定的分数区间的所有成员。

hyperloglog

Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。在 Redis 里面,每HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。

PFADD key element [element …]

添加指定元素到 HyperLogLog 中。

127.0.0.1:6379> PFADD num1 1 2 3 4 5
(integer) 1
127.0.0.1:6379> PFADD num2 5 6 7 8 9
(integer) 1

PFCOUNT key [key …]

返回给定 HyperLogLog 的基数估算值。

127.0.0.1:6379> PFCOUNT num1
(integer) 5
127.0.0.1:6379> PFCOUNT num2
(integer) 5
127.0.0.1:6379> PFCOUNT num1 num2
(integer) 9 # 一共10个数,因为num1和num2都存在数字5,所以基数为9

PFMERGE destkey sourcekey [sourcekey …]

将多个 HyperLogLog 合并为一个 HyperLogLog。

127.0.0.1:6379> PFMERGE num3 num1 num2 # 将num1和num2合并成num3
OK
127.0.0.1:6379> PFCOUNT num3
(integer) 9

pub/sub

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

SUBSCRIBE channel [channel …]

订阅给定的一个或多个频道的信息。

127.0.0.1:6379> SUBSCRIBE chatroom1 # 订阅chatroom1频道
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "chatroom1"
3) (integer) 1

PSUBSCRIBE pattern [pattern …]

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

127.0.0.1:6379> SUBSCRIBE chatroom* # 订阅所有以chatroom开头频道
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "chatroom*"
3) (integer) 1

PUBLISH channel message

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

127.0.0.1:6379> PUBLISH chatroom1 hello # 监听chatroom1和chatroom*的都可以接收到这个消息
(integer) 2 # 返回2说明有两个订阅监听到了这个消息

UNSUBSCRIBE channel [channel …]

指退订给定的频道。【 client 中输入了 SUBSCRIBE 命令之后无法再去处理其他的命令,但还是可以去处理 SUBSCRIBE、PSUBSCRIBE、UNSUBSCRIBE、PUNSUBSCRIBE、PING 以及 QUIT 这六种命令,client 并不包括 redis-cli,而是指的是 Jedis、lettuce 这类的 redis 客户端。 也就是说只有 Jedis 以及 lettuce 这类的 redis 客户端才可以在运行了 subscribe 命令之后再去执行 SUBSCRIBE、PSUBSCRIBE、UNSUBSCRIBE、PUNSUBSCRIBE、PING 以及 QUIT 这六种命令。】

PUNSUBSCRIBE pattern [pattern …]

退订所有给定模式的频道。

PUBSUB subcommand [argument [argument …]]

查看订阅与发布系统状态。

127.0.0.1:6379> PUBSUB channels
1) "chatroom1"
2) "chatroom2"

GEO

Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作。

GEOADD key longitude latitude member [longitude latitude member …]

用于存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中。

GEOPOS key member [member …]

用于从给定的 key 里返回所有指定名称(member)的位置(经度和纬度),不存在的返回 nil。

GEODIST key member1 member2 [m|km|ft|mi]

geodist 用于返回两个给定位置之间的距离。

  • m :米,默认单位。
  • km :千米。
  • mi :英里。
  • ft :英尺。

GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。

  • WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。
  • WITHCOORD: 将位置元素的经度和纬度也一并返回。
  • WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
  • COUNT 限定返回的记录数。
  • ASC: 查找结果根据距离从近到远排序。
  • DESC: 查找结果根据从远到近排序。

GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

GEORADIUSBYMEMBER和GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 georadiusbymember 的中心点是由给定的位置元素决定的, 而不是使用经度和纬度来决定中心点。

GEOHASH key member [member …]

Redis GEO使用geohash来保存地理位置的坐标。GEOHASH用于获取一个或多个位置元素的 geohash 值。