目录
列表类型基于Linkedlist实现,元素是字符串类型。
列表类型的值怎么存储到数据库中呢?
1.向左向右压入元素
从左开始压入元素l:push(x) key value(value1...)
从右边开始压入元素:rpush(x) key value(value1...)
x 是表示这个元素存在,不存在就的话,key和value都不会被创建
我这里先在key a中插入5个元素
可视化软件查询结果
2.弹出数据
从左弹出数据: lpop key
从右弹出数据: rpop key
从一个列表的末尾弹入另一个列表的头部
rpoplpush a b (a的末尾元素插入b的头部)
还是引用上面创建的表:
左弹出数据
右弹出数据
弹出以后,a的值就会发生改变,所以弹出是真弹出,在原数据基础上操作
从字面也不难看出,rpop,右边弹出一个元素,lpush,从左边插入一个元素
查看结果
3.返回指定列表的元素
lrange key start stop 返回指定范围元素
lrange key 0 -1(这里索引正数和复数都可以使用的)返回所有元素
如果输入的索引超出范围,会返回所有的元素
获取指定位置的元素: lindex key index
设置指定位置元素的值: lset key insex value
获得列表的长度(元素个数):llen key
4.删除列表元素
从列表头部开始删除值等于value的元素count次
LREM key count value
count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count
count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值
count = 0 : 移除表中所有与 value 相等的值
去除指定范围外元素 LTRIM key start stop
5.向列表中插入元素
在列表的某个存在的值前后插入元素
LINSERT key BEFORE|AFTER pivot value(key和pivot不存在,不进行任何操作)
在“6”之后插入z
在“7”之前插入a
6.阻塞
如果弹出的列表不存在或者为空,就会阻塞。
超时时间设置为0,就是永久阻塞,直到有数据可以弹出。
如果多个客户端阻塞在同一个列表上,使用First In First Service原则,先到先服务。
左右或者头尾阻塞弹出元素
BLPOP key [key ...] timeout
BRPOP key [key ...] timeout
从一个列表尾部阻塞弹出元素压入到另一个列表的头部:
BRPOPLPUSH source destination timeout
key x我并没有创建,也就是里面为空,设置了等待时间为10s,因为没有向里卖
现在一个窗口运行阻塞,另一个窗口向列表中插入元素
我一运行插入元素,阻塞就立即结束了