set 用法
#set key value 设置value为字符串的键值对
redis> SET key "value" #对不存在的key设置value OK redis> GET key "value"
redis> SET key "new-value" # 对已经存在的key设置value
OK
redis> GET key
"new-value"
redis> SET key-with-expire-time "hello" EX 10086 #使用EX选项,设置过期时间,单位为秒
OK
redis> GET key-with-expire-time
"hello"
redis> TTL key-with-expire-time
(integer) 10069
redis> SET key-with-pexpire-time "moto" PX 123321 #使用PX选项,设置时间为毫秒
OK
redis> GET key-with-pexpire-time
"moto"
redis> PTTL key-with-pexpire-time
(integer) 111939
redis> SET not-exists-key "value" NX #NX选项,只对不存在的key设置value
OK # 键不存在,设置成功
redis> GET not-exists-key
"value"
redis> SET not-exists-key "new-value" NX
(nil) # 键已经存在,设置失败
redis> GEt not-exists-key
"value" # 维持原值不变
redis> EXISTS exists-key #XX选项,只对已经存在的key设置value
(integer) 0
redis> SET exists-key "value" XX
(nil) # 因为键不存在,设置失败
redis> SET exists-key "value"
OK # 先给键设置一个值
redis> SET exists-key "new-value" XX
OK # 设置新值成功
redis> GET exists-key
"new-value"
setnx 等同于上面的 set 加上nx
redis> EXISTS job # job 不存在 (integer) 0 redis> SETNX job "programmer" # job 设置成功 (integer) 1 redis> SETNX job "code-farmer" # 尝试覆盖 job ,失败 (integer) 0 redis> GET job # 没有被覆盖 "programmer"
setex 将键 key
的值设置为 value
, 并将键 key
的生存时间设置为 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
psetex 这个命令和 SETEX
命令相似, 但它以毫秒为单位设置 key
的生存时间, 而不是像 SETEX
命令那样以秒为单位进行设置。
redis> PSETEX mykey 1000 "Hello" OK redis> PTTL mykey (integer) 999 redis> GET mykey "Hello"
get 如果键 key
不存在, 那么返回特殊值 nil
; 否则, 返回键 key
的值。(get 只用于字符串类型)
对不存在的键 key 或是字符串类型的键 key 执行 GET 命令: redis> GET db (nil) redis> SET db redis OK redis> GET db "redis" 对不是字符串类型的键 key 执行 GET 命令: redis> DEL db (integer) 1 redis> LPUSH db redis mongodb mysql (integer) 3 redis> GET db (error) ERR Operation against a key holding the wrong kind of value
getset 将键 key
的值设为 value
, 并返回键 key
在被设置之前的旧值。
redis> GETSET db mongodb # 没有旧值,返回 nil (nil) redis> GET db "mongodb" redis> GETSET db redis # 返回旧值 mongodb "mongodb" redis> GET db "redis"
strlen 返回键 key
储存的字符串值的长度。
获取字符串值的长度: redis> SET mykey "Hello world" OK redis> STRLEN mykey (integer) 11 不存在的键的长度为 0 : redis> STRLEN nonexisting (integer) 0
append
如果键 key 已经存在并且它的值是一个字符串, APPEND 命令将把 value 追加到键 key 现有值的末尾。
如果 key 不存在, APPEND 就简单地将键 key 的值设为 value , 就像执行 SET key value 一样。
返回追加 value 之后, 键 key 的值的长度。
对不存在的 key 执行 APPEND : redis> EXISTS myphone # 确保 myphone 不存在 (integer) 0 redis> APPEND myphone "nokia" # 对不存在的 key 进行 APPEND ,等同于 SET myphone "nokia" (integer) 5 # 字符长度 对已存在的字符串进行 APPEND : redis> APPEND myphone " - 1110" # 长度从 5 个字符增加到 12 个字符 (integer) 12 redis> GET myphone "nokia - 1110"
setrange
从偏移量 offset 开始, 用 value 参数覆写(overwrite)键 key 储存的字符串值。不存在的键 key 当作空白字符串处理。SETRANGE
命令会返回被修改之后, 字符串值的长度
SETRANGE 命令会确保字符串足够长以便将 value 设置到指定的偏移量上, 如果键 key 原来储存的字符串长度比偏移量小(比如字符串只有 5 个字符长,但你设置的 offset 是 10 ), 那么原字符和偏移量之间的空白将用零字节(zerobytes, "x00" )进行填充。
对非空字符串执行 SETRANGE 命令: redis> SET greeting "hello world" OK redis> SETRANGE greeting 6 "Redis" (integer) 11 redis> GET greeting "hello Redis" 对空字符串/不存在的键执行 SETRANGE 命令: redis> EXISTS empty_string (integer) 0 redis> SETRANGE empty_string 5 "Redis!" # 对不存在的 key 使用 SETRANGE (integer) 11 redis> GET empty_string # 空白处被"x00"填充 "x00x00x00x00x00Redis!"
getrange
返回键 key 储存的字符串值的指定部分, 字符串的截取范围由 start 和 end 两个偏移量决定 (包括 start 和 end 在内)。
负数偏移量表示从字符串的末尾开始计数, -1 表示最后一个字符, -2 表示倒数第二个字符, 以此类推。
redis> SET greeting "hello, my friend" OK redis> GETRANGE greeting 0 4 # 返回索引0-4的字符,包括4。 "hello" redis> GETRANGE greeting -1 -5 # 不支持回绕操作 "" redis> GETRANGE greeting -3 -1 # 负数索引 "end" redis> GETRANGE greeting 0 -1 # 从第一个到最后一个 "hello, my friend" redis> GETRANGE greeting 0 1008611 # 值域范围不超过实际字符串,超过部分自动被符略 "hello, my friend"
incr
为键 key 储存的数字值加上一。
如果键 key 不存在, 那么它的值会先被初始化为 0 , 然后再执行 INCR 命令。
如果键 key 储存的值不能被解释为数字, 那么 INCR 命令将返回一个错误。
redis> SET page_view 20 OK redis> INCR page_view (integer) 21 redis> GET page_view # 数字值在 Redis 中以字符串的形式保存 "21"
incrby
为键 key 储存的数字值加上增量 increment 。返回在加上增量 increment
之后, 键 key
当前的值。
如果键 key 不存在, 那么键 key 的值会先被初始化为 0 , 然后再执行 INCRBY 命令。
如果键 key 储存的值不能被解释为数字, 那么 INCRBY 命令将返回一个错误
键存在,并且值为数字: redis> SET rank 50 OK redis> INCRBY rank 20 (integer) 70 redis> GET rank "70" 键不存在: redis> EXISTS counter (integer) 0 redis> INCRBY counter 30 (integer) 30 redis> GET counter "30"
incrbyfloat
为键 key 储存的值加上浮点数增量 increment 。返回在加上增量 increment 之后, 键 key 的值。
如果键 key 不存在, 那么 INCRBYFLOAT 会先将键 key 的值设为 0 , 然后再执行加法操作。
如果命令执行成功, 那么键 key 的值会被更新为执行加法计算之后的新值, 并且新值会以字符串的形式返回给调用者。
redis> GET decimal "3.0" redis> INCRBYFLOAT decimal 2.56 "5.56" redis> GET decimal "5.56"
decr
为键 key 储存的数字值减去一。DECR 命令会返回键 key 在执行减一操作之后的值。
如果键 key 不存在, 那么键 key 的值会先被初始化为 0 , 然后再执行 DECR 操作。
如果键 key 储存的值不能被解释为数字, 那么 DECR 命令将返回一个错误。
对储存数字值的键 key 执行 DECR 命令: redis> SET failure_times 10 OK redis> DECR failure_times (integer) 9 对不存在的键执行 DECR 命令: redis> EXISTS count (integer) 0 redis> DECR count (integer) -1
decrby
将键 key 储存的整数值减去减量 decrement 。DECRBY 命令会返回键在执行减法操作之后的值。
如果键 key 不存在, 那么键 key 的值会先被初始化为 0 , 然后再执行 DECRBY 命令。
如果键 key 储存的值不能被解释为数字, 那么 DECRBY 命令将返回一个错误
对已经存在的键执行 DECRBY 命令: redis> SET count 100 OK redis> DECRBY count 20 (integer) 80 对不存在的键执行 DECRBY 命令: redis> EXISTS pages (integer) 0 redis> DECRBY pages 10 (integer) -10
mset
同时为多个键设置值。返回OK
如果某个给定键已经存在, 那么 MSET 将使用新值去覆盖旧值, 如果这不是你所希望的效果, 请考虑使用 MSETNX 命令, 这个命令只会在所有给定键都不存在的情况下进行设置。
MSET 是一个原子性(atomic)操作, 所有给定键都会在同一时间内被设置, 不会出现某些键被设置了但是另一些键没有被设置的情况。
同时对多个键进行设置: redis> MSET date "2012.3.30" time "11:00 a.m." weather "sunny" OK redis> MGET date time weather 1) "2012.3.30" 2) "11:00 a.m." 3) "sunny" 覆盖已有的值: redis> MGET k1 k2 1) "hello" 2) "world" redis> MSET k1 "good" k2 "bye" OK redis> MGET k1 k2 1) "good" 2) "bye"
msetnx
当且仅当所有给定键都不存在时, 为所有给定键设置值。
即使只有一个给定键已经存在, MSETNX 命令也会拒绝执行对所有键的设置操作。
MSETNX 是一个原子性(atomic)操作, 所有给定键要么就全部都被设置, 要么就全部都不设置, 不可能出现第三种状态。
对不存在的键执行 MSETNX 命令: redis> MSETNX rmdbs "MySQL" nosql "MongoDB" key-value-store "redis" (integer) 1 redis> MGET rmdbs nosql key-value-store 1) "MySQL" 2) "MongoDB" 3) "redis" 对某个已经存在的键进行设置: redis> MSETNX rmdbs "Sqlite" language "python" # rmdbs 键已经存在,操作失败 (integer) 0 redis> EXISTS language # 因为 MSETNX 命令没有成功执行 (integer) 0 # 所以 language 键没有被设置 redis> GET rmdbs # rmdbs 键也没有被修改 "MySQL"
mget
返回给定的一个或多个字符串键的值。
如果给定的字符串键里面, 有某个键不存在, 那么这个键的值将以特殊值 nil 表示
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)