Spring Boot(二十二):RedisTemplate的List类型操作

RedisTemplate和StringRedisTemplate的系列文章详见:

Spring Boot(十七):集成和使用Redis

Spring Boot(十八):RedisTemplate和StringRedisTemplate

Spring Boot(十九):StringRedisTemplate的常用方法和注意事项

Spring Boot(二十):RedisTemplate的序列化

Spring Boot(二十一):RedisTemplate的String和Hash类型操作

RedisTemplate支持Redis提供的所有数据类型(包括String、Hash、List、Set和ZSet等),并提供灵活的配置选项和事务支持,方便开发者与Redis交互。

Redis中​的List类型是一个双向链表结构,​支持在头部或尾部进行元素的插入和删除操作,常用于实现队列、栈等场景。RedisTemplate对Redis中的List类型提供了多种操作方法,​通过opsForList(),​可以进行List的增删查操作。

一、基本操作

1、添加元素

1)将元素添加到列表的头部

Long leftPush(K var1, V var2);

返回值:操作后的列表长度

2)将元素添加到列表的尾部

Long rightPush(K var1, V var2);

返回值:操作后的列表长度

3)将多个元素批量添加到列表的头部

Long leftPushAll(K var1, V... var2);

返回值:操作后的列表长度

4)将多个元素批量添加到列表的尾部

Long rightPushAll(K var1, V... var2);

返回值:操作后的列表长度

示例:

复制代码
// 将元素添加到列表的头部
Long listLength = redisTemplate.opsForList().leftPush("news:user:1001", "news1");
log.info("leftPush listLength: {}", listLength);
// 将元素添加到列表的尾部
listLength = redisTemplate.opsForList().rightPush("news:user:1001", "news2");
log.info("rightPush listLength: {}", listLength);
// 将多个元素批量添加到列表的头部
listLength = redisTemplate.opsForList().leftPushAll("news:user:1001", "news3", "news4", "news5");
log.info("leftPushAll listLength: {}", listLength);
// 将多个元素批量添加到列表的尾部
listLength = redisTemplate.opsForList().rightPushAll("news:user:1001", "news6", "news7", "news8");
log.info("rightPushAll listLength: {}", listLength);

2、获取元素

1)根据索引获取列表中的元素

V index(K var1, long var2);

参数K var1:键值

参数long var2:索引(包含),为0时从头部第一个元素开始,可以为负数,-1表示最后一个元素

返回值V:指定索引的元素值

2)获取列表中指定范围的元素

List<String> range(K key, long start, long end);

参数:

key:键

start:起始索引(包含),为0时从头部第一个元素开始,可以为负数,-1表示最后一个元素

end:结束索引(包含),如果结束索引大于list的长度,则取从起始索引往后的所有数据

示例:

复制代码
// 根据索引获取列表中的元素
String value1 = redisTemplate.opsForList().index("news:user:1001", 0).toString();
log.info("index 0: {}", value1);
String valueInverse1 = redisTemplate.opsForList().index("news:user:1001", -1).toString();
log.info("index -1: {}", valueInverse1);
// 获取列表中指定范围的元素
List<String> values = redisTemplate.opsForList().range("news:user:1001", 0, 2);
log.info("values 0 2 : {}", values.toString());
values = redisTemplate.opsForList().range("news:user:1001", 0, 9);
log.info("values 0 9 : {}", values.toString());
values = redisTemplate.opsForList().range("news:user:1001", 0, -1);
log.info("values 0 -1 : {}", values.toString());
values = redisTemplate.opsForList().range("news:user:1001", 0, -3);
log.info("values 0 -3 : {}", values.toString());
values = redisTemplate.opsForList().range("news:user:1001", -3, -1);
log.info("values -3 -1 : {}", values.toString());

3、删除元素

1)从列表中删除指定值的元素

Long remove(K key, long count, Object value);

count > 0:从头部开始删除前count个匹配元素

count < 0:从尾部开始删除后count个匹配元素

count = 0:删除所有匹配元素

value:要删除的值

返回值:被删除的元素数量

2)从列表头部弹出一个元素

V leftPop(K key);

返回值:弹出的元素值

3)从列表尾部弹出一个元素

V rightPop(K key);

返回值:弹出的元素值

4、列表修剪

void trim(K key, long start, long end);

保留指定索引范围内的元素,其余删除

5、获取列表长度

Long size(K key);

返回值:列表的长度

6、设置列表中指定索引位置的元素值

void set(K key, long index, V value);

index:元素的索引

value:要设置的值

二、适用场景

1、消息队列

List类型可以用来实现简单的消息队列,生产者将消息放入队列,消费者从队列中取出消息进行处理

场景:异步任务处理、订单排队等需要先进先出的场景

2、栈

撤销操作、浏览历史记录等后进先出的场景

3、缓存最近访问的记录

可以使用List类型来缓存最近访问的记录,例如用户最近浏览的商品

4、任务调度

List类型可以用来实现任务调度,将任务放入队列中,然后由工作线程依次处理

5、分页查询

需要分页查询的数据也可以放到List中,如商品列表、评论

三、注意事项

1、索引范围

Redis的List的索引从0开始,-1表示最后一个元素,-2表示倒数第二个,以此类推

2、性能考虑

频繁的插入/删除操作在长列表中部时性能较低(链表结构特性)

使用trim和range时注意范围,避免全表扫描

相关推荐
神奇小梵17 分钟前
安全和开发的需要了解的知识————下载内容的安全,和下载内容如何运行
android·windows·安全·个人开发
zhangfeng11331 小时前
Windows AMD显卡跑PyTorch
人工智能·pytorch·windows
楷哥爱开发1 小时前
如何在 Windows、macOS 和 Linux 上安装 scikit-learn (sklearn)
linux·windows·macos
2603_965148111 小时前
eBay商品数据API:寻找海外仓与价格洼地
大数据·人工智能·windows·python·microsoft
江畔柳前堤11 小时前
HBM:大语言模型时代的「算力血液」——从内存墙到带宽革命的深度拆解
服务器·人工智能·windows·目标检测·语言模型·自然语言处理·软件工程
天天进步201515 小时前
UI-TARS 源码解析 #22:二次开发实战:用 UI-TARS 做一个简单的 Windows 自动操作 Agent
windows·ui
啊哈一半醒16 小时前
Windows 虚拟机搭建 CentOS 全过程(2026 最新版 + 踩坑解决)
linux·windows·centos
new_zhou16 小时前
C++ 项目 AI 协作指南(Windows / MSVC 环境)
c++·人工智能·windows
蔬菜_16 小时前
前端转全栈-day5(数组、list、set)
java·前端·数据结构·list
Flittly19 小时前
【雕虫大技】Agent 动态 Skill 供应链安全加固(二):执行隔离沙箱实战
java·spring boot·spring