⛄介绍
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
❄️❄️添加缓存
//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放入缓存
ArrayList<String> list = new ArrayList<>(); // left redisTemplate.boundListOps("listKey").leftPushAll(list); // right redisTemplate.boundListOps("listKey").rightPushAll(list);
❄️❄️设置过期时间(单独设置)
redisTemplate.boundValueOps("listKey").expire(1,TimeUnit.MINUTES); redisTemplate.expire("listKey",1,TimeUnit.MINUTES);
❄️❄️获取List缓存全部内容(起始索引,结束索引)
List listKey1 = redisTemplate.boundListOps("listKey").range(0, 10);
❄️❄️从左或从右弹出一个元素
//从左侧弹出一个元素 String listKey2 = (String) redisTemplate.boundListOps("listKey").leftPop(); //从右侧弹出一个元素 String listKey3 = (String) redisTemplate.boundListOps("listKey").rightPop();
❄️❄️根据索引查询元素
String listKey4 = (String) redisTemplate.boundListOps("listKey").index(1);
❄️❄️获取List缓存的长度
Long size = redisTemplate.boundListOps("listKey").size();
❄️❄️根据索引修改List中的某条数据(key,索引,值)
redisTemplate.boundListOps("listKey").set(3L,"listLeftValue3");
❄️❄️移除N个值为value(key,移除个数,值)
redisTemplate.boundListOps("listKey").remove(3L,"value");
⛄使用场景
- 消息队列(Message Queue): List 可以用作简单的消息队列,生产者可以将消息 push 到列表的一端,而消费者可以从列表的另一端 pop 出消息进行处理。
- 任务队列(Task Queue): List 可以用作任务队列,生产者可以向列表中 push 任务,而消费者可以从列表中 pop 出任务进行处理。
- 发布与订阅(Pub/Sub)的实现: 你可以将订阅者的信息保存在列表中,发布者发布消息时,将消息推送到列表中,订阅者可以从列表中获取最新的消息。
- 实时数据更新: List 可以用来存储一些需要实时更新的数据,比如用户的行为记录、实时日志等。