首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

【进行中】Redis下令参考(Commands Reference)中文翻译【List部分】

2012-07-22 
【进行中】Redis命令参考(Commands Reference)中文翻译【List部分】注意:此文档已经过期,请移步到?http://huan

【进行中】Redis命令参考(Commands Reference)中文翻译【List部分】

注意:此文档已经过期,请移步到?http://huangz.iteye.com/blog/1123512?查看最新翻译。

?

BLPOP key [key ...] timeout

??? BLPOP是一个阻塞列表的弹出原语。
??? 它是LPOP的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被BLPOP命令阻塞。
??? 当给定多个key参数时,按传入key的先后检查列表,弹出第一个非空列表的头部元素。

??????? 复杂度:
??????????? O(1)

??????? 返回值:
??????????? 假如在指定时间内没有任何元素被弹出,则返回一个nil和等待时长。
??????????? 反之,返回一个含有两个元素的列表,第一个是被弹出元素所属的key,第二个是被弹出元素的值。

??? 非阻塞行为

??? 当BLPOP被调用时,如果给定key内至少有一个非空列表,那么弹出遇到的第一个非空列表的头部元素,并和被弹出元素所属的列表的名字一起,组成结果>返回给调用者。

??? (多个)给定key按被传入的先后顺序被检查。
??? 假设现在job不存在,command和request都持有非空列表。考虑以下命令:

??? BLPOP job command request

??? BLPOP保证返回的元素来自command,因为它是第一个按“查找job -> 查找command -> 查找request”这样的顺序,第一个找到的非空列表。

?

redis> DEL job command request  # 确保key都被删除(integer) 0redis> LPUSH command "update system..."  # 为command列表增加一个值(integer) 1redis> LPUSH request "visit page"  # 为request列表增加一个值(integer) 1redis> BLPOP job command request 0  # job列表为空,被跳过,紧接着command列表的第一个元素被弹出。1) "command"2) "update system..."

?

??? 阻塞行为

??? 如果所有给定key都不存在或包含空列表,那么BLPOP将阻塞连接,直到另一个客户端对给定key的其中一个列表执行LPUSH或RPUSH操作,或操作超时为止。

??? 如果在规定时间内新数据出现在其中一个key列表内,或者等待超时,都会导致返回。

??? 超时参数接受一个数字作为值。超时参数设为0表示阻塞时间可以无限期延长(block indefinitely) 。

??? 相同的key被多个客户端同时阻塞

??? 相同的key可以被多个客户端同时阻塞。不同的客户端被放到一个队列中,按“先阻塞先服务”的顺序同key进行BLPOP操作。

?

redis> EXISTS job  # 确保两个key都不存在(integer) 0redis> EXISTS command(integer) 0redis> BLPOP job command 300  #因为key一开始不存在,所以操作会被阻塞,直到另一客户端对job或者command列表进行PUSH操作。1) "job"  # 这里被push的是job2) "do my home work"  # 被弹出的内容(26.26s)  # 等待的秒数redis> BLPOP job command 5  # 等待超时的情况(nil)(5.66s)

?

??? 在MULTI/EXEC事务中的BLPOP

??? BLPOP可以用于流水线(批量地发送多个命令并阅读多个回复),但它不能用在MULTI/EXEC块当中。这要求整个服务器按顺序被阻塞以保证块执行时的原子
性,该行为阻止了其他客户端执行push操作。

??? 一个被包含在MULTI/EXEC命令内的BLPOP操作,行为表现得就像操作超时一样,仅仅返回一个nil值。如果你是科幻迷,你可以想象MULTI/EXEC命令内时间>以无限的速度在流逝。

?

redis> MULTIOKredis> BLPOP job 30QUEUEDredis> EXEC1) (nil)  # 操作没有等待,立即被返回了
?

?

LLEN key

??? 返回key所储存列表的长度。
??? 如果key不存在,则key被解释为一个空列表,返回0.
??? 如果key储存的不是列表,返回一个错误。

??????? 复杂度:
??????????? O(1)

??????? 返回值:
??????????? key中列表的长度。

redis> LLEN job  # 空列表(integer) 0redis> LPUSH job "cook food"(integer) 1redis> LPUSH job "have lunch"(integer) 2redis> LLEN job(integer) 2
?


LREM key count value

