Redis命令参考(Commands Reference)中文翻译【String部分】
注意:此文档已经过期,请移步到?http://huangz.iteye.com/blog/1123512?查看最新翻译。
?
String部分
APPEND key value
?? ?如果key已经存在并且是一个字符串,APPEND命令将value追加到key原来的值之后。
?? ?如果key不存在,APPEND就简单地将指定key设为value,就像SET key value一样。
?? ?复杂度:
?? ? ? ?O(1)
?? ? ? ?平摊复杂度O(1)是建立于要追加(appended)的value不大(small)的情况下,不管原字符串有多大。因为Redis所使用的动态字符串库,每次重分配都使用双倍的空间。(这大>概可以理解为:如果你有一个10个字符的字符串,你追加一个长度<=10的字符串,复杂度是O(1),但如果追加一个>=10个字符的字符串,就不能保证复杂度一定是O(1)了。 —— 译注)
?? ?返回值:
?? ? ? ?追加value之后字符串的长度。
redis> EXISTS myphone # 确保myphone不存在
(integer) 0
redis> APPEND myphone "nokia" # 对不存在的key进行APPEND,等同于SET myphone "nokia"
(integer) 5
redis> APPEND myphone " - 1110" # 真正的APPEND
(integer) 12 # 长度从5个字符增加到12个字符
redis> GET myphone
"nokia - 1110"
?
GETRANGE key start end
?? ?返回key所储存值的子字符串,截取范围由start和end(包含在内)两个偏移量决定。
?? ?负数偏移量表示从字符串最后开始计数,-1表示最后一个字符,-2表示倒数第二个,以此类推。
?? ?GETRANGE通过保证子字符串的值域(range)不超过实际字符串的值域来处理超出范围的值域请求。
?? ?复杂度:
?? ? ? ?O(N),N为要返回的字符串的长度。
?? ? ? ?复杂度最终由返回值长度决定,但因为从已有字符串中建立子字符串的操作非常廉
价(cheap),所以对于长度不大的字符串,该操作的复杂度也可看作O(1)。
?? ? ? ?注意:在<=2.0的版本里,GETRANGE被叫作SUBSTR。
?? ?返回值:
?? ? ? ?子字符串的内容
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"
?
MSET key value [key value ...]
?? ?为给定的key设置各自的值(value)。
?? ?当key相同时,MSET会用新值覆盖旧值,如果你不希望覆盖同名key,请参考MSETNX命令。 ?
?? ?MSET是一个原子性(atomic)操作,所有给定key都在同一次中被设置,某些给定key被更新而另一些给定key没有改变的情况不会发生。
?? ?复杂度:
?? ? ? ?O(N),N为要设置的key数量。
?? ?返回值:
?? ? ? ?总是返回OK(因为MSET不可能失败)
redis> KEYS * # 这是个空数据库
(empty list or set)
redis> MSET date "2011.4.18" time "9.09a.m." weather "sunny"
OK
redis> KEYS * # 指定的三个key-value对被插入
1) "time"
2) "weather"
3) "date"
redis> SET blog "huangz.iteye.com" # MSET覆盖旧值的例子
OK
redis> MSET blog "www.SideEffect.me"
OK
redis> GET blog
"www.SideEffect.me"
?
SETNX key value
?? ?假如给定的key不存在,则将key设置为给定的字符串值。
?? ?若给定的key已经存在,则SETNX不做任何动作。
?? ?SETNX是"SET if Not eXists"(如果不存在,则SET)的简写。
?? ?复杂度:
?? ? ? ?O(1)
?? ?返回值:
?? ? ? ?如果设置成功,返回1.
?? ? ? ?设置失败,返回0.
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"
??
?? ?设计模式(Design pattern): 将SETNX用作锁(locking)
?? ?SETNX可以用于加锁(locking primitive)。比如说,要对关键字(key)foo加锁,客户端可以尝试以下方式:
?? ?SETNX lock.foo <current Unix time + lock timeo