欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > Spring Boot(二十二):RedisTemplate的List类型操作

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

2025/4/19 15:55:49 来源:https://blog.csdn.net/tunan666/article/details/147189844  浏览:    关键词: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时注意范围,避免全表扫描

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词