SET key value [EX seconds] [PX milliseconds] [NX|XX]
SET key value
:可以对已存在或不存在的键进行设置值EX seconds
:将键的过期时间设置为 seconds
秒。 执行 SET key value EX seconds
的效果等同于执行 SETEX key seconds value
。PX milliseconds
: 将键的过期时间设置为 milliseconds
毫秒。 执行 SET key value PX milliseconds
的效果等同于执行 PSETEX key milliseconds value
。NX
: 只在键不存在时, 才对键进行设置操作。 执行 SET key value NX
的效果等同于执行 SETNX key value
。XX
: 只在键已经存在时, 才对键进行设置操作。SET key value XX
GET key
返回与键 key
相关联的字符串值
key
不存在, 那么返回特殊值 nil
; 否则, 返回键 key
的值。key
的值并非字符串类型, 那么返回一个错误, 因为 GET
命令只能用于字符串值。GETSET key value
key
的值设为 value
, 并返回键 key
在被设置之前的旧值。key
的旧值。key
没有旧值, 也即是说, 键 key
在被设置之前并不存在, 那么命令返回 nil
,并且给key设置当前值。key
存在但不是字符串类型时, 命令返回一个错误STRLEN key 返回键
key储存的字符串值的长度。
STRLEN
命令返回字符串值的长度。key
不存在时, 命令返回 0
。key
储存的不是字符串值时, 返回一个错误。APPEND key value
如果键 key
已经存在并且它的值是一个字符串, APPEND
命令将把 value
追加到键 key
现有值的末尾。
如果 key
不存在, APPEND
就简单地将键 key
的值设为 value
, 就像执行 SET key value
一样。
返回:追加 value
之后, 键 key
的值的长度
SETRANGE key offset value
offset
开始, 用 value
参数覆写(overwrite)键 key
储存的字符串值。key
当作空白字符串处理。SETRANGE
命令会确保字符串足够长以便将 value
设置到指定的偏移量上, 如果键 key
原来储存的字符串长度比偏移量小(比如字符串只有 5
个字符长,但你设置的 offset
是 10
), 那么原字符和偏移量之间的空白将用零字节(zerobytes, "\x00"
)进行填充。key
。GETRANGE key start end
key
储存的字符串值的指定部分, 字符串的截取范围由 start
和 end
两个偏移量决定 (包括 start
和 end
在内)。-1
表示最后一个字符, -2
表示倒数第二个字符, 以此类推GETRANGE
通过保证子字符串的值域(range)不超过实际字符串的值域来处理超出范围的值域请求。INCR key
key
储存的数字值加上一。key
不存在, 那么它的值会先被初始化为 0
, 然后再执行 INCR
命令。key
储存的值不能被解释为数字, 那么 INCR
命令将返回一个错误。INCRBY key increment
key
储存的数字值加上增量 increment
。key
不存在, 那么键 key
的值会先被初始化为 0
, 然后再执行 INCRBY
命令。key
储存的值不能被解释为数字, 那么 INCRBY
命令将返回一个错误。INCRBYFLOAT key increment
key
储存的值加上浮点数增量 increment
。key
不存在, 那么 INCRBYFLOAT
会先将键 key
的值设为 0
, 然后再执行加法操作。key
的值会被更新为执行加法计算之后的新值, 并且新值会以字符串的形式返回给调用者。DECR key
key
储存的数字值减去一。key
不存在, 那么键 key
的值会先被初始化为 0
, 然后再执行 DECR
操作。key
储存的值不能被解释为数字, 那么 DECR
命令将返回一个错误。DECRBY key decrement
key
储存的整数值减去减量 decrement
。key
不存在, 那么键 key
的值会先被初始化为 0
, 然后再执行 DECRBY
命令。key
储存的值不能被解释为数字, 那么 DECRBY
命令将返回一个错误。MSET key value [key value …]
MSET
将使用新值去覆盖旧值, 如果这不是你所希望的效果, 请考虑使用 MSETNX
命令, 这个命令只会在所有给定键都不存在的情况下进行设置。MSET
是一个原子性(atomic)操作, 所有给定键都会在同一时间内被设置, 不会出现某些键被设置了但是另一些键没有被设置的情况。MSETNX key value [key value …]
MSETNX
命令也会拒绝执行对所有键的设置操作。MSETNX
是一个原子性(atomic)操作, 所有给定键要么就全部都被设置, 要么就全部都不设置, 不可能出现第三种状态。MGET key [key …]
nil
表示。HSET hash field value
hash
中域 field
的值设置为 value
。HSET
操作。field
已经存在于哈希表中, 那么它的旧值将被新值 value
覆盖。HSET
命令在哈希表中新创建 field
域并成功为它设置值时, 命令返回 1
; 如果域 field
已经存在于哈希表, 并且 HSET
命令成功使用新值覆盖了它的旧值, 那么命令返回 0
。HSETNX hash field value
field
尚未存在于哈希表的情况下, 将它的值设置为 value
。hash
不存在, 那么一个新的哈希表将被创建并执行 HSETNX
命令。HGET hash field
HGET
命令在默认情况下返回给定域的值。如果给定域不存在于哈希表中, 又或者给定的哈希表并不存在, 那么命令返回 nil
HEXISTS hash field
field
是否存在于哈希表 hash
当中HEXISTS
命令在给定域存在时返回 1
, 在给定域不存在时返回 0
。HDEL key field [field …]
key
中的一个或多个指定域,不存在的域将被忽略。HLEN key
HSTRLEN key field
返回哈希表 key
中, 与给定域 field
相关联的值的字符串长度(string length)。
如果给定的键或者域不存在, 那么命令返回 0
。
HINCRBY key field increment
为哈希表 key
中的域 field
的值加上增量 increment
。
增量也可以为负数,相当于对给定域进行减法操作。
如果 key
不存在,一个新的哈希表被创建并执行HINCRBY
命令。
如果域 field
不存在,那么在执行命令前,域的值被初始化为 0
。
对一个储存字符串值的域 field
执行HINCRBY
命令将造成一个错误
HINCRBYFLOAT key field increment
key
中的域 field
加上浮点数增量 increment
。field
,那么HINCRBYFLOAT
会先将域 field
的值设为 0
,然后再执行加法操作。key
不存在,那么HINCRBYFLOAT
会先创建一个哈希表,再创建域 field
,最后再执行加法操作。HMSET key field value [field value …]
field-value
(域-值)对设置到哈希表 key
中。key
不存在,一个空哈希表被创建并执行hmset操作HMGET key field [field …]
key
中,一个或多个给定域的值nil
值HKEYS key
key
中的所有域。HVALS key
key
中所有域的值。HGETALL key
key
中,所有的域和值LPUSH key value [value …]
将一个或多个值 value
插入到列表 key
的表头
如果有多个 value
值,那么各个 value
值按从左到右的顺序依次插入到表头: 比如说,对空列表 mylist
执行命令 LPUSH mylist a b c
,列表的值将是 c b a
,这等同于原子性地执行 LPUSH mylist a
、 LPUSH mylist b
和 LPUSH mylist c
三个命令。
如果 key
不存在,一个空列表会被创建并执行LPUSH操作。
当 key
存在但不是列表类型时,返回一个错误。
LPUSHX key value
value
插入到列表 key
的表头,当且仅当 key
存在并且是一个列表。key
不存在时, LPUSHX命令什么也不做RPUSH key value [value …]
value
插入到列表 key
的表尾(最右边)。value
值,那么各个 value
值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist
执行 RPUSH mylist a b c
,得出的结果列表为 a b c
,等同于执行命令 RPUSH mylist a
、 RPUSH mylist b
、 RPUSH mylist c
key
不存在,一个空列表会被创建并执行 RPUSH操作RPUSHX key value
value
插入到列表 key
的表尾,当且仅当 key
存在并且是一个列表。key
不存在时,RPUSHX 命令什么也不做LPOP key
key
的头元素RPOP key
key
的尾元素。RPOPLPUSH source destination
source
中的最后一个元素(尾元素)弹出,并返回给客户端source
弹出的元素插入到列表 destination
,作为 destination
列表的的头元素source
不存在,值 nil
被返回,并且不执行其他动作source
和 destination
相同,则列表中的表尾元素被移动到表头,并返回该元素,可以把这种特殊情况视作列表的旋转(rotation)操作。LREM key count value
count
的值,移除列表中与参数 value
相等的元素count
的值可以是以下几种:
count > 0
: 从表头开始向表尾搜索,移除与 value
相等的元素,数量为 count
。count < 0
: 从表尾开始向表头搜索,移除与 value
相等的元素,数量为 count
的绝对值。count = 0
: 移除表中所有与 value
相等的值。LLEN key
key
的长度key
不存在,则 key
被解释为一个空列表,返回 0
.key
不是列表类型,返回一个错误。LINDEX key index
key
中,下标为 index
的元素。start
和 stop
都以 0
为底,也就是说,以 0
表示列表的第一个元素,以 1
表示列表的第二个元素,以此类推。-1
表示列表的最后一个元素, -2
表示列表的倒数第二个元素,以此类推。LINSERT key BEFORE|AFTER pivot value
value
插入到列表 key
当中,位于值 pivot
之前或之后。pivot
不存在于列表 key
时,不执行任何操作key
不存在时, key
被视为空列表,不执行任何操作key
不是列表类型,返回一个错误LSET key index value
key
下标为 index
的元素的值设置为 value
。index
参数超出范围,或对一个空列表( key
不存在)进行 LSET 时,返回一个错误LRANGE key start stop
key
中指定区间内的元素,区间以偏移量 start
和 stop
指定。start
和 stop
都以 0
为底,也就是说,以 0
表示列表的第一个元素,以 1
表示列表的第二个元素,以此类推。-1
表示列表的最后一个元素, -2
表示列表的倒数第二个元素,以此类推。LTRIM key start stop
start
和 stop
都以 0
为底,也就是说,以 0
表示列表的第一个元素,以 1
表示列表的第二个元素,以此类推。-1
表示列表的最后一个元素, -2
表示列表的倒数第二个元素,以此类推。BLPOP key [key …] timeout
BLPOP
是列表的阻塞式(blocking)弹出原语,它是LPOP key
命令的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被BLPOP
命令阻塞,直到等待超时或发现可弹出元素为止。
当给定多个 key
参数时,按参数 key
的先后顺序依次检查各个列表,弹出第一个非空列表的头元素
当BLPOP
被调用时,如果给定 key
内至少有一个非空列表,那么弹出遇到的第一个非空列表的头元素,并和被弹出元素所属的列表的名字一起,组成结果返回给调用者
当存在多个给定 key
时, BLPOP 按给定 key
参数排列的先后顺序,依次检查各个列表。
假设现在有 job
、 command
和 request
三个列表,其中 job
不存在, command
和 request
都持有非空列表。考虑以下命令:
BLPOP job command request 0
BLPOP
保证返回的元素来自 command
,因为它是按”查找 job
-> 查找 command
-> 查找 request
“这样的顺序,第一个找到的非空列表。
超时参数 timeout
接受一个以秒为单位的数字作为值。超时参数设为 0
表示阻塞时间可以无限期延长(block indefinitely) 。
相同的 key
可以被多个客户端同时阻塞。
不同的客户端被放进一个队列中,按『先阻塞先服务』(first-BLPOP,first-served)的顺序为 key
执行BLPOP
命令。
BRPOP key [key …] timeout
BRPOP
是列表的阻塞式(blocking)弹出原语。它是RPOP key
命令的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被 BRPOP
命令阻塞,直到等待超时或发现可弹出元素为止。BLPOP
BRPOPLPUSH source destination timeout
BRPOPLPUSH
是RPOPLPUSH
的阻塞版本SADD key member [member …]
将一个或多个 member
元素加入到集合 key
当中,已经存在于集合的 member
元素将被忽略
假如 key
不存在,则创建一个只包含 member
元素作成员的集合。
当 key
不是集合类型时,返回一个错误
SISMEMBER key member
member
元素是集合的成员,返回 1
。 如果 member
元素不是集合的成员,或 key
不存在,返回 0
。SPOP key [count]
SRANDMEMBER key [count]
key
参数,那么返回集合中的一个随机元素。SREM key member [member …]
key
中的一个或多个 member
元素,不存在的 member
元素会被忽略key
不是集合类型,返回一个错误。SMOVE source destination member
member
元素从 source
集合移动到 destination
集合。SMOVE
是原子性操作source
集合不存在或不包含指定的 member
元素,则SOMVE
命令不执行任何操作,仅返回 0
。否则, member
元素从 source
集合中被移除,并添加到 destination
集合中去。destination
集合已经包含 member
元素时, SMOVE 命令只是简单地将 source
集合中的 member
元素删除SCARD key
key
的基数(集合中元素的数量)。SMEMBERS key
key
中的所有成员SINTER key [key …]
key
被视为空集SINTERSTORE destination key [key …]
destination
集合,而不是简单地返回结果集。destination
集合已经存在,则将其覆盖。SUNION key [key …]
SUNIONSTORE destination key [key …]
destination
集合,而不是简单地返回结果集。destination
已经存在,则将其覆盖。SDIFF key [key …]
SDIFFSTORE destination key [key …]
destination
集合,而不是简单地返回结果集。ZADD key score member [[score member] [score member] …]
member
元素及其 score
值加入到有序集 key
当中member
已经是有序集的成员,那么更新这个 member
的 score
值,并通过重新插入这个 member
元素,来保证该 member
在正确的位置上。score
值可以是整数值或双精度浮点数。ZSCORE key member
key
中,成员 member
的 score
值member
元素不是有序集 key
的成员,或 key
不存在,返回 nil
ZINCRBY key increment member
key
的成员 member
的 score
值加上增量 increment
increment
,让 score
减去相应的值,比如 ZINCRBY key -5 member
,就是让 member
的 score
值减去 5
。key
不存在,或 member
不是 key
的成员时, ZINCRBY key increment member
等同于 ZADD key increment member
。ZCARD key
key
的基数,也就是member的数量ZCOUNT key min max
key
中, score
值在 min
和 max
之间(默认包括 score
值等于 min
或 max
)的成员的数量。ZRANGE key start stop [WITHSCORES]
返回有序集 key
中,指定区间内的成员。
其中成员的位置按 score
值递增(从小到大)来排序。
具有相同 score
值的成员按字典序来排列
如果你需要成员按 score
值递减(从大到小)来排列,请使用 [ZREVRANGE key start stopWITHSCORES
命令。
可以通过使用 WITHSCORES
选项,来让成员和它的 score
值一并返回,返回列表以 value1,score1, ..., valueN,scoreN
的格式表示
ZREVRANGE key start stop [WITHSCORES]
key
中,指定区间内的成员score
值递减(从大到小)来排列。 具有相同 score
值的成员按字典序的逆序排列ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
key
中,所有 score
值介于 min
和 max
之间(包括等于 min
或 max
)的成员。有序集成员按 score
值递增(从小到大)次序排列。LIMIT
参数指定返回结果的数量及区间(就像SQL中的 SELECT LIMIT offset, count
),注意当 offset
很大时,定位 offset
的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间。min
和 max
可以是 -inf
和 +inf
,这样一来,你就可以在不知道有序集的最低和最高 score
值的情况下(
符号来使用可选的开区间(小于或大于)。ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
key
中, score
值介于 max
和 min
之间(默认包括等于 max
或 min
)的所有的成员。有序集成员按 score
值递减(从大到小)的次序排列。score
值的成员按字典序的逆序排列ZRANK key member
key
中成员 member
的排名。其中有序集成员按 score
值递增(从小到大)顺序排列。0
为底,也就是说, score
值最小的成员排名为 0
ZREVRANK key member
key
中成员 member
的排名。其中有序集成员按 score
值递减(从大到小)排序。ZREM key member [member …]
key
中的一个或多个成员,不存在的成员将被忽略key
存在但不是有序集类型时,返回一个错误。ZREMRANGEBYRANK key start stop
key
中,指定排名(rank)区间内的所有成员start
和 stop
指出,包含 start
和 stop
在内。start
和 stop
都以 0
为底,也就是说,以 0
表示有序集第一个成员,以 1
表示有序集第二个成员,以此类推。 你也可以使用负数下标,以 -1
表示最后一个成员, -2
表示倒数第二个成员,以此类推。ZREMRANGEBYSCORE key min max
key
中,所有 score
值介于 min
和 max
之间(包括等于 min
或 max
)的成员ZRANGEBYLEX key min max [LIMIT offset count]
key
中, 值介于 min
和 max
之间的成员。min
和 max
参数必须包含 (
或者 [
, 其中 (
表示开区间(指定的值不会被包含在范围之内), 而 [
则表示闭区间(指定的值会被包含在范围之内)。+
和 -
在 min
参数以及 max
参数中具有特殊的意义, 其中 +
表示正无限, 而 -
表示负无限。 因此, 向一个所有成员的分值都相同的有序集合发送命令 ZRANGEBYLEX - +
, 命令将返回有序集合中的所有元素。ZLEXCOUNT key min max
key
来说, 这个命令会返回该集合中, 成员介于 min
和 max
范围内的元素数量ZREMRANGEBYLEX key min max
key
来说, 这个命令会移除该集合中, 成员介于 min
和 max
范围内的所有元素。ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
key
的数量必须以 numkeys
参数指定,并将该并集(结果集)储存到 destination
。score
值是所有给定集下该成员 score
值之 和WEIGHTS
选项,你可以为 每个 给定有序集 分别 指定一个乘法因子(multiplication factor),每个给定有序集的所有成员的 score
值在传递给聚合函数(aggregation function)之前都要先乘以该有序集的因子。如果没有指定 WEIGHTS
选项,乘法因子默认设置为 1
。AGGREGATE
选项,你可以指定并集的结果集的聚合方式。SUM
,可以将所有集合中某个成员的 score
值之 和 作为结果集中该成员的 score
值;使用参数 MIN
,可以将所有集合中某个成员的 最小 score
值作为结果集中该成员的 score
值;而参数 MAX
则是将所有集合中某个成员的 最大 score
值作为结果集中该成员的 score
值。ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
key
的数量必须以 numkeys
参数指定,并将该交集(结果集)储存到 destination
。score
值是所有给定集下该成员 score
值之和.