设为首页 收藏本站
查看: 930|回复: 0

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

[复制链接]

尚未签到

发表于 2016-12-21 06:24:31 | 显示全部楼层 |阅读模式
  注意:此文档已经过期,请移步到 http://huangz.iyunv.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) 0
redis> LPUSH command "update system..."  # 为command列表增加一个值
(integer) 1
redis> LPUSH request "visit page"  # 为request列表增加一个值
(integer) 1
redis> 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) 0
redis> EXISTS command
(integer) 0
redis> BLPOP job command 300  #因为key一开始不存在,所以操作会被阻塞,直到另一客户端对job或者command列表进行PUSH操作。
1) "job"  # 这里被push的是job
2) "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> MULTI
OK
redis> BLPOP job 30
QUEUED
redis> EXEC
1) (nil)  # 操作没有等待,立即被返回了
   LLEN key



    返回key所储存列表的长度。

    如果key不存在,则key被解释为一个空列表,返回0.

    如果key储存的不是列表,返回一个错误。


        复杂度:

            O(1)


        返回值:

            key中列表的长度。

redis> LLEN job  # 空列表
(integer) 0
redis> LPUSH job "cook food"
(integer) 1
redis> LPUSH job "have lunch"
(integer) 2
redis> 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 morning
redis> LPUSH greet "morning"
(integer) 1
redis> LPUSH greet "hello"
(integer) 2
redis> LPUSH greet "morning"
(integer) 3
redis> LPUSH greet "hello"
(integer) 4
redis> LPUSH greet "morning"
(integer) 5
redis> LRANGE greet 0 4
1) "morning"
2) "hello"
3) "morning"
4) "hello"
5) "morning"
redis> LREM greet 2 morning  # 移除从表头到表尾,最先发现的两个morning
(integer) 2  # 两个元素被移除
redis> LLEN greet
(integer) 3
redis> LRANGE greet 0 2
1) "hello"
2) "hello"
3) "morning"
redis> LREM greet -1 morning  # 移除从表尾到表头,第一个morning
(integer) 1
redis> LLEN greet
(integer) 2
redis> LRANGE greet 0 1
1) "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) 0
redis> RPUSH fp-language lisp
(integer) 1
redis> LRANGE fp-language 0 0
1) "lisp"
redis> RPUSH fp-language scheme
(integer) 2
redis> LRANGE fp-language 0 1
1) "lisp"
2) "scheme"
   

BRPOP key [key ...] timeout




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


        复杂度:

            O(1)


        返回值:

            假如在指定时间内没有任何元素被弹出,则返回一个nil和等待时长。

            反之,返回一个含有两个元素的列表,第一个是被弹出元素所属的key,第二>个是被弹出元素的值。 

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



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


        复杂度:

            O(1)


        返回值:

            列表中第一个值。

            当key不存在时,返回nil。

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

  LSET key index value



    将列表中index下标的值设为value。

    更多信息参考LINDEX操作。

    当index参数超出范围时,返回一个错误。


        复杂度:

            O(N),N为列表的长度。

            对头元素和尾元素进行LSET操作,复杂度为O(1)。


        返回值:

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

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

  RPUSHX key value



    将值value插入到表尾,当且仅当key存在并且是一个列表。     

    和RPUSH操作相反,当key不存在时,RPUSHX操作什么也不做。

   

        复杂度:

            O(1)


        返回值:

            RPUSHX操作之后,表的长度。

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-317008-1-1.html 上篇帖子: redis与memcache php rehash机制比较分析 下篇帖子: Redis和Memcached在Ruby上的性能评测(1)——写入性能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表