目录
一:概念
1:基于Linked List实现(双链表)
元素是字符串类型
列表头尾增删快,中间增删慢(要从头开始查找),增删元素是常态
元素可以重复出现
最多包含2^32-1元素
2:列表的索引
从左至右,从0开始
从右至左,从-1开始
二:命令
1:命令说明
B block 块,阻塞
L left 左从头压
R right 右
X exist 存在
2:左右或者头尾压入元素
LPUSH key value [value ...]
LPUSHX key value
RPUSH key value [value ...]
RPUSHX key value
我用的是
3:左右或者头尾弹出元素(数据在元数据中不存在)
LPOP key返回是删除的数据
RPOP key返回是删除的数据
4:从一个列表尾部弹出元素压入到另一个列表的头部
RPOPLPUSH source destination 在元数据中不存在 目的链表不存在会重建一个链表(返回的是压入的value)
5:返回列表中指定范围元素
LRANGE key start stop(含头含尾)
LRANGE key 0 -1 表示返回所有元素
6:获取指定位置的元素
LINDEX key index
7:设置指定位置元素的值
LSET key index value
相当于修改值,不能索引越界
8;列表长度,元素个数
LLEN key
9:从列表头部开始删除值等于value的元素count次
LREM key count value
count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count
count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值
count = 0 : 移除表中所有与 value 相等的值
举例
lrem y 2 java 从表头开始删除2个java
lrem y -2 java 从表尾删除两个java
lrem y 0 java 删除所有的java
10:去处指定范围外元素
LTRIM key start stop (开始区间结束区间)
举例 ltrim y 0 1删除除0-1范围内的元素(只有0和1两个元素)
11:在列表中某个存在的值(pivot)前或后插入元素
LINSERT key BEFORE|AFTER pivot value
key和pivot不存在,不进行任何操作
举例:linsert y before hadoop java 在y列表的hadoop前面插入java
注意:成功插入时返回list长度,失败返回-1
12:阻塞
如果弹出的列表不存在或者为空,就会阻塞等待直到有元素弹出
超时时间设置为0,就是永久阻塞,直到有数据可以弹出
如果多个客户端阻塞在同一个列表上,使用First In First Service原则,先到先服务
左右或者头尾阻塞弹出元素
BLPOP key [key ...] timeout(秒)在指定时间之前阻塞。新链表等待新的元素。
BRPOP key [key ...] timeout
从一个列表尾部阻塞弹出元素压入到另一个列表的头部
BRPOPLPUSH source destination timeout