文章目录
- 命令
- RedisTemplate API
- 使用场景
Redis
的 List
是一种有序、可重复、可变动的数据结构,它基于双向链表实现。在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相关命令,可以实现各种复杂的数据处理需求。