NoSQL之Redis中的List消息队列
2016-01-03 00:00
661 查看
摘要: NoSQL之Redis中的List消息队列,说的是redis的第三种数据类型,list,现在看看Redis怎么操作消息队列
Redis的list类型其实就是一个每个子元素都是string类型的双向链表。链表的最大长度是(2的32次方)。我们可以通过push,pop操作从链表的头部或者尾部添加删除元素。这使得list既可以用作栈,也可以用作队列。
有意思的是list的pop操作还有阻塞版本的,当我们[lr]pop一个list对象时,如果list是空,或者不存在,会立即返回nil。但 是阻塞版本的b[lr]pop可以则可以阻塞,当然可以加超时时间,超时后也会返回nil。为什么要阻塞版本的pop呢,主要是为了避免轮询。举个简单的 例子如果我们用list来实现一个工作队列。执行任务的thread可以调用阻塞版本的pop去获取任务这样就可以避免轮询去检查是否有任务存在。当任务 来时候工作线程可以立即返回,也可以避免轮询带来的延迟
Redis的list类型其实就是一个每个子元素都是string类型的双向链表。链表的最大长度是(2的32次方)。我们可以通过push,pop操作从链表的头部或者尾部添加删除元素。这使得list既可以用作栈,也可以用作队列。
有意思的是list的pop操作还有阻塞版本的,当我们[lr]pop一个list对象时,如果list是空,或者不存在,会立即返回nil。但 是阻塞版本的b[lr]pop可以则可以阻塞,当然可以加超时时间,超时后也会返回nil。为什么要阻塞版本的pop呢,主要是为了避免轮询。举个简单的 例子如果我们用list来实现一个工作队列。执行任务的thread可以调用阻塞版本的pop去获取任务这样就可以避免轮询去检查是否有任务存在。当任务 来时候工作线程可以立即返回,也可以避免轮询带来的延迟
1, lpush 在key对应list的头部添加字符串元素: 27.0.0.1:6379> lpush game angrybird (integer) 1 127.0.0.1:6379> lpush game qqgame (integer) 2 127.0.0.1:6379> lrange game 0 1 1) "qqgame" 2) "angrybird" 127.0.0.1:6379> 2, rpush 在key对应list的尾部添加字符串元素: 127.0.0.1:6379> rpush game lol (integer) 3 127.0.0.1:6379> rpush game xml (integer) 4 127.0.0.1:6379> lrange game 0 -1 1) "qqgame" 2) "angrybird" 3) "lol" 4) "xml" 127.0.0.1:6379> 3, linsert 在key对应list的特定位置之前或之后添加字符串元素: 127.0.0.1:6379> linsert game before xml egg (integer) 5 127.0.0.1:6379> linsert game after lol heheh (integer) 6 127.0.0.1:6379> lrange game 0 -1 1) "qqgame" 2) "angrybird" 3) "lol" 4) "heheh" 5) "egg" 6) "xml" 127.0.0.1:6379> 4, lset 设置list中指定下标的元素值(下标从0开始): 127.0.0.1:6379> lrange game 0 -1 1) "qqgame" 2) "angrybird" 3) "lol" 4) "heheh" 5) "egg" 6) "xml" 127.0.0.1:6379> lset game 1 haha OK 127.0.0.1:6379> lset game 3 heinrich OK 127.0.0.1:6379> lset game 14 hhhhhh (error) ERR index out of range 127.0.0.1:6379> lrange game 0 -1 1) "qqgame" 2) "haha" 3) "lol" 4) "heinrich" 5) "egg" 6) "xml" 127.0.0.1:6379> 当超过list的长度的时候,就会index out of range lset只是修改了指定位置的value值 5, lrem 从key对应list中删除count个和value相同的元素。 count>0时,按从头到尾的顺序删除,具体如下: 127.0.0.1:6379> lrange book 0 -1 1) "php" 2) "php" 3) "php" 4) "php" 5) "php" 6) "php" 7) "java" 8) "android" 9) "javascript" 10) "php" 11) "javascript" 127.0.0.1:6379> lrem book 1 php (integer) 1 127.0.0.1:6379> lrange book 0 -1 1) "php" 2) "php" 3) "php" 4) "php" 5) "php" 6) "java" 7) "android" 8) "javascript" 9) "php" 10) "javascript" 127.0.0.1:6379> lrem book 3 php (integer) 3 127.0.0.1:6379> lrange book 0 -1 1) "php" 2) "php" 3) "java" 4) "android" 5) "javascript" 6) "php" 7) "javascript" 127.0.0.1:6379> lrem book 删除的个数, 删除那个元素 头到尾开始删除 count<0时,按从尾到头的顺序删除,具体如下: 127.0.0.1:6379> lrange book 0 -1 1) "php" 2) "php" 3) "php" 4) "php" 5) "php" 6) "php" 7) "php" 8) "php" 9) "java" 10) "android" 11) "javascript" 12) "php" 13) "javascript" 14) "javascript" 15) "javascript" 16) "javascript" 17) "javascript" 18) "javascript" 19) "javascript" 20) "javascript" 21) "javascript" 127.0.0.1:6379> lrem book -2 javascript (integer) 2 127.0.0.1:6379> lrange book 0 -1 1) "php" 2) "php" 3) "php" 4) "php" 5) "php" 6) "php" 7) "php" 8) "php" 9) "java" 10) "android" 11) "javascript" 12) "php" 13) "javascript" 14) "javascript" 15) "javascript" 16) "javascript" 17) "javascript" 18) "javascript" 19) "javascript" 127.0.0.1:6379> lrem book -7 javascript (integer) 7 127.0.0.1:6379> lrange book 0 -1 1) "php" 2) "php" 3) "php" 4) "php" 5) "php" 6) "php" 7) "php" 8) "php" 9) "java" 10) "android" 11) "javascript" 12) "php" 127.0.0.1:6379> lrem book 删除的个数, 删除那个元素 尾到头开始删除 count=0时,删除全部,具体如下: 127.0.0.1:6379> lrange book 0 -1 1) "php" 2) "php" 3) "php" 4) "php" 5) "php" 6) "php" 7) "php" 8) "php" 9) "java" 10) "android" 11) "javascript" 12) "php" 127.0.0.1:6379> lrem book 0 php (integer) 9 127.0.0.1:6379> lrange book 0 -1 1) "java" 2) "android" 3) "javascript" 127.0.0.1:6379> 6、ltrim 保留指定key 的值范围内的数据: 127.0.0.1:6379> lrange book 0 -1 1) "java" 2) "android" 3) "javascript" 127.0.0.1:6379> ltrim book 1 -1 OK 127.0.0.1:6379> lrange book 0 -1 1) "android" 2) "javascript" 127.0.0.1:6379> 7、lpop 从list的头部删除元素,并返回删除元素: 127.0.0.1:6379> lrange book 0 -1 1) "android" 2) "javascript" 3) "ali" 4) "amili" 127.0.0.1:6379> lpop book "android" 127.0.0.1:6379> 7、rpop 从list的尾部删除元素,并返回删除元素: 127.0.0.1:6379> lrange book 0 -1 1) "android" 2) "javascript" 3) "ali" 4) "amili" 127.0.0.1:6379> lpop book "android" 127.0.0.1:6379> rpop book "amili" 127.0.0.1:6379> 9、rpoplpush 从第一个list的尾部移除元素并添加到第二个list的头部, 最后返回被移除的元素值, 整个操作是原子的.如果第一个list是空或者不存在返回nil: 也就是把第一个元素的东西添加到另外一个list中,并删除该元素 127.0.0.1:6379> lrange book 0 -1 1) "html" 2) "python" 3) "android" 4) "c" 5) "php" 6) "java" 127.0.0.1:6379> lpush book1 c++ (integer) 1 127.0.0.1:6379> rpoplpush book book1 "java" 127.0.0.1:6379> 10、lindex 返回名称为key的list中index位置的元素:返回索引所对应的值 127.0.0.1:6379> lrange book 0 -1 1) "html" 2) "python" 3) "android" 4) "c" 5) "php" 127.0.0.1:6379> lindex book 2 "android" 127.0.0.1:6379> 11、llen 返回key对应list的长度: 127.0.0.1:6379> lrange book 0 -1 1) "html" 2) "python" 3) "android" 4) "c" 5) "php" 127.0.0.1:6379> lindex book 2 "android" 127.0.0.1:6379> llen book (integer) 5 127.0.0.1:6379>
相关文章推荐
- NoSQL List类型的操作命令
- 虚拟机centOS中安装Redis,主机Redis Destop Manager不能访问虚拟机Red
- Redis最有用的中文资源,你值得拥有
- redis集群环境搭建以及java中jedis客户端集群代码实现
- Redis学习笔记七:独立功能之排序
- Redis学习笔记六:独立功能之 Lua 脚本
- Redis学习笔记五:独立功能之事务
- 【Linux学习笔记】Linux-CentOS下安装Redis
- Ubuntu 15.10 下Scala 操作Redis Cluster
- 写一些脚本的心得总结系列第4篇-------从数据库同步到redis
- JedisCluster实现redis的keys命令的方法
- mysql同步redis
- Redis学习笔记四:独立功能之发布与订阅
- redis 学习笔记1
- NoSQL之Redis介绍及安装
- NoSQL之Redis中的hash 操作
- Redis的数据类型及其操作
- Linux下安装redis
- CenterOs 7 下Redis的安装和配置
- Windows下Lua+Redis 断点调试环境搭建==Linux下类似