目录
LINDEX 获取指定下标元素
LSET 指定下标添加元素
LPUSH 将元素插入列表头
LPUSHX
RPUSH 将元素插入列表尾
RPUSHX
LINSERT 将元素插入列表某位置之前
LLEN 列表长度
LPOP 取列表头元素
RPOP 取列表尾元素
BLPOP 阻塞式取列表头元素
BRPOP 阻塞式取列表尾元素
RPOPLPUSH 取尾元素插入头部
BRPOPPUSH 阻塞取尾元素插入头元素
LRANGE 返回指定区间元素
LREM 移除特定元素
LTRIM 保留特定区间元素
LINDEX key index:返回列表 key 中,下标为 index 的元素。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> lpush mylist apple
(integer) 1
127.0.0.1:6379> lpush mylist banana
(integer) 2
127.0.0.1:6379> lpush mylist orange
(integer) 3
127.0.0.1:6379> lpush mylist pear
(integer) 4
# 0取第一个
127.0.0.1:6379> lindex mylist 0
"pear"
# -1取最后一个
127.0.0.1:6379> lindex mylist -1
"apple"
127.0.0.1:6379> lindex mylist 20
(nil)
时间复杂订为O(N),N为下标index经过的元素数量。
返回值
LSET key index value:将列表 key 下标为 index 的元素的值设置为 value。
127.0.0.1:6379> flushdb
OK
# key不存在
127.0.0.1:6379> lset mylist 0 apple
(error) ERR no such key
# 初始化key 并插入值
127.0.0.1:6379> lpush mylist app
(integer) 1
127.0.0.1:6379> lindex mylist 0
"app"
# 用lset
127.0.0.1:6379> lset mylist 0 apple
OK
127.0.0.1:6379> lindex mylist 0
"apple"
时间复杂度为O(N)
返回值
LPUSH key value [value ...]:将一个或多个值 value 插入到列表 key 的表头
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> lpush mylist apple banana orange pear
(integer) 4
# 重复插入
127.0.0.1:6379> lpush mylist apple banana orange pear
(integer) 8
# 查看列表数据
127.0.0.1:6379> lrange mylist 0 -1
1) "pear"
2) "orange"
3) "banana"
4) "apple"
5) "pear"
6) "orange"
7) "banana"
8) "apple"
时间复杂度为O(1)。
返回执行LPUSH后的列表长度。
LPUSHX key value:将值 value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表。
127.0.0.1:6379> flushdb
OK
# mylist不存在
127.0.0.1:6379> lpushx mylist apple banana orange pear
(integer) 0
# 初始化mylist
127.0.0.1:6379> lpush mylist apple
(integer) 1
# lpushx操作
127.0.0.1:6379> lpushx mylist apple banana orange pear
(integer) 5
# 查看mylist数据
127.0.0.1:6379> lrange mylist 0 -1
1) "pear"
2) "orange"
3) "banana"
4) "apple"
5) "apple"
时间复杂度为O(1)。
返回执行LPUSHX后的列表长度。
RPUSH key value [value ...]
RPUSHX key value
LINSERT key BEFORE|AFTER pivot value:将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> lpush mylist apple
(integer) 1
# 插入到apple之前
127.0.0.1:6379> linsert mylist before apple banaba
(integer) 2
# 插入到apple
127.0.0.1:6379> linsert mylist after apple banaba
(integer) 3
# pivot不存在
127.0.0.1:6379> linsert mylist after pear banaba
(integer) -1
# 清空列表
127.0.0.1:6379> lpop mylist
"banaba"
127.0.0.1:6379> lpop mylist
"apple"
127.0.0.1:6379> lpop mylist
"banaba"
127.0.0.1:6379> lpop mylist
(nil)
# key为空或key不存在
127.0.0.1:6379> linsert mylist before apple banana
(integer) 0
127.0.0.1:6379> linsert mylist1 before apple banana
(integer) 0
时间复杂度O(N), N 为寻找 pivot 过程中经过的元素数量
返回执行后的列表长度
LLEN key:返回列表长度。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> lpush mylist apple banana orange pear
(integer) 4
127.0.0.1:6379> llen mylist
(integer) 4
时间复杂度O(1)。
返回列表 key 的长度。
LPOP key:移除并返回列表 key 的头元素。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> lpush mylist apple banana orange pear
(integer) 4
127.0.0.1:6379> llen mylist
(integer) 4
127.0.0.1:6379> lpop mylist
"pear"
# 头元素已不存在
127.0.0.1:6379> lrange mylist 0 -1
1) "orange"
2) "banana"
3) "apple"
127.0.0.1:6379> lpop mylist
"orange"
127.0.0.1:6379> lpop mylist
"banana"
127.0.0.1:6379> lpop mylist
"apple"
# 列表为空 或 key不存在时
127.0.0.1:6379> lpop mylist
(nil)
127.0.0.1:6379> lpop mylist1
(nil)
时间复杂度为O(1)。
返回移除的头元素
RPOP key:操作与LPOP相似
BLPOP key [key ...] timeout:列表的阻塞式(blocking)弹出原语
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> lpush mylist apple # 初始化列表并添加一个元素
(integer) 1
127.0.0.1:6379> blpop mylist 10
1) "mylist"
2) "apple"
127.0.0.1:6379> blpop mylist 10
(nil)
(10.05s) # 超时秒数,未取出数据退出
127.0.0.1:6379> lpush mylist apple # 添加一个元素
(integer) 1
# 而mylist2不存在 跳过;mylist存在且不为空,紧接着 command 列表的第一个元素被弹
127.0.0.1:6379> blpop mylist2 mylist 10
1) "mylist" # 弹出元素所属的列表
2) "apple" # 弹出元素所属的值
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> multi # 开启个事务
OK
127.0.0.1:6379(TX)> blpop mylist mylist2 1000 # 对不存在key进行blpop
QUEUED
127.0.0.1:6379(TX)> exec # 提交事务
1) (nil) # 不阻塞立即返回
127.0.0.1:6379> lpush mylist apple # 创建mylist并初始化一个元素
(integer) 1
127.0.0.1:6379> multi # 开启个事务
OK
127.0.0.1:6379(TX)> blpop mylist mylist2 1000 # 对非空列表进行blpop
QUEUED
127.0.0.1:6379(TX)> exec # 提交事务
1) 1) "mylist" # 返回元素所在的列表
2) "apple" # 返回元素
127.0.0.1:6379> multi # 开启个事务
OK
127.0.0.1:6379(TX)> blpop mylist mylist2 1000 # 对空列表进行blpop
QUEUED
127.0.0.1:6379(TX)> exec # 提交事务
1) (nil) # 不阻塞直接返回nil
时间复杂度为o(1)。
返回
BRPOP key [key ...] timeout:操作与BLPOP相似
RPOPLPUSH source destination:在一个原子时间内,执行以下两个动作
127.0.0.1:6379> flushdb
OK
# source和dectination均不存在
127.0.0.1:6379> rpoplpush mylist mylist2
(nil)
# 初始化一个列表 添加一个元素
127.0.0.1:6379> lpush mylist banana
(integer) 1
127.0.0.1:6379> rpoplpush mylist mylist2
"banana"
127.0.0.1:6379> lrange mylist2 0 -1 # 从mylist中出放入到了mylist2
1) "banana"
127.0.0.1:6379> lrange mylist 0 -1 # 已取出,mylist为空列表
(empty array)
127.0.0.1:6379> lpush mylist apple # mylist再插入元素
(integer) 1
127.0.0.1:6379> rpoplpush mylist mylist2 # 再执行一次rpoplpush
"apple"
127.0.0.1:6379> lrange mylist2 0 -1 # 打印mylist2 证实是插入到表头
1) "apple"
2) "banana"
127.0.0.1:6379> rpoplpush mylist mylist2 # mylist为空时执行 rpoplpush 返回nil
(nil)
127.0.0.1:6379> set age 22
OK
127.0.0.1:6379> rpoplpush mylist age # mylist为空,不管destination是什么数据结构,返回nil
(nil)
127.0.0.1:6379> lpush mylist apple
(integer) 1
127.0.0.1:6379> rpoplpush mylist age # mylist非空,destination是字符串,报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> rpoplpush age mylist2 # age非队列,报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(1)。
返回:(RPOPLPUSH是先rpop 再 lpush)
BRPOPLPUSH source destination timeout:是 RPOPLPUSH 的阻塞版本
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> brpoplpush mylist mylist2 10 # source不存在或空队列,阻塞超时
(nil)
(10.09s)
127.0.0.1:6379> lpush mylist apple
(integer) 1
127.0.0.1:6379> brpoplpush mylist mylist2 10 # source为非空队列,取出并lpush到mylist2中
"apple"
127.0.0.1:6379> set age 22
OK
127.0.0.1:6379> brpoplpush age mylist mylist2 10 # source不是队列
(error) ERR wrong number of arguments for 'brpoplpush' command
127.0.0.1:6379> brpoplpush mylist2 age 10 # source非空队列,dectination不是队列
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(1)。
返回:
LRANGE key start stop:返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> brpoplpush mylist mylist2 0
"banana"
(12.53s)
127.0.0.1:6379> lrange mylist2 0 -1
1) "banana"
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> lpush mylist apple banana orange pear
(integer) 4
127.0.0.1:6379> lrange mylist 0 1
1) "pear"
2) "orange"
127.0.0.1:6379> lrange mylist -2 -1
1) "banana"
2) "apple"
127.0.0.1:6379> lrange mylist 1 0 # start 大于 stop
(empty array)
127.0.0.1:6379> lrange mylist -1 -2 # start 大于 stop
(empty array)
127.0.0.1:6379> lrange mylist 100 110 # start 大于列表长度
(empty array)
时间复杂度为O(S+N),S为偏移量 start , N 为指定区间内元素的数量。
返回:
LREM key count value:根据参数 count 的值,移除列表中与参数 value 相等的元素
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> lrem mylist 0 apple
(integer) 0
127.0.0.1:6379> lpush mylist apple banana apple orange apple pear apple #插入4个apple
(integer) 7
127.0.0.1:6379> lrem mylist 2 apple # 移除2个apple
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1 # 还剩2个apple
1) "pear"
2) "orange"
3) "apple"
4) "banana"
5) "apple"
127.0.0.1:6379> lrem mylist 0 apple # 移除所有apple
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1 # 剩0 个apple
1) "pear"
2) "orange"
3) "banana"
127.0.0.1:6379> set age 22
OK
127.0.0.1:6379> lrem age 0 apple # 对非队列执行lrem
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(N), N 为列表的长度
返回:
LTRIM key start stop:只保留指定区间 [start, stop] 内的元素,不在指定区间之内的元素都将被删除
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> ltrim mylist 0 5 # 不存在的key似为空列表
OK
127.0.0.1:6379> lpush mylist 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
(integer) 15
127.0.0.1:6379> ltrim mylist 0 5 # 保存区间 [0, 5] 的元素
OK
127.0.0.1:6379> lrange mylist 0 -1 # 查看列表元素
1) "15"
2) "14"
3) "13"
4) "12"
5) "11"
6) "10"
127.0.0.1:6379> set age 22 # 对非列表执行ltrim
OK
127.0.0.1:6379> ltrim age 0 5 # 对非列表执行ltrim
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度为O(N),N 为被移除的元素的数量
返回: