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 可以用来存储一些需要实时更新的数据,比如用户的行为记录、实时日志等。

相关推荐
久绊A1 小时前
Python 基本语法的详细解释
开发语言·windows·python
夏末秋也凉8 小时前
力扣-回溯-46 全排列
数据结构·算法·leetcode
王老师青少年编程8 小时前
【GESP C++八级考试考点详细解读】
数据结构·c++·算法·gesp·csp·信奥赛
liuyuzhongcc11 小时前
List 接口中的 sort 和 forEach 方法
java·数据结构·python·list
菜鸟单飞11 小时前
介绍一款非常实用的PDF阅读软件!
windows·pdf·电脑
计算机小白一个12 小时前
蓝桥杯 Java B 组之背包问题、最长递增子序列(LIS)
java·数据结构·蓝桥杯
卑微的小鬼13 小时前
数据库使用B+树的原因
数据结构·b树
cookies_s_s13 小时前
Linux--进程(进程虚拟地址空间、页表、进程控制、实现简易shell)
linux·运维·服务器·数据结构·c++·算法·哈希算法
醉城夜风~14 小时前
[数据结构]双链表详解
数据结构
gyeolhada15 小时前
2025蓝桥杯JAVA编程题练习Day5
java·数据结构·算法·蓝桥杯