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

[经验分享] Redis lists操作

[复制链接]

尚未签到

发表于 2016-12-17 10:41:36 | 显示全部楼层 |阅读模式
  list 是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等,操作中key理
  解为链表的名字。 
  Redis的list 类型其实就是一个每个子元素都是string类型的双向链表。链表的最大长度是(2
  的32次方)。我们可以通过push,pop操作从链表的头部或者尾部添加删除元素。这使得list
  既可以用作栈,也可以用作队列。 
  有意思的是list 的pop操作还有阻塞版本的,当我们[lr]pop一个list 对象时,如果list 是空,
  或者不存在,会立即返回nil。但是阻塞版本的b[lr]pop可以则可以阻塞,当然可以加超时时
  间,超时后也会返回nil。为什么要阻塞版本的pop呢,主要是为了避免轮询。举个简单的
  例子如果我们用list 来实现一个工作队列。执行任务的thread可以调用阻塞版本的pop去获
  取任务这样就可以避免轮询去检查是否有任务存在。当任务来时候工作线程可以立即返回,
  也可以避免轮询带来的延迟。
  redis 127.0.0.1:6379> lpush mylist "world" 从头部往list中添加数据
  (integer) 1
  redis 127.0.0.1:6379> lpush mylist "hello"
  (integer) 2
  redis 127.0.0.1:6379> lrange mylist 0 -1 获取list中的全部数据
  1) "hello"
  2) "world"
  redis 127.0.0.1:6379> rpush mylist2 "hello" 从尾部往list中添加数据
  (integer) 1
  redis 127.0.0.1:6379> rpush mylist2 "world"
  (integer) 2
  redis 127.0.0.1:6379> lrange mylist2 0 -1
  1) "hello"
  2) "world"
  redis 127.0.0.1:6379> rpush mylist3 hello
  (integer) 1
  redis 127.0.0.1:6379> rpush mylist3 world
  (integer) 2
  redis 127.0.0.1:6379> linsert mylist3 before world there 往list中指定位置插入数据
  (integer) 3
  redis 127.0.0.1:6379> lrange mylist3 0 -1
  1) "hello"
  2) "there"
  3) "world"
  redis 127.0.0.1:6379> rpush mylist4 one
  (integer) 1
  redis 127.0.0.1:6379> rpush mylist4 two
  (integer) 2
  redis 127.0.0.1:6379> rpush mylist4 three
  (integer) 3
  redis 127.0.0.1:6379> lset mylist4 0 four 根据下标索引往list中插入数据
  OK
  redis 127.0.0.1:6379> lset mylist4 -2 five
  OK
  redis 127.0.0.1:6379> lrange mylist4 0 -1
  1) "four"
  2) "five"
  3) "three"
  redis 127.0.0.1:6379> rpush mylist5 hello
  (integer) 1
  redis 127.0.0.1:6379> rpush mylist5 hello
  (integer) 2
  redis 127.0.0.1:6379> rpush mylist5 foo
  (integer) 3
  redis 127.0.0.1:6379> rpush mylist5 hello
  (integer) 4
  redis 127.0.0.1:6379> lrem mylist5 2 hello 删除list中重复个数的数据,当个数大于0从头部删除,小于0从尾部删除,等于0删除全部,返回删除的个数
  (integer) 2
  redis 127.0.0.1:6379> lrange mylist5 0 -1
  1) "foo"
  2) "hello"
  redis 127.0.0.1:6379> rpush mylist6 hello
  (integer) 1
  redis 127.0.0.1:6379> rpush mylist6 hello
  (integer) 2
  redis 127.0.0.1:6379> rpush mylist6 foo
  (integer) 3
  redis 127.0.0.1:6379> rpush mylist hello
  (integer) 3
  redis 127.0.0.1:6379> lrem mylist6 -1 hello
  (integer) 1
  redis 127.0.0.1:6379> lrange mylist6 0 -1
  1) "hello"
  2) "foo"
  redis 127.0.0.1:6379> lrem mylist6 0 hello
  (integer) 1
  redis 127.0.0.1:6379> lrange mylist6 0 -1
  1) "foo"
  redis 127.0.0.1:6379> rpush mylist7 one
  (integer) 1
  redis 127.0.0.1:6379> rpush mylist7 two
  (integer) 2
  redis 127.0.0.1:6379> rpush mylist7 three
  (integer) 3
  redis 127.0.0.1:6379> rpush mylist7 four
  (integer) 4
  redis 127.0.0.1:6379> ltrim mylist7 1 -1  更具指定下标截取list中部分的数据
  OK
  redis 127.0.0.1:6379> lrange mylist7 0 -1
  1) "two"
  2) "three"
  3) "four"
  redis 127.0.0.1:6379> lrange mylist 0 -1
  1) "hello"
  2) "world"
  3) "hello"
  redis 127.0.0.1:6379> lpop mylist 从头部删除一个数据
  "hello"
  redis 127.0.0.1:6379> lrange mylist 0 -1
  1) "world"
  2) "hello"
  redis 127.0.0.1:6379> lpop mylist
  "world"
  redis 127.0.0.1:6379> lrange mylist 0 -1
  1) "hello"
  redis 127.0.0.1:6379> lpush mylist peng
  (integer) 2
  redis 127.0.0.1:6379> lpush mylist di
  (integer) 3
  redis 127.0.0.1:6379> lrange mylist 0 -1
  1) "di"
  2) "peng"
  3) "hello"
  redis 127.0.0.1:6379> rpop mylist 从尾部删除一个数据
  "hello"
  redis 127.0.0.1:6379> lrange mylist 0 -1
  1) "di"
  2) "peng"
  redis 127.0.0.1:6379> lrange mylist1 0 -1
  (empty list or set)
  redis 127.0.0.1:6379> lrange mylist2 0 -1
  1) "hello"
  2) "world"
  redis 127.0.0.1:6379> rpoplpush mylist mylist2 将list1中的数据从尾部删除,头部新增到list2中
  "peng"
  redis 127.0.0.1:6379> lrange mylist2 0 -1
  1) "peng"
  2) "hello"
  3) "world"
  redis 127.0.0.1:6379> lrange mylist 0 -1
  1) "di"
  redis 127.0.0.1:6379> lindex mylist5 0 获得指定下标的值
  "foo"
  redis 127.0.0.1:6379> llen mylist5 获得list的长度
  (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-315488-1-1.html 上篇帖子: Redis Cluster搭建 下篇帖子: redis 安装(MAC)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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