目录

Redis-List类型

Redis–List类型


一、引言

本篇文章就Redis中value的List类型做简单介绍。

二、介绍

List相当于数组或顺序表(并非是一个简单的数组,更接近于双端队列)。lpush(头插)rpush(尾插)lpop(头删)rpop(尾删)。

列表中的元素是有序的(有序指顺序很重要,如果把元素位置颠倒,顺序调换得到新的List和之前的List不等价)

列表中的元素是允许重复的

可以将列表当作栈/队列进行使用,例如:消息队列(Message Queue)

三、命令

1.lpush,lrange

LPUSH:lpush key element[element…]一次可以插入一个元素或多个元素,如果key已经存在,这时使用lpush操作会进行报错

https://i-blog.csdnimg.cn/direct/67e86782bbb64bb6af15f5c5c2ac6f87.png

LRANGE:查看list中指定范围的元素(List range)

lrange key start stop

https://i-blog.csdnimg.cn/direct/b49b3562e383411a86d3b60fbdc119d9.png

2.lpushx,rpush,rpushx

lpushx:key存在才能插入成功,不存在会失败

https://i-blog.csdnimg.cn/direct/2e2fab3fd6dc4591a705238ef525dacc.png

rpush:从右侧进行插入,尾插法

https://i-blog.csdnimg.cn/direct/5cbae6d718194b248169b3ec9d0bea96.png

rpushx:和lpushx一样,存在才能插入

3.lpop,rpop

lpop:从左边弹出,头弹出

rpop:从右边弹出,尾弹出

https://i-blog.csdnimg.cn/direct/3cba5a518e7b4e6a9f11942b16545f9a.png

4.lindex,linsert,llen

lindex:获取从左数的对应的元素 时间复杂度:O(N)

https://i-blog.csdnimg.cn/direct/3fe04acbe63347be9ff634ce66fef711.png

linsert:linsert key before | after pivot(具体的值) element

存在相同的元素,会执行第一个元素   时间复杂度:O(N)

https://i-blog.csdnimg.cn/direct/985050f6025c4060a10dc6a4e3d99266.png

llen:获取list的长度

5.lrem

lrem key count element

删除元素:count>0从左往右删   count<0 从右往左删   count=0  将所有的该元素删除

6.ltrim,lset

ltrim:ltrim key stary stop 范围保留,这个范围内的都保留,其余的都删除

https://i-blog.csdnimg.cn/direct/fb36103246f94d4da8dbb8c8c55f8252.png

lset:lset key index element  时间复杂度:O(N)

修改指定位置的元素

https://i-blog.csdnimg.cn/direct/eed46b5e0ce745c4962feb5f4264104b.png

7.blpop,brpop

阻塞版本的lpop和rpop

如果list中存在元素,blpop和brpop的作用与lpop和rpop相同

如果list中不存在元素,blpop和brpop就会产生阻塞,一直阻塞到队列存在元素

可以设置阻塞时间,不一定是无休止的等待

如果设置了多个key,那么会从左往右进行遍历键,一旦一个键对应的列表可以弹出元素,命令立即返回

https://i-blog.csdnimg.cn/direct/ac7c60990df846f3ad4028e9d5b1bfeb.png

四、内部编码

1.ziplist:压缩列表

列表的元素小于list-max-entries配置(默认512个),列表中每个元素的长度小于64字节

2.linkedlist:链表

便于查找,但是存在一定的内存开销

3.quicklist:redis5之后的编码方式

相当于是链表和压缩列表的结合,整体还是一个链表,链表每个节点是一个压缩列表

https://i-blog.csdnimg.cn/direct/5990c4f2bbf64f3eb66e964bde0284d6.png

五、应用场景

1.用list作为数组这样的结构存储多个元素

2.消息队列

生产者消费者模型:生产者(lpush)消费者(brpop)

3.微博TimeLine

还是将list作为数组进行存储

六、总结

本篇文章简单介绍了value的list类型的相关操作以及相关的应用场景,下一篇文章将介绍redis中的集合set,感谢观看!