1.APPEND key value
如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key
如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value
可用版本:
>= 2.0.0
时间复杂度:
平摊O(1)
返回值:
追加 value 之后, key
2.DECR key
将 key
如果 key 不存在,那么 key 的值会先被初始化为 0
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
关于递增(increment) / 递减(decrement)操作的更多信息,请参见 INCR 命令。
可用版本:
>= 1.0.0
时间复杂度:
O(1)
返回值:
执行 DECR 命令之后 key
3.DECRBY key decrement
将 key 所储存的值减去减量 decrement
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
关于更多递增(increment) / 递减(decrement)操作的更多信息,请参见 INCR 命令。
可用版本:
>= 1.0.0
时间复杂度:
O(1)
返回值:
减去 decrement 之后, key
127.0.0.1:6379> incrby 1 gender // 注意顺序
(error) ERR value is not an integer or out of range
127.0.0.1:6379> decrby gender 10
(integer) -14
127.0.0.1:6379> decr name
(error) ERR value is not an integer or out of range
127.0.0.1:6379> incrby gender 100
(integer) 86
4.GET key
返回 key
如果 key 不存在那么返回特殊值 nil
假如 key
可用版本:
>= 1.0.0
时间复杂度:
O(1)
返回值:
当 key 不存在时,返回 nil ,否则,返回 key
如果 key
127.0.0.1:6379> hmset user name zdx
OK
127.0.0.1:6379> hmget user name
1) "zdx"
127.0.0.1:6379> get user
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> get email
(nil)
5.GETRANGE key start end
返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end
负数偏移量表示从字符串最后开始计数, -1 表示最后一个字符, -2
GETRANGE 通过保证子字符串的值域(range)不超过实际字符串的值域来处理超出范围的值域请求。
在 <= 2.0 的版本里,GETRANGE 被叫作 SUBSTR。
可用版本:
>= 2.4.0
时间复杂度:
O(N), N
复杂度最终由字符串的返回值长度决定,但因为从已有字符串中取出子字符串的操作非常廉价(cheap),所以对于长度不大的字符串,该操作的复杂度也可看作O(1)。
返回值:
截取得出的子字符串。
6.GETSET key value
将给定 key 的值设为 value ,并返回 key
当 key
可用版本:
>= 1.0.0
时间复杂度:
O(1)
返回值:
返回给定 key
当 key 没有旧值时,也即是, key 不存在时,返回 nil
7.INCR key
将 key
如果 key 不存在,那么 key 的值会先被初始化为 0
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
这是一个针对字符串的操作,因为 Redis 没有专用的整数类型,所以 key 内储存的字符串被解释为十进制 64 位有符号整数来执行 INCR 操作。
可用版本:
>= 1.0.0
时间复杂度:
O(1)
返回值:
执行 INCR 命令之后 key
8.INCRBY key increment
将 key 所储存的值加上增量 increment
如果 key 不存在,那么 key 的值会先被初始化为 0
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
关于递增(increment) / 递减(decrement)操作的更多信息,参见 INCR 命令。
可用版本:
>= 1.0.0
时间复杂度:
O(1)
返回值:
加上 increment 之后, key
9.INCRBYFLOAT key increment
为 key 中所储存的值加上浮点数增量 increment
如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0
如果命令执行成功,那么 key
无论是 key 的值,还是增量 increment ,都可以使用像 2.0e7 、 3e5 、 90e-2 那样的指数符号(exponential notation)来表示,但是,执行 INCRBYFLOAT 命令之后的值总是以同样的形式储存,也即是,它们总是由一个数字,一个(可选的)小数点和一个任意位的小数部分组成(比如 3.14 、 69.768 ,诸如此类),小数部分尾随的 0 会被移除,如果有需要的话,还会将浮点数改为整数(比如 3.0 会被保存成 3
除此之外,无论加法计算所得的浮点数的实际精度有多长, INCRBYFLOAT 的计算结果也最多只能表示小数点的后十七位。
当以下任意一个条件发生时,返回一个错误:
- key
- key 当前的值或者给定的增量 increment
可用版本:
>= 2.6.0
时间复杂度:
O(1)
返回值:
执行命令之后 key
10.MGET key [key ...]
返回所有(一个或多个)给定 key
如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil
可用版本:
>= 1.0.0
时间复杂度:
O(N) , N 为给定 key
返回值:
一个包含所有给定 key
redis> SET redis redis.com
OK
redis> SET mongodb mongodb.org
OK
redis> MGET redis mongodb
1) "redis.com"
2) "mongodb.org"
redis> MGET redis mongodb mysql # 不存在的 mysql 返回 nil
1) "redis.com"
2) "mongodb.org"
3) (nil)
11.MSET key value [key value ...]
同时设置一个或多个 key-value
如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用 MSETNX 命令:它只会在所有给定 key
MSET 是一个原子性(atomic)操作,所有给定 key 都会在同一时间内被设置,某些给定 key 被更新而另一些给定 key
可用版本:
>= 1.0.1
时间复杂度:
O(N), N 为要设置的 key
返回值:
总是返回 OK (因为 MSET
12.MSETNX key value [key value ...]
同时设置一个或多个 key-value 对,当且仅当所有给定 key
即使只有一个给定 key 已存在, MSETNX 也会拒绝执行所有给定 key
MSETNX 是原子性的,因此它可以用作设置多个不同 key
可用版本:
>= 1.0.1
时间复杂度:
O(N), N 为要设置的 key
返回值:
当所有 key 都成功设置,返回 1
如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0
13.PSETEX key milliseconds value
这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key
可用版本:
>= 2.6.0
时间复杂度:
O(1)
返回值:
设置成功时返回 OK
redis> PSETEX mykey 1000 "Hello"
OK
redis> PTTL mykey
(integer) 999
redis> GET mykey
"Hello"
14.SET key value [EX seconds] [PX milliseconds] [NX|XX]
将字符串值 value 关联到 key
如果 key
对于某个原本带有生存时间(TTL)的键来说, 当 SET 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。
可选参数
从 Redis 2.6.12 版本开始, SET 命令的行为可以通过一系列参数来修改:
- EX second :设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value
- PX millisecond :设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX keymillisecond value
- NX :只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value
- XX
因为 SET 命令可以通过参数来实现和 SETNX 、 SETEX 和 PSETEX 三个命令的效果,所以将来的 Redis 版本可能会废弃并最终移除 SETNX 、 SETEX 和 PSETEX 这三个命令。
可用版本:
>= 1.0.0
时间复杂度:
O(1)
返回值:
在 Redis 2.6.12 版本以前, SET 命令总是返回 OK
从 Redis 2.6.12 版本开始, SET 在设置操作成功完成时,才返回 OK
如果设置了 NX 或者 XX
# 对不存在的键进行设置
redis 127.0.0.1:6379> SET key "value"
OK
redis 127.0.0.1:6379> GET key
"value"
# 对已存在的键进行设置
redis 127.0.0.1:6379> SET key "new-value"
OK
redis 127.0.0.1:6379> GET key
"new-value"
# 使用 EX 选项
redis 127.0.0.1:6379> SET key-with-expire-time "hello" EX 10086
OK
redis 127.0.0.1:6379> GET key-with-expire-time
"hello"
redis 127.0.0.1:6379> TTL key-with-expire-time
(integer) 10069
# 使用 PX 选项
redis 127.0.0.1:6379> SET key-with-pexpire-time "moto" PX 123321
OK
redis 127.0.0.1:6379> GET key-with-pexpire-time
"moto"
redis 127.0.0.1:6379> PTTL key-with-pexpire-time
(integer) 111939
# 使用 NX 选项
redis 127.0.0.1:6379> SET not-exists-key "value" NX
OK # 键不存在,设置成功
redis 127.0.0.1:6379> GET not-exists-key
"value"
redis 127.0.0.1:6379> SET not-exists-key "new-value" NX
(nil) # 键已经存在,设置失败
redis 127.0.0.1:6379> GEt not-exists-key
"value" # 维持原值不变
# 使用 XX 选项
redis 127.0.0.1:6379> EXISTS exists-key
(integer) 0
redis 127.0.0.1:6379> SET exists-key "value" XX
(nil) # 因为键不存在,设置失败
redis 127.0.0.1:6379> SET exists-key "value"
OK # 先给键设置一个值
redis 127.0.0.1:6379> SET exists-key "new-value" XX
OK # 设置新值成功
redis 127.0.0.1:6379> GET exists-key
"new-value"
# NX 或 XX 可以和 EX 或者 PX 组合使用
redis 127.0.0.1:6379> SET key-with-expire-and-NX "hello" EX 10086 NX
OK
redis 127.0.0.1:6379> GET key-with-expire-and-NX
"hello"
redis 127.0.0.1:6379> TTL key-with-expire-and-NX
(integer) 10063
redis 127.0.0.1:6379> SET key-with-pexpire-and-XX "old value"
OK
redis 127.0.0.1:6379> SET key-with-pexpire-and-XX "new value" PX 123321
OK
redis 127.0.0.1:6379> GET key-with-pexpire-and-XX
"new value"
redis 127.0.0.1:6379> PTTL key-with-pexpire-and-XX
(integer) 112999
# EX 和 PX 可以同时出现,但后面给出的选项会覆盖前面给出的选项
redis 127.0.0.1:6379> SET key "value" EX 1000 PX 5000000
OK
redis 127.0.0.1:6379> TTL key
(integer) 4993 # 这是 PX 参数设置的值
redis 127.0.0.1:6379> SET another-key "value" PX 5000000 EX 1000
OK
redis 127.0.0.1:6379> TTL another-key
(integer) 997
15.SETEX key seconds value
将值 value 关联到 key ,并将 key 的生存时间设为 seconds
如果 key
这个命令类似于以下两个命令:
SET key value
EXPIRE key seconds # 设置生存时间
不同之处是, SETEX 是一个原子性(atomic)操作,关联值和设置生存时间两个动作会在同一时间内完成,该命令在 Redis 用作缓存时,非常实用。
可用版本:
>= 2.0.0
时间复杂度:
O(1)
返回值:
设置成功时返回 OK
当 seconds
# 在 key 不存在时进行 SETEX
redis> SETEX cache_user_id 60 10086
OK
redis> GET cache_user_id # 值
"10086"
redis> TTL cache_user_id # 剩余生存时间
(integer) 49
# key 已经存在时,SETEX 覆盖旧值
redis> SET cd "timeless"
OK
redis> SETEX cd 3000 "goodbye my love"
OK
redis> GET cd
"goodbye my love"
redis> TTL cd
(integer) 2997
16.SETNX key value
将 key 的值设为 value ,当且仅当 key
若给定的 key
SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。
可用版本:
>= 1.0.0
时间复杂度:
O(1)
返回值:
设置成功,返回 1
设置失败,返回 0
17.SETRANGE key offset value
用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset
不存在的 key
SETRANGE 命令会确保字符串足够长以便将 value 设置在指定的偏移量上,如果给定 key 原来储存的字符串长度比偏移量小(比如字符串只有 5 个字符长,但你设置的 offset 是 10 ),那么原字符和偏移量之间的空白将用零字节(zerobytes, "\x00"
注意你能使用的最大偏移量是 2^29-1(536870911) ,因为 Redis 字符串的大小被限制在 512 兆(megabytes)以内。如果你需要使用比这更大的空间,你可以使用多个 key
当生成一个很长的字符串时,Redis 需要分配内存空间,该操作有时候可能会造成服务器阻塞(block)。在2010年的Macbook Pro上,设置偏移量为 536870911(512MB 内存分配),耗费约 300 毫秒, 设置偏移量为 134217728(128MB 内存分配),耗费约 80 毫秒,设置偏移量 33554432(32MB 内存分配),耗费约 30 毫秒,设置偏移量为 8388608(8MB 内存分配),耗费约 8 毫秒。 注意若首次内存分配成功之后,再对同一个 key
可用版本:
>= 2.2.0
时间复杂度:
对小(small)的字符串,平摊复杂度O(1)。(关于什么字符串是”小”的,请参考 APPEND 命令)
否则为O(M), M 为 value
返回值:
被 SETRANGE 修改之后,字符串的长度。
18.STRLEN key
返回 key
当 key
可用版本:
>= 2.2.0
复杂度:
O(1)
返回值:
字符串值的长度。
当 key 不存在时,返回 0