一、list类型
1.数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
2.需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序
3.list类型:保存多个数据,底层使用双向链表存储结构实现
二、list 类型数据基本操作
1.添加/修改数据
a. lpush key value1 [value2] …… 从左边开始(left)
b. rpush key value1 [value2] …… 从右边开始(right)
2.获取数据
a. lrange key start stop(start-stop表示索引,即从0开始,length-1为最后一个)
b. lindex key index(index:索引位置)
c. llen key(数据长度)
注:如果数据过多但是想查询全部,索引可以为由0开始,由-1结束!
eg:从左往右放入a,b,c
模拟存储
从左往右存储示意图
从右往左存储示意图
3.获取并移除数据(类似于栈操作,后进先出)
a. lpop key
b. rpop key
三、list 类型数据扩展操作
1.规定时间内获取并移除数据(阻塞式数据获取)
a. blpop key1 [key2] timeout
b. brpop key1 [key2] timeout
c. brpoplpush source destination timeout
从左往右存a,b,取走b,再取走a,此时为空;
30s取完list0中的数据(30s中途加数据也会马上取出来)
5s取完list0中的数据(没有最后为nil空)
四、list 类型数据操作注意事项
1.list中保存的数据都是string类型的,数据总容量是有限的,最多2^32 - 1 个元素 (4294967295)
2. list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作
3. 获取全部数据操作结束索引设置为-1
4. list可以对数据进行分页操作,通常第一页的信息来自于list,第2页及更多的信息通过数据库的形式加载
五、模拟应用(微信朋友圈点赞)
1. lrem key count value 移除指定数据(count:移除个数,value:移除的值)
eg:id为01的用户的一条动态,a,b,c,d,e都为其点了赞(依次向右展示),现在要把d取消点赞