八、Redis列表简单实现队列

作者: 温新

分类: 【Redis】

阅读: 1824

时间: 2020-09-01 13:23:50

在Redis中,List类型是按照插入顺序排列的字符串链表。与数据结构中的普通链表一样,可以在头部和尾部新增元素。新增时,如是key不存在,则创建。若列表中的元素被移除完毕,那么key也将被移除。因此使用List来实现队列是最合适的。

下面简单用Redis中的List来实现一个队列,并支持阻塞式读取。

先进先出。从左向右插入,从右先左弹出

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(103, 110, 149)"># 入栈</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1:6379> lpush book_list a b c d</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(255, 83, 112)">4</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1:6379> lrange book_list <span style="box-sizing: border-box;color: rgb(255, 83, 112)">0</span> <span style="box-sizing: border-box;color: rgb(199, 146, 234)">-1</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">1</span>) <span style="box-sizing: border-box;color: rgb(195, 232, 141)">"d"</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">2</span>) <span style="box-sizing: border-box;color: rgb(195, 232, 141)">"c"</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">3</span>) <span style="box-sizing: border-box;color: rgb(195, 232, 141)">"b"</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">4</span>) <span style="box-sizing: border-box;color: rgb(195, 232, 141)">"a"</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(103, 110, 149)"># 出栈</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1:6379> rpop book_list</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(195, 232, 141)">"a"</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1:6379> rpop book_list</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(195, 232, 141)">"b"</span></span>

图示

1)执行入栈操作之后的数据结构如下图(满足先进先出队列模式)

AA.png

2)第一次执行rpop之后的数据结构

BB.png

从右向左插入,从左右弹出

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1:6379> rpush book_list2 a b c d</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(255, 83, 112)">4</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1:6379> lrange book_list2 <span style="box-sizing: border-box;color: rgb(255, 83, 112)">0</span> <span style="box-sizing: border-box;color: rgb(199, 146, 234)">-1</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">1</span>) <span style="box-sizing: border-box;color: rgb(195, 232, 141)">"a"</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">2</span>) <span style="box-sizing: border-box;color: rgb(195, 232, 141)">"b"</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">3</span>) <span style="box-sizing: border-box;color: rgb(195, 232, 141)">"c"</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">4</span>) <span style="box-sizing: border-box;color: rgb(195, 232, 141)">"d"</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1:6379> lpop book_list2</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(195, 232, 141)">"a"</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1:6379> lrange book_list2 <span style="box-sizing: border-box;color: rgb(255, 83, 112)">0</span> <span style="box-sizing: border-box;color: rgb(199, 146, 234)">-1</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">1</span>) <span style="box-sizing: border-box;color: rgb(195, 232, 141)">"b"</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">2</span>) <span style="box-sizing: border-box;color: rgb(195, 232, 141)">"c"</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">3</span>) <span style="box-sizing: border-box;color: rgb(195, 232, 141)">"d"</span></span>

1)执行rpush之后的数据结构

CCCC.png

2)执行lpop之后的数据格式

dd.png

我是夕阳何处寻,期待和优秀的你一起同行!

小白

2020年09月01日

请登录后再评论