美文网首页
PHPRedis LIST命令

PHPRedis LIST命令

作者: 架构飞毛腿 | 来源:发表于2017-05-26 14:47 被阅读603次

应用场景:

Lists就是链表,略有数据结构知识的人都应该能理解其结构。使用Lists结构,我们可以轻松地实现最新消息排行等功能。Lists的另一个应用就是消息队列,可以利用Lists的PUSH操作,将任务存在Lists中,然后工作线程再用POP操作将任务取出进行执行。Redis还提供了操作Lists中某一段的api,你可以直接查询,删除Lists中某一段的元素。Redis的list是每个子元素都是String类型的双向链表,可以通过push和pop操作从列表的头部或者尾部添加或者删除元素,这样List即可以作为栈,也可以作为队列。

Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现,比较好理解。

实现方式:

Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。

1、lPush()/rPush()

在名称为key的list左边(头)添加一个值为value的元素,如果这个key值不存在则创建一个。如果key值存在并且不是一个list,则返回false

返回key值得长度,失败后返回 false

$redis->lPush('key1', 'C'); // returns 1

$redis->lPush('key1', 'B'); // returns 2

$redis->lPush('key1', 'A'); // returns 3

在名称为key的list右边(尾)添加一个值为value的 元素,如果这个key值不存在则创建一个。如果key值存在并且不是一个list,则返回false

$redis->rPush('key1', 'A'); // returns 1

$redis->rPush('key1', 'B'); // returns 2

$redis->rPush('key1', 'C'); // returns 3


2.lPushx()/rPushx()

lPushx:在名称为key的list左边(头)添加一个值为value的 元素,如果这个value存在则不添加。

返回key值得长度。

$redis->lPushx('key1', 'A'); // returns 0

$redis->lPush('key1', 'A'); // returns 1

$redis->lPushx('key1', 'B'); // returns 2

$redis->lPushx('key1', 'C'); // returns 3

rPushx:在名称为key的list右边(尾)添加一个值为value的 元素,如果这个value存在则不添加且返回Flase

$redis->rPushx('key1', 'A'); // returns 0

$redis->rPush('key1', 'A'); // returns 1

$redis->rPushx('key1', 'B'); // returns 2

$redis->rPushx('key1', 'C'); // returns 3


3.lPop()/rPop()


lPop:输出名称为key的list左(头)起的第一个元素,删除该元素

$redis->rPush('key1', 'A');

$redis->rPush('key1', 'B');

$redis->rPush('key1', 'C');

$redis->lPop('key1');

rPop:输出名称为key的list右(尾)起起的第一个元素,删除该元素。

$redis->rPush('key1', 'A');

$redis->rPush('key1', 'B');

$redis->rPush('key1', 'C');

$redis->rPop('key1');


4.lSize()/ILen()

返回这个key值list的个数,如果这个list不存在或为空,则返回0,如果这个值得类型并不是一个list则返回false。

$redis->rPush('key1', 'A');

$redis->rPush('key1', 'B');

$redis->rPush('key1', 'C');

$redis->lSize('key1');

$redis->rPop('key1');

$redis->lSize('key1');


5.lGet()/lIndex()

返回名称为key的list中index位置的元素,0代表第一个,1代表第二个,-1代表最后一个,-2代表倒数第二个,当这个key值不存在于list中时,返回false。

$redis->rPush('key1', 'A');

$redis->rPush('key1', 'B');

$redis->rPush('key1', 'C');

$redis->lGet('key1', 0);

$redis->lGet('key1', -1);

$redis->lGet('key1', 10);


6.lSet()

设置名称为key的list中index位置的元素赋值为value

$redis->rPush('key1', 'A');

$redis->rPush('key1', 'B');

$redis->rPush('key1', 'C');

$redis->lGet('key1', 0);

$redis->lSet('key1', 0, 'X');

$redis->lGet('key1', 0);


7.lRange()/lGetRange()

返回名称为key的list中start至end之间的元素(end为 -1 ,返回所有)

$redis->rPush('key1', 'A');

$redis->rPush('key1', 'B');

$redis->rPush('key1', 'C');

$redis->lRange('key1', 0, -1);

array(size=3)0=>string'A'(length=1)1=>string'B'(length=1)2=>string'C'(length=1)

array(size=2)0=>string'A'(length=1)1=>string'B'(length=1)



8.lTrim()/listTrim()

截取名称为key的list,保留start至end之间的元素

$redis->rPush('key1', 'A');

$redis->rPush('key1', 'B');

$redis->rPush('key1', 'C');

$redis->lRange('key1', 0, -1);

$redis->lTrim('key1', 0, 1);

$redis->lRange('key1', 0, -1);

array(size=3)0=>string'A'(length=1)1=>string'B'(length=1)2=>string'C'(length=1)

array(size=2)0=>string'A'(length=1)1=>string'B'(length=1)


9.lRem()/lRemove()

从列表中从头部开始移除count个匹配的值。如果count为零,所有匹配的元素都被删除。如果count是负数,内容从尾部开始删除。

$redis->lPush('key1', 'A');

$redis->lPush('key1', 'B');

$redis->lPush('key1', 'C');

$redis->lPush('key1', 'A');

$redis->lPush('key1', 'A');

$redis->lRange('key1', 0, -1);

$redis->lRem('key1', 'A', 2);

$redis->lRange('key1', 0, -1);

相关文章

网友评论

      本文标题:PHPRedis LIST命令

      本文链接:https://www.haomeiwen.com/subject/nmfxfxtx.html