RedisTemplateAPI:List

文章目录

⛄介绍

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

特征也与LinkedList类似:

  • 有序
  • 元素可以重复
  • 插入和删除快
  • 查询速度一般

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

⛄List的常见命令有

  • LPUSH key element ... :向列表左侧插入一个或多个元素
  • LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil
  • RPUSH key element ... :向列表右侧插入一个或多个元素
  • RPOP key:移除并返回列表右侧的第一个元素
  • LRANGE key star end:返回一段角标范围内的所有元素
  • BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

⛄RedisTemplate API

❄️❄️添加缓存

java 复制代码
//1、通过redisTemplate设置值
redisTemplate.boundListOps("listKey").leftPush("listLeftValue1");
redisTemplate.boundListOps("listKey").rightPush("listRightValue2");

//2、通过BoundValueOperations设置值
BoundListOperations listKey = redisTemplate.boundListOps("listKey");
listKey.leftPush("listLeftValue3");
listKey.rightPush("listRightValue4");

//3、通过ValueOperations设置值
ListOperations opsList = redisTemplate.opsForList();
opsList.leftPush("listKey", "listLeftValue5");
opsList.rightPush("listKey", "listRightValue6");

❄️❄️将List放入缓存

java 复制代码
ArrayList<String> list = new ArrayList<>();
//	left
redisTemplate.boundListOps("listKey").leftPushAll(list);
//	right
redisTemplate.boundListOps("listKey").rightPushAll(list);

❄️❄️设置过期时间(单独设置)

java 复制代码
redisTemplate.boundValueOps("listKey").expire(1,TimeUnit.MINUTES);
redisTemplate.expire("listKey",1,TimeUnit.MINUTES);

❄️❄️获取List缓存全部内容(起始索引,结束索引)

java 复制代码
List listKey1 = redisTemplate.boundListOps("listKey").range(0, 10); 

❄️❄️从左或从右弹出一个元素

java 复制代码
//从左侧弹出一个元素
String listKey2 = (String) redisTemplate.boundListOps("listKey").leftPop();  
//从右侧弹出一个元素
String listKey3 = (String) redisTemplate.boundListOps("listKey").rightPop(); 

❄️❄️根据索引查询元素

java 复制代码
String listKey4 = (String) redisTemplate.boundListOps("listKey").index(1);

❄️❄️获取List缓存的长度

java 复制代码
Long size = redisTemplate.boundListOps("listKey").size();

❄️❄️根据索引修改List中的某条数据(key,索引,值)

java 复制代码
redisTemplate.boundListOps("listKey").set(3L,"listLeftValue3");

❄️❄️移除N个值为value(key,移除个数,值)

java 复制代码
redisTemplate.boundListOps("listKey").remove(3L,"value");

使用场景

  • 消息队列(Message Queue): List 可以用作简单的消息队列,生产者可以将消息 push 到列表的一端,而消费者可以从列表的另一端 pop 出消息进行处理。

  • 任务队列(Task Queue): List 可以用作任务队列,生产者可以向列表中 push 任务,而消费者可以从列表中 pop 出任务进行处理。

  • 发布与订阅(Pub/Sub)的实现: 你可以将订阅者的信息保存在列表中,发布者发布消息时,将消息推送到列表中,订阅者可以从列表中获取最新的消息。

  • 实时数据更新: List 可以用来存储一些需要实时更新的数据,比如用户的行为记录、实时日志等。

相关推荐
LuminousCPP10 小时前
数据结构-双向循环链表
c语言·数据结构·笔记·链表
白狐_79811 小时前
408数据结构第5章:树与二叉树②——遍历、线索树、森林与哈夫曼
数据结构·算法·深度优先
Jasmine_llq13 小时前
《P15800 [GESP202603 六级] 选数》
数据结构·long long·逆序线性 dp·从后往前推导·转移严格遵循题意·防止总和溢出·复杂度on
疯狂打码的少年13 小时前
【数据结构】串(字符串):基本概念与存储
数据结构·笔记
for_ever_love__13 小时前
python基础语法学习: 数据容器
windows·python·学习
纵有疾風起14 小时前
线性表的定义与基本操作 — 从逻辑结构到 ADT 接口
数据结构·算法·408·线性表·adt
huainingning15 小时前
微软windows系统官网IPV6临时地址介绍
windows·microsoft·智能路由器
wuyk55515 小时前
1.栈:后进先出的线性数据结构
c语言·数据结构·stm32·单片机
LuminousCPP16 小时前
数据结构-时间与复杂度|时间/空间复杂度 + 两道力扣练习 + 二分查找复盘
c语言·数据结构·经验分享·算法·leetcode
Nil20816 小时前
leetcode 三数之和
数据结构·算法·leetcode