当前位置: 首页 > news >正文

07 Redis List类型操作与使用场景

Redis List类型操作与使用场景

一、List类型操作

​ Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。特征也与LinkedList类似:

​ 有序

​ 元素可以重复

​ 插入和删除快

​ 查询速度一般

​ 常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。

​ List的常见命令有:

​ LPUSH key element … :向列表左侧插入一个或多个元素

# 插入多个元素
127.0.0.1:6379> lpush user:hobby read run
2

​ LRANGE key star end:返回一段角标范围内的所有元素

# 返回一段角标范围内的所有元素
127.0.0.1:6379> lrange user:hobby 0 1
run
read

​ LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil

# 移除左侧的第一个元素
127.0.0.1:6379> lpop user:hobby 
run

​ RPUSH key element … :向列表右侧插入一个或多个元素

# 插入多个元素
127.0.0.1:6379> rpush user:hobby study ball
3# 查询
127.0.0.1:6379> lrange user:hobby 0 2
read
study
ball

​ RPOP key:移除并返回列表右侧的第一个元素

# 移除并返回列表右侧的第一个元素
127.0.0.1:6379> rpop user:hobby
ball

​ BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

# 设置元素过期
127.0.0.1:6379> blpop user:hobby 20
user:hobby
read# 查询是否过期
127.0.0.1:6379> ttl read
-2

​ LINSET:在指定元素的前边或后边添加一个元素

# 在study之前添加run
127.0.0.1:6379> linsert user:hobby before study run
2# 在study后,创建game
127.0.0.1:6379> linsert user:hobby after study game
3# 查询是否添加成功
127.0.0.1:6379> lrange user:hobby 0 2
run
study
game

​ LTRIM:截取指定下标内的元素,其他元素删除

# 截取指定下标内的元素,其他元素删除
127.0.0.1:6379> ltrim user:hobby 1 2
OK# 查询
127.0.0.1:6379> lrange user:hobby 0 2
study
game

二、使用场景

​ List类型是Redis提供的一个非常有用的数据结构,使用场景广泛,以下是一些常见的使用场景:

消息队列:

​ Redis的List类型可以实现简单的消息队列,例如,可以使用LPUSH命令将消息推入队列,使用RPOP或者BLPOP命令从队列中获取消息。这种方式可以用于处理异步任务,比如发送邮件、生成报表等。

排行榜:

​ List类型可以实现各种排行榜功能,例如,可以使用LPUSH命令将用户的分数推入列表,然后使用LRANGE命令获取列表的前N个元素,即得到排行榜的前N名。这种方式可以用于实现各种实时排行榜,比如在线游戏的积分榜、电商网站的销售榜等。

日志记录:

​ Redis的List类型可以用于实现简单的日志记录功能。例如,可以使用LPUSH命令将日志信息推入列表,然后使用LTRIM命令保留最近的N条日志。这种方式可以用于监控系统运行状况,及时发现和处理问题。

实时信息流:

​ 例如微博或新闻应用,有人发布新的微博或新闻时,后端服务器需要先将这些新的微博或新闻加入Redis的List中,这样用户端才会实时地看到这些更新。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Vulnhub靶场AI-WEB-1.0打靶教程】
  • MySQL——日期与时间类型
  • 1000W长连接,如何建立和维护?千万用户IM 架构设计
  • PHP苹果 V X iPhone微商i o s多分开V X语音转发密友朋友圈一键跟圈软件
  • C#中读写INI配置文件
  • 前端入门知识分享:HTML 页面中 head 标签之间的代码详解
  • Laravel API资源收集器:打造高效数据响应的秘诀
  • springboot智能健康管理平台-计算机毕业设计源码57256
  • 【系统架构设计师】二十二、嵌入式系统架构设计理论与实践③
  • 【Docker系列】Docker 中-d 和-it 的区别
  • 【Redis 进阶】事务
  • 51单片机和STM32区别
  • vite+typescript项目 报错:找不到模块“./*.vue”或其相应的类型声明——解决方案
  • 仓颉语言 -- 网络编程
  • 编程入门:大学新生的指南与策略
  • 0x05 Python数据分析,Anaconda八斩刀
  • css的样式优先级
  • golang中接口赋值与方法集
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • SpingCloudBus整合RabbitMQ
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • vuex 学习笔记 01
  • 多线程事务回滚
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 前端面试之闭包
  • 使用 Docker 部署 Spring Boot项目
  • 使用 QuickBI 搭建酷炫可视化分析
  • 数据科学 第 3 章 11 字符串处理
  • 我是如何设计 Upload 上传组件的
  • 白色的风信子
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​secrets --- 生成管理密码的安全随机数​
  • #ifdef 的技巧用法
  • (9)目标检测_SSD的原理
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (三)docker:Dockerfile构建容器运行jar包
  • (转)memcache、redis缓存
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .bat批处理(一):@echo off
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .net core 的缓存方案
  • .net流程开发平台的一些难点(1)
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • @Transaction注解失效的几种场景(附有示例代码)
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • [240621] Anthropic 发布了 Claude 3.5 Sonnet AI 助手 | Socket.IO 拒绝服务漏洞
  • [Angular] 笔记 20:NgContent
  • [BSGS算法]纯水斐波那契数列
  • [BZOJ 1040] 骑士
  • [C#]winform基于opencvsharp结合Diffusion-Low-Light算法实现低光图像增强黑暗图片变亮变清晰
  • [C#]使用深度学习算法opencvsharp部署RecRecNet广角图像畸变矫正校正摄像广角镜头畸变图像