redis list类型(列表)的使用和应用场景

redis是一个高速缓存的key-values数据库,它支持五种的数据类型,包括字符串类型(String)、列表(list)、集合(set)、有序集合(zset)、哈希(hash)。下面我们来详细分析redis列表类型的使用和应用场景


一、redis列表类型(list)

list类型是用来存储多个有序的字符串的,列表当中的每一个字符看做一个元素,一个列表当中可以存储有一个或者多个元素,redis的list支持存储2^32次方-1个元素。redis可以从列表的两端进行插入(pubsh)和弹出(pop)元素,支持读取指定范围的元素集,或者读取指定下标的元素等操作。redis列表是一种比较灵活的链表数据结构,它可以充当队列或者栈的角色。

redis列表是链表型的数据结构,所以它的元素是有序的,而且列表内的元素是可以重复的。意味着它可以根据链表的下标获取指定的元素和某个范围内的元素集。


二、redis list类型常用命令

1、Lpush 命令:将一个或多个值插入到列表头部。 如果 key 不存在,则创建list,然后再插入数据操作。 当 key 存在但不是列表类型时,返回一个错误。

lpush course oracle
lpush course redis

Lpush 命令

2、RPUSH命令:同理,将一个或者多个元素从list的尾部插入。

3、Redis Blpop 命令:redis的list是链表结构所以BLPOP命令正是取出列表的第一个元素,如果list当中没有没有元素,会一直等待到超时,或者发现有数据为止。

blpop course 10

10是指定10秒内返回,假如10秒没有可返回的数据,就返回nil。如下图:

Redis Blpop 命令

4、Redis Brpop 命令:同理,Brpop是移出list列表的最后一个元素。

5、Redis Linsert 命令:指的是在list列表的某一个元素前或者后插入另外一个元素。当指的的元素不存在时,不执行任何动作。如果列表不存在时,视为空列表,不执行任何动作。基本语法如下:

LINSERT key BEFORE|AFTER element value
--实例
LINSERT  course before redis  java

Redis Linsert 命令

6、Redis Lindex 命令:用于通过链表的下标索引获取列表中的元素。这里的下标也可以是负数表示list的最后一个元素,-2表示倒数第二个元素。

lindex course 1

Redis Lindex 命令

7、Redis Llen 命令:用于返回list列表的长度。 假如list不存在,则 list 被解释为一个空列表,返回 0 。

llen course

8、Redis Lrange命令:用于返回指定list区间内的元素。区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

Redis Lrange命令


三、redis list常用的应用场景

1、消息队列:reids的链表结构,可以轻松实现阻塞队列,可以使用左进右出的命令组成来完成队列的设计。比如:数据的生产者可以通过Lpush命令从左边插入数据,多个数据消费者,可以使用BRpop命令阻塞的“抢”列表尾部的数据。

2、文章列表或者数据分页展示的应用。比如,我们常用的博客网站的文章列表,当用户量越来越多时,而且每一个用户都有自己的文章列表,而且当文章多时,都需要分页展示,这时可以考虑使用redis的列表,列表不但有序同时还支持按照范围内获取元素,可以完美解决分页查询功能。大大提高查询效率。