Redis List列表详解(命令实现及应用场景)

Redis List列表详解(命令实现及应用场景)-mikechen

Redis List列表定义

Redis List列表按照插入顺序排序,可以从头部或尾部向 List 列表添加元素。

 

Redis List列表命令

Redis List常用命令

命令语法

左压栈

lpush key v1 v2 v3 v4…

右压栈

rpush key v1 v2 …

查看里面的元素

lrange key start offset

左弹栈

lpop key

右弹栈

rpop key

按照索引查找

lindex key index

查看长度

llen key

删除几个几

lrem key 数量 value

指定开始和结束的位置截取,再赋值给key

ltrim key start offset

右出栈左压栈,把resoure的左后一个,压倒dest的第一个

rpoplpush resource destination

重置指定索引的值

lset key index value

在指定元素前/后插入指定元素

linsert key before/after 值1 值2

 

Redis List列表实现

Redis List列表的底层存储结构,其实是一个被称为快速链表(quicklist)的结构。

如下图所示:

Redis List列表详解(命令实现及应用场景)-mikechen

其中的字段含义如下:

  • zlbytes:压缩列表字节长度,占 4 字节;
  • zltail:压缩列表尾元素相对于起始元素地址的偏移量,占 4 字节;
  • zllen:压缩列表的元素个数;
  • entryX:压缩列表存储的所有元素,可以是字节数组或者是整数;
  • zlend:压缩列表的结尾,占 1 字节。

当列表中存储的元素较少时,Redis 会使用一块连续的内存来存储这些元素,这个连续的结构被称为 ziplist(压缩列表)。

而当数据量较大时,Redis 列表就会是用 quicklist(快速链表)存储元素。

Redis 之所以采用两种方法相结合的方式来存储元素,这是因为单独使用普通链表存储元素时,所需的空间较大,会造成存储空间的浪费,因此采用了链表和压缩列表相结合的方式。

 

Redis List列表应用

1.消息队列

列表类型可以使用 rpush 实现先进先出的功能,同时又可以使用 lpop 轻松的弹出第一个元素,所以列表类型可以用来实现消息队列。

2.业务列表

比如典型的业务场景:用户列表,以及商品的列表,还有评论列表等等。

3.排行榜

Redis List类型的lrange命令可以分页查看队列中的数据,可将每隔一段时间计算一次的排行榜存储在list类型中,比如:每日的手机销量排行等。

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法