虚拟主机网站建设步骤?,网站无法添加图片,花生壳软件做的网站,阿里云快速建站教程目录 List列表常用命令lpushlpushxrpushrpushlrangelpoprpoplindexlinsertllenlremltrim key start stoplset 阻塞版本命令blpopbrpop list的编码方式list的应用 List列表
Redis中的list相当于数组#xff0c;或者 顺序表#xff0c;一些常用的操作可以通过下面这张图来理解… 目录 List列表常用命令lpushlpushxrpushrpushlrangelpoprpoplindexlinsertllenlremltrim key start stoplset 阻塞版本命令blpopbrpop list的编码方式list的应用 List列表
Redis中的list相当于数组或者 顺序表一些常用的操作可以通过下面这张图来理解 实际上这个并不是一个简单的数组而是类似于一个“双端队列” 列表类型的特点
列表中的元素是有序的这意味着可以通过索引下标获取某个元素或者某个范围的元素列表例如要上图的第 5 个元素可以执行 lindex user:1:messages 4 或者倒数第 1 个元素lindexuser:1:messages -1 就可以得到元素 e区分获取和删除的区别例如图 2-20 中的 lrem 1 b 是从列表中把从左数遇到的前 1 个 b 元素删除这个操作会导致列表的长度从 5 变成 4但是执⾏ lindex 4 只会获取元素但列表长度是不会变化的列表中的元素是允许重复的如下图 常用命令
lpush
LPUSH key element [element ...]//将⼀个或者多个元素从左侧放⼊头插到 list 中
//时间复杂度只插⼊⼀个元素为 O(1), 插⼊多个元素为 O(N), N 为插⼊元素个数
//返回值插⼊后 list 的⻓度lpushx LPUSHX key element [element ...]//在 key 存在时将⼀个或者多个元素从左侧放⼊头插到 list 中。不存在直接返回
//时间复杂度只插⼊⼀个元素为 O(1), 插⼊多个元素为 O(N), N 为插⼊元素个数
//返回值插⼊后 list 的⻓度rpush
RPUSH key element [element ...]//将⼀个或者多个元素从右侧放⼊尾插到 list 中
//时间复杂度只插⼊⼀个元素为 O(1), 插⼊多个元素为 O(N), N 为插⼊元素个数
//返回值插⼊后 list 的⻓度rpush
RPUSHX key element [element ...]//在 key 存在时将⼀个或者多个元素从右侧放⼊尾插到 list 中
//时间复杂度只插⼊⼀个元素为 O(1), 插⼊多个元素为 O(N), N 为插⼊元素个数
//返回值插⼊后 list 的⻓度lrange LRANGE key start stop//获取从 start 到 end 区间的所有元素左闭右闭下标支持负数
//时间复杂度O(N)
//返回值指定区间的元素如果给定区间非法比如超出下标Redis中会尽可能的获取区间的内容lpop
LPOP key [count](redis 6.2版本及其以上支持这个count一次pop多个)//从 list 左侧取出元素即头删
//时间复杂度O(1)
//返回值取出的元素或者 nilrpop
RPOP key [count](redis 6.2版本及其以上支持这个count一次pop多个)//从 list 右侧取出元素即尾删
//时间复杂度O(1)
//返回值取出的元素或者 nillindex
LINDEX key index//获取从左数第 index 位置的元素
//时间复杂度O(N)
//返回值取出的元素或者 nillinsert
LINSERT key BEFORE | AFTER pivot element//在特定位置插⼊元素 before和after选一个在privot之前插入或者之后插入这个pivot是元素的值不是下标
//时间复杂度O(N)
//返回值插⼊后的 list ⻓度llen
LLEN key//获取 list ⻓度
//时间复杂度O(1)
//返回值list 的⻓度lrem
LREM key count element//指定一个元素精准删除//count为要删除的个数element为要删除的值
//count0,从左往右删除element两次
//count0,从右往左删除element两次
//count0,删除所有的elementltrim key start stop
LTRIM key start stop//保留start和stop之间的元素区间外两边的元素就直接被删除了
//时间复杂度Onlset
LSET key index element//根据下标修改元素
//时间复杂度On阻塞版本命令
blpop 和 brpop 是 lpop 和 rpop 的阻塞版本和对应非阻塞版本的作用基本⼀致除了
在列表中有元素的情况下阻塞和非阻塞表现是⼀致的。但如果列表中没有元素非阻塞版本会理解返回 nil但阻塞版本会根据 timeout阻塞⼀段时间期间 Redis 可以执行其他命令但要求执行该命令的客户端会表现为阻塞状态命令中如果设置了多个键那么会从左向右进⾏遍历键⼀旦有⼀个键对应的列表中可以弹出元素命令立即返回如果多个客⼾端同时多⼀个键执⾏ pop则最先执⾏命令的客⼾端会得到弹出的元素
redis中的list也相当于阻塞队列一样线程安全是通过单线程模型支持的阻塞。则只支持队列为空的情况不考虑队列满
blpop和brpop都是可以同时去尝试多个key的列表的元素的多个key对应多个list这多个list哪个有元素了就会返哪个元素
blpop
BLPOP key [key ...] timeout//LPOP 的阻塞版本
//时间复杂度O(1)
//返回值取出的元素或者 nilbrpop
BRPOP key [key ...] timeout//RPOP 的阻塞版本
//时间复杂度O(1)
//返回值取出的元素或者 nillist的编码方式
列表类型的内部编码有两种
ziplist压缩列表当列表的元素个数小于 list-max-ziplist-entries 配置默认 512 个同时列表中每个元素的长度都小于 list-max-ziplist-value 配置默认 64 字节时Redis 会选用 ziplist 来作为列表的内部编码实现来减少内存消耗。。linkedlist链表当列表类型无法满足 ziplist 的条件时Redis 会使⽤ linkedlist 作为列表的内 部实现。
list的应用
消息队列
**微博 Timeline