字符串 string
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"
)进行填充。- 因为 Redis 字符串的大小被限制在 512 兆(megabytes)以内, 所以用户能够使用的最大偏移量为 2^29-1(536870911) , 如果你需要使用比这更大的空间, 请使用多个
key
。
GETRANGE key start end
- 返回键
key
储存的字符串值的指定部分, 字符串的截取范围由start
和end
两个偏移量决定 (包括start
和end
在内)。 - 负数偏移量表示从字符串的末尾开始计数,
-1
表示最后一个字符,-2
表示倒数第二个字符, 以此类推 GETRANGE
通过保证子字符串的值域(range)不超过实际字符串的值域来处理超出范围的值域请求。
INCR key
- 为键
key
储存的数字值加上一。 - 如果键
key
不存在, 那么它的值会先被初始化为0
, 然后再执行INCR
命令。 - 如果键
key
储存的值不能被解释为数字, 那么INCR
命令将返回一个错误。 - 本操作的值限制在 64 位(bit)有符号数字表示之内。
INCRBY key increment
- 为键
key
储存的数字值加上增量increment
。 - 如果键
key
不存在, 那么键key
的值会先被初始化为0
, 然后再执行INCRBY
命令。 - 如果键
key
储存的值不能被解释为数字, 那么INCRBY
命令将返回一个错误。 - 本操作的值限制在 64 位(bit)有符号数字表示之内。
INCRBYFLOAT key increment
- 为键
key
储存的值加上浮点数增量increment
。 - 如果键
key
不存在, 那么INCRBYFLOAT
会先将键key
的值设为0
, 然后再执行加法操作。 - 如果命令执行成功, 那么键
key
的值会被更新为执行加法计算之后的新值, 并且新值会以字符串的形式返回给调用者。
DECR key
- 为键
key
储存的数字值减去一。 - 如果键
key
不存在, 那么键key
的值会先被初始化为0
, 然后再执行DECR
操作。 - 如果键
key
储存的值不能被解释为数字, 那么DECR
命令将返回一个错误。 - 本操作的值限制在 64 位(bit)有符号数字表示之内。
DECRBY key decrement
- 将键
key
储存的整数值减去减量decrement
。 - 如果键
key
不存在, 那么键key
的值会先被初始化为0
, 然后再执行DECRBY
命令。 - 如果键
key
储存的值不能被解释为数字, 那么DECRBY
命令将返回一个错误。 - 本操作的值限制在 64 位(bit)有符号数字表示之内。
MSET key value [key value …]
- 同时为多个键设置值。
- 如果某个给定键已经存在, 那么
MSET
将使用新值去覆盖旧值, 如果这不是你所希望的效果, 请考虑使用MSETNX
命令, 这个命令只会在所有给定键都不存在的情况下进行设置。 MSET
是一个原子性(atomic)操作, 所有给定键都会在同一时间内被设置, 不会出现某些键被设置了但是另一些键没有被设置的情况。
MSETNX key value [key value …]
- 当且仅当所有给定键都不存在时, 为所有给定键设置值。
- 即使只有一个给定键已经存在,
MSETNX
命令也会拒绝执行对所有键的设置操作。 MSETNX
是一个原子性(atomic)操作, 所有给定键要么就全部都被设置, 要么就全部都不设置, 不可能出现第三种状态。
MGET key [key …]
- 返回给定的一个或多个字符串键的值。
- 如果给定的字符串键里面, 有某个键不存在, 那么这个键的值将以特殊值
nil
表示。
哈希表 hash
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
- 返回哈希表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
中,所有的域和值 - 在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。
列表 list
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
- 命令RPOPLPUSH 在一个原子时间内,执行以下两个动作:
- 将列表
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
的元素。 - 下标(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
指定。 - 下标(index)参数
start
和stop
都以0
为底,也就是说,以0
表示列表的第一个元素,以1
表示列表的第二个元素,以此类推。 - 你也可以使用负数下标,以
-1
表示列表的最后一个元素,-2
表示列表的倒数第二个元素,以此类推。
LTRIM key start stop
- 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
- 下标(index)参数
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
的阻塞版本
集合 set
SADD key member [member …]
-
将一个或多个
member
元素加入到集合key
当中,已经存在于集合的member
元素将被忽略 -
假如
key
不存在,则创建一个只包含member
元素作成员的集合。当
key
不是集合类型时,返回一个错误
SISMEMBER key member
- 如果
member
元素是集合的成员,返回1
。 如果member
元素不是集合的成员,或key
不存在,返回0
。
SPOP key [count]
- 移除并返回集合中的count个随机元素,count默认是1
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 …]
- 这个命令类似于 [SINTER key ]命令,但它将结果保存到
destination
集合,而不是简单地返回结果集。 - 如果
destination
集合已经存在,则将其覆盖。
SUNION key [key …]
- 返回一个集合的全部成员,该集合是所有给定集合的并集。
SUNIONSTORE destination key [key …]
- 这个命令类似于 [SUNION key ]命令,但它将结果保存到
destination
集合,而不是简单地返回结果集。 - 如果
destination
已经存在,则将其覆盖。
SDIFF key [key …]
- 返回一个集合的全部成员,该集合是所有给定集合之间的差集
SDIFFSTORE destination key [key …]
- 这个命令的作用和 [SDIFF key ] 类似,但它将结果保存到
destination
集合,而不是简单地返回结果集。
有序集合 zset
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]
- 当有序集合的所有成员都具有相同的分值时, 有序集合的元素会根据成员的字典序(lexicographical ordering)来进行排序, 而这个命令则可以返回给定的有序集合键
key
中, 值介于min
和max
之间的成员。 - 如果有序集合里面的成员带有不同的分值, 那么命令返回的结果是未指定的(unspecified)。
- 合法的
min
和max
参数必须包含(
或者[
, 其中(
表示开区间(指定的值不会被包含在范围之内), 而[
则表示闭区间(指定的值会被包含在范围之内)。 - 特殊值
+
和-
在min
参数以及max
参数中具有特殊的意义, 其中+
表示正无限, 而-
表示负无限。 因此, 向一个所有成员的分值都相同的有序集合发送命令ZRANGEBYLEX <zset> - +
, 命令将返回有序集合中的所有元素。
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
值之和.