目录
字符串
SET
- SET key value [EX seconds] [PX milliseconds] [NX|XX]
- 将字符串值value关联到key。
- 如果key已经持有其他值,set就覆写旧值,无视类型。
- 当set命令对一个带有生存时间(TTL)的键进行设置之后,该键原有的TTL将被清除
- NX:只在键不存在时,才对键进行设置操作,等同于setnx。
- XX:只在键已经存在时,才对键进行设置操作。
SETNX
- SETNX key value
- 只在键key不存在的情况下,将键key的值设置为value。
- 若键key已经存在,则setnx命令不做任何动作。
- setnx是set if not exist的简写。
- 命令在设置成功时返回1,设置失败时返回0。
SETEX
- SETEX key seconds value
- 将键key的值设置为value,并将键key的生存时间设置为seconds秒钟。
- 如果键key已经存在,那么setex命令将覆盖已有的值。
- 等同于
set key value
,expire key seconds
两个命令的组合,不同的是setex是一个原子操作 - 命令在设置成功时返回OK,当seconds参数不合法时,命令将返回一个错误。
PSETEX
- PSETEX key milliseconds value
- 这个命令和setex命令相似,但它以毫秒为单位设置key的过期时间。
- 命令在设置成功时返回OK。
GET
- GET key
- 返回与键key相关联的字符串值。
- 如果key不存在,那么返回特殊值nil;否则返回key的值。
- 如果key的值并非字符串类型,那么返回一个错误,因为get命令只能用于字符串值。
GETSET
- GETSET key value
- 将key的值设为value,并返回key在被设置之前的旧值。
- 返回给定key的旧值。
- 如果key没有旧值,那么返回nil。
- 当key存在但不是字符串类型时,命令返回一个错误。
STRLEN
- STRLEN key
- 返回key储存的字符串值的长度。
- 当key不存在时,命令返回0。
- 当key储存的不是字符串值时,返回一个错误。
APPEND
- APPEND key value
- 如果key已经存在并且它的值是一个字符串,append命令将把value追加到key现有值的末尾。
- 如果key不存在,append就简单地将key的值设为value,等同于
set key value
命令。 - 返回追加value之后,键key的值的长度。
SETRANGE
- SETRANGE key offset value
- 从偏移量offset开始,用value参数覆写键key储存的字符串值。
- 不存在的键key当作空白字符串处理。
- setrange命令会确保字符串足够长以便将value设置到指定的偏移量上,如果键key原来储存的字符串长度比偏移量小,那么原字符和偏移量之间的空白将用零字节(zerobytes,"\x00")进行填充。
- redis字符串大小最多512M,所以用户能够使用的最大偏移量为2^29-1。
GETRANGE
- GETRANGE key start end
- 返回键key储存的字符串值的指定部分,字符串的截取范围由start和end两个偏移量决定,包括start和end在内。
- 负数偏移量表示从字符串的末尾开始计数,-1表示最后一个字符,-2表示倒数第二个字符,以此类推。
- getrange通过保证子字符串的值域不超过实际字符串的值域来处理超出范围的值域请求。
INCR
- INCR key
- 为键key储存的数字值加上一。
- 如果键key不存在,那么它的值会先被初始化为0,然后再执行INCR命令。
- 如果键key储存的值不能被解释为数字,那么INCR命令将返回一个错误。
- 本操作的值限制在64位有符号数字表示之内。
- INCR命令会返回键key在执行加一操作之后的值。
INCRBY
- INCRBY key increment
- 为键key储存的数字值加上增量increment。
- 如果键key不存在,那么键key的值会先被初始化为0,然后再执行INCRBY命令。
- 如果键key储存的值不能被解释为数字,那么INCRBY命令将返回一个错误。
- 本操作的值限制在64位有符号数字表示之内。
- 返回加上增量increment之后,键key当前的值。
INCRBYFLOAT
- INCRBYFLOAT key increment
- 为键key储存的值加上浮点数增量increment。
- 如果键key不存在,那么INCRBYFLOAT会先将键key的值设为0,然后再执行加法操作。
- 如果命令执行成功,那么键key的值会被更新为执行加法计算之后的新值,并且新值会以字符串的形式返回给调用者。
- 无论加法计算所得的浮点数的实际精度有多长,INCRBYFLOAT命令的计算结果最多只保留小数点的后十七位。
- 当以下任意一个条件发生时,命令返回一个错误:
- 键key的值不是字符串类型。
- 键key当前的值或者给定的增量increment不能被解释为双精度浮点数。
DECR
- DECR key
- 为键key储存的数字值减去一。
- 如果键key不存在,那么键key的值会先被初始化为0,然后再执行DECR操作。
- 如果键key储存的值不能被解释为数字,那么DECR命令将返回一个错误。
- 本操作的值限制在64位有符号数字表示之内。
- DECR命令会返回键key在执行减一操作之后的值。
DECRBY
- DECRBY key decrement
- 将键key储存的整数值减去减量decrement。
- 如果键key不存在,那么键key的值会先被初始化为0,然后再执行DECRBY命令。
- 如果键key储存的值不能被解释为数字,那么DECRBY命令将返回一个错误。
- 本操作的值限制在64位有符号数字表示之内。
- DECRBY命令会返回键在执行减法操作之后的值。
MSET
- MSET key value [key value …]
- 同时为多个键设置值。
- 如果某个给定键已经存在,那么MSET将使用新值去覆盖旧值,如果这不是你所希望的效果,请考虑使用MSETNX。
- MSET是一个原子性操作,所有给定键都会在同一时间内被设置,不会出现某些键被设置了但是另一些键没有被设置的情况。
- MSET命令总是返回OK。
MSETNX
- MSETNX key value [key value …]
- 当且仅当所有给定键都不存在时,为所有给定键设置值。
- 即使只有一个给定键已经存在,MSETNX命令也会拒绝执行对所有键的设置操作。
- MSETNX是一个原子性操作,所有给定键要么全部都被设置,要么就全部都不设置,不可能出现第三种状态。
- 当所有给定键都设置成功时,命令返回1;否则返回0。
MGET
- MGET key [key …]
- 返回给定的一个或多个字符串键的值。
- 如果给定的字符串键里面,有某个键不存在,那么这个键的值将以特殊值nil表示。
- MGET命令将返回一个列表,列表中包括了所有给定键的值。
哈希表
HSET
- HSET hash field value
- 将哈希表hash中域field的值设置为value。
- 如果给定的哈希表并不存在,那么一个新的哈希表将被创建并执行HSET操作。
- 如果域field已经存在于哈希表中,那么它的旧值将被新值value覆盖。
- 当HSET命令在哈希表中新创建field域并成功为它设置值时,命令返回1;如果域field已经存在于哈希表,并且HSET命令成功使用新值覆盖了它的旧值,那么命令返回0。
HSETNX
- HSETNX hash field value
- 当且仅当域field尚未存在于哈希表的情况下,将它的值设置为value。
- 如果给定域已经存在于哈希表当中,那么命令将放弃执行设置操作。
- 如果哈希表hash不存在,那么一个新的哈希表将被创建并执行HSETNX命令。
- HSETNX命令在设置成功时返回1,在给定域已经存在而放弃执行设置操作时返回0。
HGET
- HGET hash field
- 返回哈希表中给定域的值。
- 如果给定域不存在域哈希表中,又或者给定的哈希表并不存在,那么命令返回nil。
HEXISTS
- HEXISTS hash field
- 检查给定域field是否存在于哈希表hash当中。
- HEXISTS命令在给定域存在时返回1,在给定域不存在时返回0。
HDEL
- HDEL key field [field …]
- 删除哈希表key中的一个或多个指定域,不存在的域将被忽略。
- 返回被成功移除的域的数量,不包括被忽略的域。
HLEN
- HLEN key
- 返回哈希表key中域的数量。
- 当key不存在时,返回0。
HSTRLEN
- HSTRLEN key field
- 返回哈希表key中,与给定域field相关联的值的字符串长度。
- 如果给定的键或者域不存在,那么命令返回0。
HINCRBY
- HINCRBY key field increment
- 为哈希表key中的域field的值加上增量increment。
- 增量也可以为负数,相当于给给定域进行减法操作。
- 如果key不存在,一个新的哈希表被创建并执行HINCRBY命令。
- 如果field不存在,那么在执行命令前,域的值被初始化为0。
- 对一个储存字符串值的域field执行HINCRBY命令将造成一个错误。
- 本操作的值被限制在64位有符号数字表示之内。
- 返回执行HINCRBY命令之后,哈希表key中域field的值。
HINCRBYFLOAT
- HINCRBYFLOAT key field increment
- 为哈希表key中的域field加上浮点数增量increment。
- 如果哈希表中没有域field,那么HINCRBYFLOAT会先将域field的值设为0,然后再执行加法操作。
- 如果键key不存在,那么HINCRBYFLOAT会先创建一个哈希表,再创建域field,最后再执行加法操作。
- 当以下任意一个条件发生时,返回一个错误:
- 域field的值不是字符串类型。
- 域field当前的值或给定的增量increment不能解释为双精度浮点数。
- 返回执行加法操作之后field域的值。
HMSET
- HMSET key field value [field value …]
- 同时将多个field-value对设置到哈希表key中。
- 此命令会覆盖哈希表中已存在的域。
- 如果key不存在,一个空哈希表被创建并执行HMSET操作。
- 如果命令执行成功,返回OK。
- 当key不是哈希表类型时,返回一个错误。
HMGET
- HMGET key field [field …]
- 返回哈希表key中,一个或多个给定域的值。
- 如果给定的域不存在于哈希表,那么返回一个nil值。
- 因为不存在的key被当作一个空哈希表来处理,所以对一个不存在的key进行HMGET操作将返回一个只带有nil的表。
- 返回一个包含多个给定域的关联值的表,表值的排列顺序和给定域参数的请求顺序一样。
HKEYS
- HKEYS key
- 返回哈希表key中的所有域field的表。
- 当key不存在时,返回一个空表。
HVALS
- HVALS key
- 返回哈希表key中所有值的表。
- 当key不存在时,返回一个空表。
HGETALL
- HGETALL key
- 返回哈希表key中,所有的域和值的表。
- 在返回值里,紧跟每个域名field之后是域的值value,所以返回值的长度是哈希表大小的两倍。
- 若key不存在,返回空列表。
列表
LPUSH
- LPUSH key value [value …]
- 将一个或多个值value插入到列表key的表头
- 如果有多个value值,那么各个value值按从左到右的顺序依次插入到表头。
- 如果key不存在,一个空列表会被创建并执行LPUSH操作。
- 当key存在但不是列表类型时,返回一个错误。
- 返回执行LPUSH命令后,列表的长度。
LPUSHX
- LPUSHX key value
- 将值value插入到列表key的表头,当且仅当key存在并且是一个列表。
- 当key不存在时,LPUSHX命令什么也不做。
- 返回LPUSHX命令执行之后,表的长度。
RPUSH
- RPUSH key value [value …]
- 将一个或多个值value插入到列表key的表尾。
- 如果有多个value值,那么各个value值按从左到右的顺序依次插入到表尾。
- 如果key不存在,一个空列表会被创建并执行RPUSH操作。
- 当key存在但不是列表类型时,返回一个错误。
- 返回执行RPUSH操作后,表的长度。
RPUSHX
- RPUSHX key value
- 将值value插入到列表key的表尾,当且仅当key存在并且是一个列表。
- 当key不存在时,RPUSHX命令什么都不做。
- 返回RPUSHX命令执行之后,表的长度。
LPOP
- LPOP key
- 移除并返回列表key的头元素。
- 当key不存在时,返回nil。
RPOP
- RPOP key
- 移除并返回列表key的尾元素。
- 当key不存在时,返回nil。
RPOPLPUSH
- RPOPLPUSH source destination
- 命令RPOPLPUSH在一个原子时间内,执行以下两个动作:
- 将列表source中的尾元素弹出,并返回给客户端。
- 将source弹出的元素插入到列表destination,作为destination列表的头元素。
- 如果source不存在,值nil被返回,并且不执行其他动作。
- 如果source和destination相同,则列表中的表尾元素被移动到表头,并返回该元素,可以把这种特殊情况视作列表的旋转操作。
LREM
- LREM key count value
- 根据参数count的值,移除列表中与参数value相等的元素。
- count的值可以是以下几种:
- count > 0:从表头开始向表尾搜索,移除与value相等的元素,数量为count。
- count < 0:从表尾开始向表头搜索,移除与value相等的元素,数量为count的绝对值。
- count = 0:移除表中所有与value相等的值。
- 返回被移除元素的数量,因为不存在的key被视作空表,所以当key不存在时,LREM命令总是返回0。
LLEN
- LLEN key
- 返回列表key的长度。
- 如果key不存在,则key被解释为一个空列表,返回0。
- 如果key不是列表类型,返回一个错误。
LINDEX
- LINDEX key index
- 返回列表key中,下标为index的元素。
- 下标index参数start和stop都以0为底,也就是说,以0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。
- 下标-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。
- 如果key不是列表类型,返回一个错误。
- 如果index参数的值不在列表的区间范围内,返回nil。
LINSERT
- LINSERT key BEFORE|AFTER pivot value
- 将值value插入到列表key当中,位于值pivot之前或之后。
- 当pivot不存在于列表key时,不执行任何操作。
- 当key不存在时,key被视为空列表,不执行任何操作。
- 如果key不是列表类型,返回一个错误。
- 如果命令执行成功,返回插入操作完成之后,列表的长度。如果没有找到pivot,返回-1。如果key不存在或为空列表,返回0。
LSET
- LSET key index value
- 将列表key下标为index的元素设置为value。
- 当index参数超出范围时,或对一个空列表进行LSET时,返回一个错误。
- 操作成功返回ok,否则返回错误信息。
LRANGE
- LRANGE key start stop
- 返回列表key中指定区间内的元素,区间以偏移量start和stop指定。
- 下标index参数start和stop都以0为底,也就是说,以0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。
- 也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。
- start和stop下标都包含在内,是一个闭区间。
- 超出范围的下标值不会引起错误。
- 如果start下标比列表的最大下标end还要大,那么LRANGE返回一个空列表。
- 如果stop下标比end下标还要大,Redis将stop的值设置为end。
LTRIM
- LTRIM key start stop
- 对一个列表进行修剪,就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
- start和stop下标都被包含在内,闭区间。
- 当key不是列表类型时,返回一个错误。
- 下标index参数start和stop都以0为底,也就是说,以0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。
- 也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。
- start和stop下标都包含在内,是一个闭区间。
- 超出范围的下标值不会引起错误。
- 如果start下标比列表的最大下标end还要大,那么LRANGE返回一个空列表。
- 如果stop下标比end下标还要大,Redis将stop的值设置为end。
- 命令执行成功时,返回ok。
BLPOP
- BLPOP key [key …] timeout
- BLPOP是列表的阻塞式弹出原语。
- 它式LPOP key命令的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被BLPOP命令阻塞,直到等待超时或发现可弹出元素为止。
- 当给定多个key参数时,按参数key的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。
- 非阻塞行为
- 当BLPOP被调用时,如果给定key内至少有一个非空列表,那么弹出遇到的第一个非空列表的头元素,并和被弹出元素所属的列表的名字一起,组成结果返回给调用者([key, result]。
- 当存在多个给定key时,BLPOP按给定key参数排列的先后顺序,依次检查各