在前两期中分别介绍了string 和hash,他们一个是存单个数据,一个也是存少量的数据,这时我们就会发现当我想存储大量数据时不太好存储了。所以Redis又为我们提供了list数据类型。
list 类型
数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序
list类型:保存多个数据,底层使用双向链表存储结构实现
为了能让更好地理解双向链表,以下一起回顾下以前了解或学习到的三种数据存储结构。
1、 顺序表:只一个数据挨着一个数据,从头指针开始,进来的数据一个挨着一个的往后排。其特点是查询快,因为有下标的原因能很快定位到数据并取出。但当需要对数据进行改动时就会很费时,需要将新增或修改数据位置后的数据角标全部挪动一遍。
2、 链表: 头指针指向下一个数据,每个数据会有指针的存储。增删快,查询慢。
当D来了以后D先指向B,然后A断开和B的连接,指向D
3、 双向链表 简单来说就是两头都能指向。因为是双向的所以能从头操作,也可从尾上操作。
当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
从以上的图显示的数据发现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的一些简单应用和操作。