NoSQL之Redis中的List消息队列

前端之家收集整理的这篇文章主要介绍了NoSQL之Redis中的List消息队列前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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>lpushgameangrybird
(integer)1
127.0.0.1:6379>lpushgameqqgame
(integer)2
127.0.0.1:6379>lrangegame01
1)"qqgame"
2)"angrybird"
127.0.0.1:6379>

2,rpush  

在key对应list的尾部添加字符串元素:
127.0.0.1:6379>rpushgamelol
(integer)3
127.0.0.1:6379>rpushgamexml
(integer)4
127.0.0.1:6379>lrangegame0-1
1)"qqgame"
2)"angrybird"
3)"lol"
4)"xml"
127.0.0.1:6379>

3,linsert

在key对应list的特定位置之前或之后添加字符串元素:
  
127.0.0.1:6379>linsertgamebeforexmlegg
(integer)5
127.0.0.1:6379>linsertgameafterlolheheh
(integer)6
127.0.0.1:6379>lrangegame0-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>lrangegame0-1
1)"qqgame"
2)"angrybird"
3)"lol"
4)"heheh"
5)"egg"
6)"xml"
127.0.0.1:6379>lsetgame1haha
OK
127.0.0.1:6379>lsetgame3heinrich
OK
127.0.0.1:6379>lsetgame14hhhhhh
(error)ERRindexoutofrange
127.0.0.1:6379>lrangegame0-1
1)"qqgame"
2)"haha"
3)"lol"
4)"heinrich"
5)"egg"
6)"xml"
127.0.0.1:6379>
当超过list的长度的时候,就会indexoutofrangelset只是修改了指定位置的value值

 5,lrem
 
从key对应list中删除count个和value相同的元素。
  count>0时,按从头到尾的顺序删除,具体如下:
  
  127.0.0.1:6379>lrangebook0-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>lrembook1PHP
(integer)1
127.0.0.1:6379>lrangebook0-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>lrembook3PHP
(integer)3
127.0.0.1:6379>lrangebook0-1
1)"PHP"
2)"PHP"
3)"java"
4)"android"
5)"javascript"
6)"PHP"
7)"javascript"
127.0.0.1:6379>
lrembook删除的个数,删除那个元素头到尾开始删除

count<0时,按从尾到头的顺序删除,具体如下:

127.0.0.1:6379>lrangebook0-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>lrembook-2javascript
(integer)2
127.0.0.1:6379>lrangebook0-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>lrembook-7javascript
(integer)7
127.0.0.1:6379>lrangebook0-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>

lrembook删除的个数,删除那个元素尾到头开始删除

 count=0时,删除全部,具体如下:
 127.0.0.1:6379>lrangebook0-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>lrembook0PHP
(integer)9
127.0.0.1:6379>lrangebook0-1
1)"java"
2)"android"
3)"javascript"
127.0.0.1:6379>

6、ltrim 
 
保留指定key的值范围内的数据:

127.0.0.1:6379>lrangebook0-1
1)"java"
2)"android"
3)"javascript"
127.0.0.1:6379>ltrimbook1-1
OK
127.0.0.1:6379>lrangebook0-1
1)"android"
2)"javascript"
127.0.0.1:6379>

 7、lpop
 
 从list的头部删除元素,并返回删除元素:
127.0.0.1:6379>lrangebook0-1
1)"android"
2)"javascript"
3)"ali"
4)"amili"
127.0.0.1:6379>lpopbook
"android"
127.0.0.1:6379>

7、rpop
 
从list的尾部删除元素,并返回删除元素:
127.0.0.1:6379>lrangebook0-1
1)"android"
2)"javascript"
3)"ali"
4)"amili"
127.0.0.1:6379>lpopbook
"android"
127.0.0.1:6379>rpopbook
"amili"
127.0.0.1:6379>

9、rpoplpush

  从第一个list的尾部移除元素并添加到第二个list的头部,最后返回被移除的元素值,
整个操作是原子的.如果第一个list是空或者不存在返回nil:
也就是把第一个元素的东西添加到另外一个list中,并删除该元素
127.0.0.1:6379>lrangebook0-1
1)"html"
2)"python"
3)"android"
4)"c"
5)"PHP"
6)"java"
127.0.0.1:6379>lpushbook1c++
(integer)1
127.0.0.1:6379>rpoplpushbookbook1
"java"
127.0.0.1:6379>

10、lindex  
返回名称为key的list中index位置的元素:返回索引所对应的值

127.0.0.1:6379>lrangebook0-1
1)"html"
2)"python"
3)"android"
4)"c"
5)"PHP"
127.0.0.1:6379>lindexbook2
"android"
127.0.0.1:6379>

11、llen

  
返回key对应list的长度:

127.0.0.1:6379>lrangebook0-1
1)"html"
2)"python"
3)"android"
4)"c"
5)"PHP"
127.0.0.1:6379>lindexbook2
"android"
127.0.0.1:6379>llenbook
(integer)5
127.0.0.1:6379>


  




 

猜你在找的NoSQL相关文章