在前两期中分别介绍了string 和hash,他们一个是存单个数据,一个也是存少量的数据,这时我们就会发现当我想存储大量数据时不太好存储了。所以Redis又为我们提供了list数据类型。

list 类型

数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分

需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序

list类型:保存多个数据,底层使用双向链表存储结构实现




如何移除redis集群节点 redis list移除指定元素_prolog 从list中取出一个


为了能让更好地理解双向链表,以下一起回顾下以前了解或学习到的三种数据存储结构。

1、 顺序表:只一个数据挨着一个数据,从头指针开始,进来的数据一个挨着一个的往后排。其特点是查询快,因为有下标的原因能很快定位到数据并取出。但当需要对数据进行改动时就会很费时,需要将新增或修改数据位置后的数据角标全部挪动一遍。


如何移除redis集群节点 redis list移除指定元素_redis 数据类型_02


2、 链表: 头指针指向下一个数据,每个数据会有指针的存储。增删快,查询慢。

当D来了以后D先指向B,然后A断开和B的连接,指向D


如何移除redis集群节点 redis list移除指定元素_prolog 从list中取出一个_03


3、 双向链表 简单来说就是两头都能指向。因为是双向的所以能从头操作,也可从尾上操作。


如何移除redis集群节点 redis list移除指定元素_redis 数据类型_04


当E加入时的修改方式为,B先断开和A连接,然后和E建立互相的连接,之后A断开和B的连接,在和E建立连接关系

List的存储就是一个双向列表,这样我们就可以从两头都能对数据进行操作。

添加/修改数据

lpush key value1 [value2] ……

rpush key value1 [value2] ……

获取数据

lrange key start stop

lindex key index

llen key

获取并移除数据

lpop key

rpop key


如何移除redis集群节点 redis list移除指定元素_数据_05


从以上的图显示的数据发现lpush是依次从左面将 a b c d放入数组中,最终在数据中的从左到右是 e d c b a。当使用lpop时就会先把e从数据中移除。当使用rpush时会从右面将数据加入。所以在操作的时候需要明白是从左还是从右对数据进行操作。Llen表示此时数据的长度。

list 类型数据扩展操作

规定时间内获取并移除数据 (阻塞式,等待一定的时间,在规定时间内有数据就接受)(不常用)阻塞式的操作可以理解为对某个或一些队列的监听。当有数据时就会获取并进行相应的操作

blpop key1 [key2] timeout

brpop key1 [key2] timeout

brpoplpush source destination timeout

移除指定数据

lrem key count value

表示从左移除指定的key下指定的value的个数。

List应用:应用于具有操作先后顺序的数据控制。如点赞的顺序,关注顺序,粉丝的关注列表等等。

list 类型数据操作注意事项

list中保存的数据都是string类型的,数据总容量是有限的,最多2的32次方- 1 个元素 (4294967295)。

list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作

获取全部数据操作结束索引设置为-1

list可以对数据进行分页操作,通常第一页的信息来自于list,第2页及更多的信息通过数据库的形式加载。

以上为redis数据类型list的一些简单应用和操作。