List
常用命令
LPUSH/RPUSH
将⼀个或者多个元素从左侧(头插) / 右侧(尾插)放入到 list 中
sql
LPUSH key element [element ...]/RPUSH key element [element ...]
时间复杂度:只插⼊⼀个元素为 O(1), 插⼊多个元素为 O(N), N 为插⼊元素个数
LPUSHX/RPUSHX
在 key 存在时,将⼀个或者多个元素从左侧(头插) / 右侧(尾插)到 list 中。不存在,直接返回
sql
LPUSHX key element [element ...]
时间复杂度:只插⼊⼀个元素为 O(1), 插⼊多个元素为 O(N), N 为插⼊元素个数
LRANGE
获取从 start 到 end 区间的所有元素,左闭右闭
sql
LRANGE key start stop
时间复杂度:O(N)
LPOP/RPOP
从 list 左侧 / 右侧取出元素
sql
LPOP key / RPOP key
时间复杂度:O(1)
LINDEX
获取从左数第 index 位置的元素
sql
LINDEX key index
时间复杂度:O(N)
LINSERT
在特定位置插⼊元素
sql
LINSERT key <BEFORE | AFTER> pivot(具体数字) element
时间复杂度:O(N)
LLEN
获取 list ⻓度
sql
LLEN key
时间复杂度:O(1)
BLPOP/BRPOP
LPOP / RPOP的阻塞版本
sql
BLPOP key [key ...] timeout / BRPOP key [key ...] timeout
时间复杂度:O(1)
内部编码
基于双向链表的快速列表(quicklist):快速列表是Redis 3.2引入的一种数据结构,它是一种优化的双向链表,每个节点使用 ziplist 相邻节点使用链表相连
典型应用场景
- 消息队列
- 分页展示的文章列表