这里只是介绍命令使用
列表是用来存储多个有序的字符串
可以用来充当栈和队列的角色
列表特点:
列表中的元素是有序的,可以通过索引下标来获取某个元素或者某个范围的元素
获取和删除有区别
元素可以重复
命令
LPUSH
将一个或者多个元素从左侧放入到list中(头插法)
lpush key element {element ……}
时间复杂度: O(N) N表示插入的元素个数
返回值: 插入新对象之后 list 的长度
LPUSHX
在 key 存在的时候,将一个或者多个元素从左侧放入,不存在就会直接返回
lpushx key element {element……}
时间复杂度: O(N) N表示插入的元素个数
返回值: 插入后 list 的长度, key 不存在就是返回 0
RPUSH
将一个或者多个元素从右侧进行插入(尾插)
rpush key element {element……}
时间复杂度: O(N) N为插入的元素个数
返回值: 插入后 list 的长度
RPUSHX
在 key 存在时,将一个或者多个元素从右侧插入,和 lpushx 类似
rpushx key element {element……}
时间复杂度: O(N) N为插入的元素个数
返回值: 插入后 list 的长度
LRANGE
获取从 start 到 end 区间的所有元素,左闭右闭
lrange key start end
时间复杂度: O(N)
返回值: 指定区间的元素
LPOP
从 list 左侧取出元素(从头删除)
lpop key
时间复杂度: O(1)
返回值: 对应取出的元素,如果没有元素或者key不存在返回 nil
RPOP
从 list 右侧取出对应元素(尾删),其余与 LPOP 相似
rpop key
时间复杂度: O(1)
返回值: 对应取出的元素,如果没有元素或者key不存在返回 nil
LINDEX
获取对应下标的元素(从左往右数)
lindex key value
时间复杂度: O(N)
返回值: 下标对应的元素或者 nil
LINSERT
在指定位置插入元素
linsert key {before | after} pivot(要插入的位置) element
时间复杂度: O(N)
返回值: 插入之后list的新长度
LLEN
获取 list 长度
llen key
时间复杂度: O(1)
返回值: list 的具体长度
阻塞版命令
区别
在 list 中有元素的情况下,阻塞版和非阻塞版的结果是一致的
如果没有元素,非阻塞版会直接返回 nil ,阻塞版会根据 timeout 来进行一段时间的阻塞,在此期间 redis 可以执行其他命令,但是对应被阻塞了的客户端还是会表示为阻塞状态
命令中如果设置了多个键,那么会从左向右遍历,一旦对应上就会弹出元素,并立即返回
如果多个客户端同时对一个键执行 pop ,那么只有最先执行的客户端可以得到弹出的元素
命令
BLPOP
LPOP的阻塞版
blpop key {key……} timeout
时间复杂度: O(1)
返回值: 取出的元素 或者 nil
BRPOP
RPOP的阻塞版
brpop key {key……} timeout
时间复杂度: O(1)
返回值: 取出的元素 或者 nil
命令总结
操作 |
命令 |
时间复杂度 |
添加 |
rpush key value [value ...] |
O(k),k 是插入的元素个数 |
lpush key value [value ...] |
O(k),k 是插入的元素个数 |
|
linsert key before|after pivot value |
O(n),n 是 pivot 距离头或尾的偏移量 |
|
查找 |
lrange key start end |
O(s + n),s 是 start 偏移量,n 是范围长度 |
lindex key index |
O(n),n 是索引的偏移量 |
|
llen key |
O(1) |
|
删除 |
lpop key |
O(1) |
rpop key |
O(1) |
|
lrem key count value |
O(k),k 是列表元素个数(需遍历) |
|
ltrim key start end |
O(k),k 是需保留的元素个数 |
|
修改 |
lset key index value |
O(n),n 是索引的偏移量 |
阻塞版 |
blpop key [key ...] timeout |
O(1) |
brpop key [key ...] timeout |
O(1) |
内部编码
当元素个数比较小同时没有较大元素时,是 ziplist
但是有时会显示为 quicklist (redis 的默认链表实现)
当元素个数超过 512 时,是 linkedlist
当某个元素长度超过 64 字节时,是 linkedlist