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

[经验分享] Redis命令详解-List

[复制链接]

尚未签到

发表于 2016-12-20 06:10:15 | 显示全部楼层 |阅读模式
  1.lpush key value value``````


加入版本1.0.0。

时间复杂度:O(1)。



将所有指定的值插入到存于key的列表的头部。如果key不存在,那么在进行
push 操作前会创建一个空列表。 如果key对应的值不是一个 list 的话,那么会返回一个错误。

可以使用一个命令把多个元素 push 进入列表,只需在命令末尾加上多个指定的参数。元素是从最左端的到最右端的、一个接一个被插入到 list 的头部。 所以对于这个命令例子LPUSH mylist a b c,返回的列表是c为第一个元素,b为第二个元素,a为第三个元素。


返回值



整型回复: 在 push 操作后的 list 长度。


历史




  • >= 2.4: 接受多个value参数。版本老于
    2.4 的 Redis 只能每条命令 push 一个值。

DSC0000.jpg
  

  2.lpushx key value


加入版本2.2.0。

时间复杂度:O(1)。



只有当key已经存在并且存着一个 list 的时候,在这个key下面的
list 的头部插入value。 与LPUSH相反,当key不存在的时候不会进行任何操作。


返回值



整型回复: 在 push 操作后的 list 长度。

DSC0001.jpg
  

  3.lrange key start end


入版本1.0.0。

时间复杂度:O(S+N)。其中S是起始偏移量,N是指定范围内的元素数量。



返回存储在key的列表里指定范围内的元素。startend偏移量都是基于0的下标,即list的第一个元素下标是0(list的表头),第二个元素下标是1,以此类推。

偏移量也可以是负数,表示偏移量是从list尾部开始计数。 例如,-1表示列表的最后一个元素,-2是倒数第二个,以此类推。


在不同编程语言里,关于求范围函数的一致性