??? 按照count参数的要求,移除列表中与value参数相等的值。
???
??? count参数可以是以下几种:
??????? count > 0 : 从表头开始向表尾搜索,移除与value参数相等的值。
??????? count < 0 : 从表尾开始向表头搜索,移除与value参数相等的值。
??????? count = 0 : 移除表中所有与value相等的值。

??????? 复杂度:
??????????? O(N),N为列表的长度。

??????? 返回值:
??????????? 被移除值的数量。

?

# 先创建一个表,内容排列是# morning hello morning helllo morningredis> LPUSH greet "morning"(integer) 1redis> LPUSH greet "hello"(integer) 2redis> LPUSH greet "morning"(integer) 3redis> LPUSH greet "hello"(integer) 4redis> LPUSH greet "morning"(integer) 5redis> LRANGE greet 0 41) "morning"2) "hello"3) "morning"4) "hello"5) "morning"redis> LREM greet 2 morning  # 移除从表头到表尾,最先发现的两个morning(integer) 2  # 两个元素被移除redis> LLEN greet (integer) 3redis> LRANGE greet 0 21) "hello"2) "hello"3) "morning"redis> LREM greet -1 morning  # 移除从表尾到表头,第一个morning(integer) 1redis> LLEN greet(integer) 2redis> LRANGE greet 0 11) "hello"2) "hello"redis> LREM greet 0 hello  # 移除表中所有hello(integer) 2  # 两个hello被移除redis> LLEN greet(integer) 0

?


RPUSH key value

??? 将值插入到表尾。
??? 如果key不存在,一个空列表会被自动创建再执行RPUSH操作。
??? 当key存在当不是列表类型时,返回一个错误。

??????? 复杂度:
??????????? O(1)

??????? 返回值:
??????????? 执行RPUSH操作后,表的长度。

?

redis> LLEN fp-language(integer) 0redis> RPUSH fp-language lisp(integer) 1redis> LRANGE fp-language 0 0 1) "lisp"redis> RPUSH fp-language scheme(integer) 2redis> LRANGE fp-language 0 11) "lisp"2) "scheme"
?


BRPOP key [key ...] timeout


??? RPOP操作的阻塞版本,作用和BLPOP相似,唯一不同是BRPOP弹出第一个非空列表的表尾元素,而BLPOP弹出第>一个非空列表的表头元素。(具体参考BLPOP命令)。

??????? 复杂度:
??????????? O(1)

??????? 返回值:
??????????? 假如在指定时间内没有任何元素被弹出,则返回一个nil和等待时长。
??????????? 反之,返回一个含有两个元素的列表,第一个是被弹出元素所属的key,第二>个是被弹出元素的值。?

?

?

redis> LLEN course(integer) 0redis> RPUSH course algorithm001(integer) 1redis> RPUSH course c++101(integer) 2redis> BRPOP course 301) "course"2) "c++101"

?

?

LPOP key

??? 移除并返回列表中第一个元素。

??????? 复杂度:
??????????? O(1)

??????? 返回值:
??????????? 列表中第一个值。
??????????? 当key不存在时,返回nil。

?

redis> LLEN course(integer) 0redis> RPUSH course algorithm001(integer) 1redis> RPUSH course c++101(integer) 2redis> LPOP course"algorithm001"
?


LSET key index value

??? 将列表中index下标的值设为value。
??? 更多信息参考LINDEX操作。
??? 当index参数超出范围时,返回一个错误。

??????? 复杂度:
??????????? O(N),N为列表的长度。
??????????? 对头元素和尾元素进行LSET操作,复杂度为O(1)。

??????? 返回值:
??????????? 操作成功返回ok,否则返回错误信息。

redis> LPUSH job "cook food"(integer) 1redis> LRANGE job 0 01) "cook food"redis> LSET job 0 "play game"OKredis> LRANGE job  0 01) "play game"
?


RPUSHX key value

??? 将值value插入到表尾,当且仅当key存在并且是一个列表。?????
??? 和RPUSH操作相反,当key不存在时,RPUSHX操作什么也不做。
???
??????? 复杂度:
??????????? O(1)

??????? 返回值:
??????????? RPUSHX操作之后,表的长度。

redis> LLEN greet(integer) 0redis> RPUSHX greet "hello"  # 对不存在的key进行RPUSHX,PUSH失败。(integer) 0redis> RPUSH greet "hi"  # 先用RPUSH插入一个元素(integer) 1redis> RPUSHX greet "hello"  # greet现在是一个列表类型,RPUSHX操作成功。(integer) 2
?

?

?

?

?

######防止编辑器吃掉空白行

热点排行