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)的结构。
如下图所示:
其中的字段含义如下:
- 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睿哥
mikechen睿哥,十余年BAT架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》