需要注意的是,如果你有一个list,里面的元素是从0到100,那么LRANGE list 0 10这个命令会返回11个元素,即最右边的那个元素也会被包含在内。 在你所使用的编程语言里,这一点可能是也可能不是跟那些求范围有关的函数都是一致的。(像Ruby的Range.newArray#slice或者Python的range()函数。)


超过范围的下标



当下标超过list范围的时候不会产生error。 如果start比list的尾部下标大的时候,会返回一个空列表。 如果stop比list的实际尾部大的时候,Redis会当它是最后一个元素的下标。


返回值



多批量回复: 指定范围里的列表元素。

DSC0002.jpg
  

  4.lpop key


加入版本1.0.0。

时间复杂度:O(1)。



移除并且返回key对应的 list 的第一个元素。


返回值



批量回复: 返回第一个元素的值,或者当key不存在时返回nil

DSC0003.jpg
  

  

  5.lrem key count value


加入版本1.0.0。

时间复杂度:O(N),此处N表示list的长度。



从存于key的列表里移除前count次出现的值为value的元素。
这个count参数通过下面几种方式影响这个操作:



  • count > 0: 从头往尾移除值为value的元素。

  • count < 0: 从尾往头移除值为value的元素。

  • count = 0: 移除所有值为value的元素。


比如,LREM list -2 "hello"会从存于list的列表里移除最后两个出现的"hello"

需要注意的是,如果list里没有存在key就会被当作空list处理,所以当key不存在的时候,这个命令会返回0


返回值



整型回复: 被移除的元素个数。

DSC0004.jpg
  

  

  6.lset key index value


加入版本1.0.0。

时间复杂度:O(N),此处N表示list的长度。设置list里第一个或者最后一个元素的复杂度是O(1)。



设置index位置的list元素的值为value
更多关于index参数的信息,详见LINDEX。

当index超出范围时会返回一个error。


返回值



状态回复

DSC0005.jpg
  

  7.ltrim key start end


加入版本1.0.0。

时间复杂度:O(N) 这里的N是该操作中要被移除掉的元素个数。



修剪(trim)一个已存在的 list,这样 list 就会只包含指定范围的指定元素。startstop都是由0开始计数的,
这里的0是列表里的第一个元素(表头),1是第二个元素,以此类推。

例如:LTRIM foobar 0 2将会对存储在foobar的列表进行修剪,只保留列表里的前3个元素。

startend也可以用负数来表示与表尾的偏移量,比如-1表示列表里的最后一个元素,-2表示倒数第二个,等等。

超过范围的下标并不会产生错误:如果start超过列表尾部,或者start
> end
,结果会是列表变成空表(即该 key 会被移除)。 如果end超过列表尾部,Redis 会将其当作列表的最后一个元素。

LTRIM的一个常见用法是和LPUSH/RPUSH一起使用。
例如:

LPUSH mylist someelement
LTRIM mylist 0 99


这一对命令会将一个新的元素 push 进列表里,并保证该列表不会增长到超过100个元素。这个是很有用的,比如当用 Redis 来存储日志。 需要特别注意的是,当用这种方式来使用LTRIM的时候,操作的复杂度是O(1),
因为平均情况下,每次只有一个元素会被移除。


返回值



状态回复

DSC0006.jpg
  

  8.rpush key vaue value`````


加入版本1.0.0。

时间复杂度:O(1)。



向存于key的列表的尾部插入所有指定的值。如果key不存在,那么会创建一个空的列表然后再进行
push 操作。 当key保存的不是一个列表,那么会返回一个错误。

可以使用一个命令把多个元素打入队列,只需要在命令后面指定多个参数。元素是从左到右一个接一个从列表尾部插入。 比如命令RPUSH mylist a b c会返回一个列表,其第一个元素是a,第二个元素是b,第三个元素是c


返回值



整型回复: 在 push 操作后的列表长度。


历史




  • >= 2.4: 接受多个value参数。
    在老于 2.4 的 Redis 版本中,一条命令只能 push 单一个值。

DSC0007.jpg
  

  9.rpop key


加入版本1.0.0。

时间复杂度:O(1)。



移除并返回存于key的 list 的最后一个元素。


返回值



批量回复: 最后一个元素的值,或者当key不存在的时候返回nil

DSC0008.jpg
  

  10.rpoplpush key1 key2


加入版本1.2.0。

时间复杂度:O(1)。



Atomically returns and removes the last element (tail) of the list stored atsource, and pushes the
element at the first element (head) of the list stored atdestination.

For example: considersourceholding the lista,b,c,
anddestinationholding the listx,y,z.
ExecutingRPOPLPUSHresults insourceholdinga,banddestinationholdingc,x,y,z.

Ifsourcedoes not exist, the valuenilis
returned and no operation is performed. Ifsourceanddestinationare
the same, the operation is equivalent to removing the last element from the list and pushing it as first element of the list, so it can be considered as a list rotation command.


Return value



Bulk reply: the element being popped and pushed.

DSC0009.jpg
  

  11.rpush key value


加入版本2.2.0。

时间复杂度:O(1)。



将值value插入到列表key的表尾,
当且仅当key存在并且是一个列表。 和RPUSH命令相反,
key不存在时,RPUSHX 命令什么也不做。


返回值



Integer: RPUSHX 命令执行之后,表的长度。

DSC00010.jpg





12.lindex key index


加入版本1.0.0。

时间复杂度:O(N),此处N是通过下标遍历到要找的元素所经过元素个数。也就是说要询问list里的第一个或者最后一个元素的复杂度是O(1)。



返回列表里的元素的索引index存储在key里面。
下标是从0开始索引的,所以0是表示第一个元素,1表示第二个元素,并以此类推。
负数索引用于指定从列表尾部开始索引的元素。在这种方法下,-1表示最后一个元素,-2表示倒数第二个元素,并以此往前推。

key位置的值不是一个列表的时候,会返回一个error。


返回值



批量回复:请求的对应元素,或者当index超过范围的时候返回nil

DSC00011.jpg
  

  13.linsert key before|after value1 value2


加入版本2.2.0。

时间复杂度:O(N),此处N是在看见pivot值之前遍历过的元素个数。
这意味着在list最左端(表头)进行插入的复杂度是O(1),而在list最右端(表尾)进行插入是O(N)。



value插入存于key的列表中在基准值pivot的前面或后面。

key不存在时,这个list会被看作是空list,任何操作都不会发生。

key存在,但保存的不是一个list的时候,会返回error。


返回值



整型回复: 经过插入操作后的list长度,或者当pivot值找不到的时候返回-1




DSC00012.jpg





注:本文的命令详解主要来源redis中文官网,这里是进一步整理供学习和以后查询使用。



  




运维网声明 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-316522-1-1.html 上篇帖子: rails3项目解析——redis 下篇帖子: Redis(超高性能数据库)持久化Key-Value数据存储
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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