list数据类型
一、介绍
list类型是用来存储多个有序的字符串的,列表当中的每一个字符看做一个元素,一个列表当中可以存储有一个或者多个元素,redis的list支持存储2^32次方-1个元素。
redis可以从列表的两端进行插入( pubsh)和弹出(pop)元素,支持读取指定范围的元素集,或者读取指定下标的元素等操作。
redis列表是一种比较灵活的链表数据结构,它可以充当队列或者栈的角色。
redis列表是链表型的数据结构,所以它的元素是有序的,而且列表内的元素是可以重复的。意味着它可以根据链表的下标获取指定的元素和某个范围内的元素集
list类型结构实现主要依据链表和压缩列表。其中压缩列表由Zlbytes (压缩列表占用的内存字节数),Zltail(压缩列表尾结点距离起始地址有多少字节),
Zllen(压缩列表节点数),entryX(压缩列表节点),Zlend(压缩列表末端)五部分组成
二、常用命令
1、Lpush命令【Lpush key value】
将一个或多个值插入到列表头部。如果 key 不存在,则创建list,然后再插入数据操作
2、Blpop命令【 blpop key seconds】
是取出列表的第一个元素,如果list当中没有没有元素,会一直等待到超时,或者发现有数据为止,seconds是指定多少秒内返回,假如seconds秒没有可返回的数据,就返回nil
3、 Linsert命令【Linsert key before/after val1 val2】
在list列表的某一个元素前或者后插入另外一个元素。当指的的元素不存在时,不执行任何动作。如果列表不存在时,视为空列表,不执行任何动作
4、Lindex命令【 lindex key index】
用于通过链表的下标索引获取列表中的元素。这里的下标也可以是负数表示list的最后一个元素,-2表示倒数第二个元素
5.Llen命令【llen key】
用于返回list列表的长度。假如list不存在,则list被解释为一个空列表,返回0
6. Lrange命令【lrange key start end】
返回指定list区间内的元素。区间以偏移量START和END指定。其中0表示列表的第一个元素,1表示列表的第二个元素,以此类推。
也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推
三、list数据类型的应用
队列-秒杀抢购
list类型的lpop和rpush(或者反过来,lpush和rpop)能实现队列的功能,故而可以用Redis的list类型实现简单的点对点的消息队列。
秒杀抢购:某个商品限制在一个时间段,以低价进行售卖。所解决的问题点:
(1)超卖 (2) 秒杀 (3)恶意的访问
排行榜
list类型的Irange命令可以分页查看队列中的数据。可将每隔一段时间计算一次的排行榜存储在list类型中,如京东每日的手机销量排行、学校每次月考学生的成绩排名、斗鱼年终盛典主播排名等