文章目录

  • 命令
  • RedisTemplate API
  • 使用场景



RedisList 是一种有序、可重复、可变动的数据结构,它基于双向链表实现。在Redis中,List可以存储多个相同或不同类型的元素,每个元素在List中都有一个对应的索引位置。这使得List可以用来实现队列、栈等数据结构。



命令

以下是一些常用的Redis List相关命令:

LPUSH key value1 [value2 …]:将一个或多个值从左边推入List中。
RPUSH key value1 [value2 …]:将一个或多个值从右边推入List中。
LPOP key:从List的左端弹出一个值,并返回该值。
RPOP key:从List的右端弹出一个值,并返回该值。
LRANGE key start stop:返回List中指定范围内的元素。
LLEN key:返回List的长度。
LINDEX key index:返回List中指定索引位置的元素。
LINSERT key BEFORE|AFTER pivot value:在List中特定元素前面或后面插入一个新元素。
LSET key index value:设置List中指定索引位置的值。
LREM key count value:从List中删除指定个数的指定值。



RedisTemplate API

1)、添加缓存(2/3是1的递进值)
//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");

2)、将List放入缓存

ArrayList<String> list = new ArrayList<>();
redisTemplate.boundListOps("listKey").rightPushAll(list);
redisTemplate.boundListOps("listKey").leftPushAll(list);

3)、设置过期时间(单独设置)

redisTemplate.boundValueOps("listKey").expire(1,TimeUnit.MINUTES);
redisTemplate.expire("listKey",1,TimeUnit.MINUTES);

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

List listKey1 = redisTemplate.boundListOps("listKey").range(0, 10);

5)、从左或从右弹出一个元素

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

6)、根据索引查询元素

String listKey4 = (String) redisTemplate.boundListOps("listKey").index(1);

7)、获取List缓存的长度

Long size = redisTemplate.boundListOps("listKey").size();

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

redisTemplate.boundListOps("listKey").set(3L,"listLeftValue3");

9)、移除N个值为value(key,移除个数,值)

redisTemplate.boundListOps("listKey").remove(3L,"value");



使用场景

Redis中的List类型在实际应用中有许多场景,以下是一些常见的应用场景:

  • 消息队列(Message Queue):List可以用作简单的消息队列,生产者通过LPUSH将消息推入队列,消费者通过RPOP或BLPOP等命令从队列中弹出消息,实现简单的消息传递。
  • 实时消息处理:List可以用于实现实时消息处理系统,生产者不断向List中推入消息,消费者通过不断地读取List中的消息进行处理。
  • 数据流处理:List可以用于处理数据流,例如日志处理系统中,日志消息可以按时间顺序推入List,然后通过消费者逐条处理。
  • 任务队列(Task Queue):List可以用作任务队列,生产者向List中推入任务,消费者按顺序处理任务,实现任务的异步处理。
  • 实时排行榜:List可以用于实时排行榜的实现,将用户的分数作为值存储在List中,通过对List进行排序或截取操作可以得到排行榜数据。
  • 事件驱动编程:List可以用于事件驱动编程模型,通过LPUSH向List中推入事件,然后由消费者异步处理事件,实现解耦和高可扩展性。

Redis的List类型在实际应用中可以提供高性能的数据存储和处理功能,特别适合处理实时性要求高、读写频繁的场景。通过合理地运用List相关命令,可以实现各种复杂的数据处理需求。