👉大家好,我是:知识的搬运工旺仔
👉认真分享技术,记录学习过程的点滴,如果我的分享能为你带来帮助,请支持我奥🍻
👉你的支持,是我每天更新的动力。
👉赞点:👍 留言:✍ 收藏:⭐
👉个人格言:想法一步一步的落实,才是你我前进最佳选择。
1. List 数据类型的简单介绍
- 可以简单的看作字符串列表
- 列表按照插入的顺序排序
- 可以将元素插入到列表的头部和尾部
- 列表可以模拟栈数据类型,也可以模拟队列数据类型
- 一个队列最大储存量是2^32-1个元素
2. 向 List 中插入值
LPUSH key value [value…]
:::success LPUSH 命令:将多个值插入列表头部
- 插入多个值,list 将按照从左到右的顺序依次插入
- key 不存在,先创建一个空列表,然后再执行LPUSH 命令
- key 存在,但不是列表类型,将会报错 :::
RPUSH key valus [value…]
:::success RPUSH 命令:将多个值插入列表尾部
- 插入多个值,list 将按照从右到左的顺序依次插入
- key 不存在,先创建一个空列表,然后再执行RPUSH 命令
- key 存在,但不是列表类型,将会报错 :::
LINSERT key before | after pivot value
:::success LINSERT 命令:插入一个值到列表中
- 插入一个在 pivot 值 之前或之后的值
- 当 pivot 这个值不存在时,执行该命令无效
- key 不存在,看作空列表,执行该命令无效
- key 存在,但不是列表类型,将会报错 :::
LPUSHX key value
:::success LPUSHX 命令:将值插入列表头部
- key 必须存在,并且是列表
- key不存在,它什么都不做,不会创建新的列表 :::
RPUSHX key value
:::success RPUSHX 命令:将值插入列表尾部
- key 必须存在,并且是列表
- key不存在,它什么都不做,不会创建新的列表 :::
LSET key index value
:::success LSET 命令:修改列元素值
- 设置下标为index 的列表key 的值为value
- index 超出范围,会报错
- key 用空,也会报错 :::
3. 获取列元素
LLEN key
:::success LLEN 命令:统计列表长度
- 简单说,就是统计key的长度
- key 不存在,视为空列表,返回0
- key 不是列表类型,返回错误 :::
LINDEX key index
:::success LINDEX 命令:获取列表元素值
- 获取key中下标为index 的元素值
- index 从 0 开始
- index 是 -1 表示:从列表中最后一个元素的下标
- key 不存在,返回一个错误 :::
LRANGE key start end
:::success LRANGE 命令:获取列表指定区间内的元素
- 区间从start 开始 ,从 end 结束
- 0 表示第一个元素,-1表示最后一个元素
- start 和 end 的值超出下标,不会引起错误
- start 大于 end ,返回一个空列表
- end > 列表长度,Reids 将end作为列表最新的最大长度 :::
4. 删除列表元素
LPOP key
:::success LPOP 命令:返回并删除列表的头元素
- key 存在,从左边开始返回,这里默认左边是头,右边是尾部
- key 不存在,返回nil :::
RPOP key
:::success RPOP 命令:返回并删除列表的尾元素
- key 存在,从右边开始返回,这里默认左边是头,右边是尾部
- key 不存在,返回nil :::
BLPOP key [key…] timeout
:::success BLPOP 命令:在指定时间内删除列表的头元素
- 它是列表阻塞式弹出原语,是LPOP 的阻塞版本
- key 中没有任何元素时, 执行 BLPOP 命令,会在 timeout 内进行等待,在 timeout 时间内,key中插入值,这个值将会弹出
- 多个key ,会按照key 出现的顺序 依次检查各个列表,弹出第一个非空列表的头元素
- timeout = 0 时,这个阻塞时间可以无线延长 :::
BLRPOP key [key…] timeout
:::success BLPOP 命令:在指定时间内删除列表的尾元素
- 它是列表阻塞式弹出原语,是RPOP 的阻塞版本
- key 中没有任何元素时, 执行 BRPOP 命令,会在 timeout 内进行等待,在 timeout 时间内,key中插入值,这个值将会弹出
- 多个key ,会按照key 出现的顺序 依次检查各个列表,弹出第一个非空列表的头元素
- timeout 为 0 时,这个阻塞时间可以无线延长
- timeout 的单位是秒 :::
LREM key count value
:::success LREM 命令:删除指定个数的元素
- 删除列表key 中与指定参数valus 相等 且个数为count 数量的值
- count = 0 ,删除列表中所有 与 value 相等的元素
- count >0 ,列表尾部,(就是右边)开始 删除count 数量的 value 的值
- count <0 ,列表头部,(就是左边)开始 删除count 数量的 value 的值 :::
LTRIM key start stop
:::success LTRIM 命令:在指定区间内修剪列表
- 去除不必要的空格
- 让列表值保留指定区间内的元素,在这区间内的元素,将会删除
- start 和 stop 的默认值都是 0
- key 不是 列表数据类型,返回一个错误
- start 和 stop 超出下标,不会引起错误
- start > end ,将会清空列表,返回一个空列表
- stop > 列表长度,Reids 将stop 作为列表最新的最大长度 :::
5. 移动列表
RPOPLPUSH source destination
:::success RPOPLPUSH 命令:将列表元素移动到另一个列表中
- 会在一个原子时间内,将列表source 中的队尾的第一个元素弹出,并插入到另一个列表对头的第一个元素
- source 不存在,返回nil ,后边的操作将不在执行
- scource 和 destination 指的是 key 的名称
- scource 和 destination 相同,列表的尾元素将移动到列表头 :::
BRPOPLPUSH source destination timeout
:::success BRPOPLPUSH 命令:在指定时间内移动列表元素到另一个列表
- BRPOPLPUSH 命令是 RPOPLUSH 命令的阻塞版本
- source 不存在,BRPOPLPUSH 命令将阻塞等待 timeout 时间
- 在 timeout 时间范围内,scource 里边从没有元素到有元素之后,就会该移动命令
- timeout 的单位是秒
- timeout = 0 时,这个阻塞时间可以无线延长 :::
6. 列表模式
6.1 安全队列
-
List 数据结构,经常被看作一个队列,用户不同程序之间有序交换信息
-
一个客户端通过LPUSH 将消息放入队列,另一个客户端用RPOP 或者 BRPOP 获取信息
-
该队列不安全,当接收消息的客户端接收消息到一半,客户端出现崩溃,消息将会丢失
-
使用RPOPLPUSH 能解决 未处理完的消息丢失的问题
- RPOPLPUSH 命令在返回一个消息的同时,会把这条消息保存在另一个队列中
- 这样就保证了,消息不会因为,接口方突然出现奔溃而导致消息丢失
- 处理完消息后,我们可以使用LREM 删除,备份的消息
-
添加一个客户端监视列表,这个客户端,会自动将超过一定处理时间的消息备份到这个列表中,保证消息不会丢失
6. 2 循环列表
- 使用RPOPLPUSH 命令可以实现循环列表
- 使 source 和 diestination 的 key 是相同的,就可以实现一个循环列表
- 多个客户端,可以对同一个循环列表进行旋转操作,来获取不同的元素
- 有客户端在队尾添加元素时,循环列表也能正常工作
- 我们借助Redis 实现服务器监控系统,实现在短时间内连接不断地处理一些消息
- 循环列表模式是安全的,它易于拓展,遇到客户端奔溃,消息也不会丢失
🎈看完了不妨给我点个赞吧,👉你的支持,是我每天更新的动力…