日期:2014-05-16  浏览次数:20547 次

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