文章目录
- 0. 前言
- 1.Ression分布式集合
- 1.1 分布式列表
- 1.1.1 使用场景和实现原理:
- 1.1.2 基本概念和使用方法:
- 1.2 分布式集合
- 1.2.1 使用场景和实现原理:
- 1.2.2 基本概念和使用方法:
- 1.3 分布式映射
- 1.3.1 使用场景和实现原理:
- 1.3.2 基本概念和使用方法:
- 1.4 分布式有序集合
- 1.4.1 使用场景和实现原理:
- 1.4.2 基本概念和使用方法:
- 1.5 分布式队列
- 1.5.1 使用场景和实现原理:
- 1.5.2 基本概念和使用方法:
- 1.6 分布式双端队列
- 1.6.1 使用场景和实现原理:
- 1.6.2 基本概念和使用方法:
- 1.7 分布式阻塞队列
- 1.7.1 使用场景和实现原理:
- 1.7.2 基本概念和使用方法:
- 2. 完整代码示例
- 3. 参考资料
- 4. 源码地址
- 5. Redis从入门到精通系列文章
0. 前言
前两章我们了解了《【实践篇】Redis最强Java客户端(一)之Redisson入门介绍》和《【实践篇】Redis最强Java客户端(二)之Redisson基础概念》
本章第四章主要介绍Ression分布式集合使用指南。
上一章《Redisson 7种分布式锁使用指南》回顾。
本章我们介绍了在Redisson中实现的各种分布式集合,这些集合适应于各种不同类型的使用场景。每个分布式集合的实现原理都基于对应的Redis数据结构。 每种集合的简要总结:
-
分布式列表:基于Redis的List数据结构,操作简单且原子性强,主要用于日志记录、收藏列表等。
-
分布式集合:基于Redis的Set数据结构,能够高效地完成添加、删除和查找等操作,适合用于标签系统、好友关系等。
-
分布式映射:基于Redis的Hash数据结构,即使在处理大量键值对时,也能保持高效的读写性能,适合存储用户信息、配置信息等。
-
分布式有序集合:基于Redis的Sorted set数据结构,常用于实现需要排序的场景,例如排名系统、时间序列数据等。
-
分布式队列:基于Redis的List数据结构,满足先进先出(FIFO)规则,适合用于消息队列、任务队列等。
-
分布式双端队列:同样基于Redis的List数据结构,两端都可以进行入队和出队操作,更具灵活性,适用于实现LRU缓存、多任务调度等。
-
分布式阻塞队列:也是基于Redis的List数据结构,可以阻塞操作,适合于实现高并发场景下的生产者-消费者模型。
1.Ression分布式集合
1.1 分布式列表
1.1.1 使用场景和实现原理:
Redisson的分布式列表基于Redis的List数据结构,操作简单、原子性强,适合用于实现日志记录、收藏列表等场景。
1.1.2 基本概念和使用方法:
分布式列表是一种有序集合,用户可在列表的任意位置插入或删除元素。以下是在Redisson中创建和操作分布式列表的示例:
RList<String> list = redisson.getList("myList");
list.add("1");
list.add("2");
list.add("3");
1.2 分布式集合
1.2.1 使用场景和实现原理:
Redisson的分布式集合基于Redis的Set数据结构,能高效地完成添加、删除和查找等操作,适合实现标签系统、好友关系等功能。
1.2.2 基本概念和使用方法:
分布式集合是一种无序集合,所有存入其中的元素都是唯一的。以下是在Redisson中创建和操作分布式集合的示例:
RSet<String> set = redisson.getSet("mySet");
set.add("A");
set.add("B");
set.add("C");
1.3 分布式映射
1.3.1 使用场景和实现原理:
Redisson的分布式映射基于Redis的Hash数据结构,即使面对大量键值对,也能保持高效的读写性能,适合存储用户信息、配置信息等数据。
1.3.2 基本概念和使用方法:
分布式映射是一种键值对的集合。以下是在Redisson中创建和操作分布式映射的示例:
RMap<String, Integer> map = redisson.getMap("myMap");
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
1.4 分布式有序集合
1.4.1 使用场景和实现原理:
分布式有序集合基于Redis的Sorted set数据结构,可以用于实现排名系统、时间序列数据等需要排序的场景。
1.4.2 基本概念和使用方法:
分布式有序集合是一种有序的集合。以下是在Redisson中创建和操作分布式有序集合的示例:
RSortedSet<Integer> sortedSet = redisson.getSortedSet("mySortedSet");
sortedSet.add(3);
sortedSet.add(1);
sortedSet.add(2);
1.5 分布式队列
1.5.1 使用场景和实现原理:
Redisson的分布式队列实现基于Redis的List数据结构,操作简单,适合用于消息队列、任务队列等需要严格按照加入顺序进行处理的场景。
1.5.2 基本概念和使用方法:
分布式队列是一种遵循先进先出(FIFO)原则的数据结构。以下是在Redisson中创建和操作分布式队列的示例:
RQueue<String> queue = redisson.getQueue("myQueue");
queue.add("A");
queue.add("B");
queue.add("C");
1.6 分布式双端队列
1.6.1 使用场景和实现原理:
Redisson的分布式双端队列基于Redis的List数据结构,与分布式队列相比更加灵活,适合实现LRU缓存、多任务调度等场景。
1.6.2 基本概念和使用方法:
分布式双端队列是一种两端都可以进行入队和出队操作的队列。以下是在Redisson中创建和操作分布式双端队列的示例:
RDeque<String> deque = redisson.getDeque("myDeque");
deque.addFirst("D");
deque.addLast("E");
deque.addLast("F");
1.7 分布式阻塞队列
1.7.1 使用场景和实现原理:
分布式阻塞队列基于Redis的List数据结构,支持阻塞操作,适合于实现生产者-消费者模型的高并发场景。
1.7.2 基本概念和使用方法:
分布式阻塞队列是一种支持阻塞操作的队列。以下是在Redisson中创建和操作分布式阻塞队列的示例:
RBlockingQueue<String> blockingQueue = redisson.getBlockingQueue("myBlockingQueue");
blockingQueue.put("G");
2. 完整代码示例
在Controller类中使用Redisson分布式集合
pom.xml配置相应依赖
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.16.3</version>
</dependency>
配置文件(application.yml):
# application.yml
spring:application:name: redisson-example-appredisson:config: classpath:redisson.yaml
Redisson的配置文件(redisson.yaml):
singleServerConfig:idleConnectionTimeout: 10000connectTimeout: 10000timeout: 3000retryAttempts: 3retryInterval: 1500password: nullsubscriptionsPerConnection: 5clientName: nulladdress: "redis://127.0.0.1:6379" # adjust this address to your Redis serversubscriptionConnectionMinimumIdleSize: 1subscriptionConnectionPoolSize: 50connectionMinimumIdleSize: 24connectionPoolSize: 64database: 0dnsMonitoringInterval: 5000
threads: 0
nettyThreads: 0
codec: !<org.redisson.codec.JsonJacksonCodec> {}
transportMode: "NIO"
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class RedissonExampleApplication {public static void main(String[] args) {SpringApplication.run(RedissonExampleApplication.class, args);}}
RedissonExampleController
import org.redisson.api.RList;
import org.redisson.api.RSet;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/redisson")
public class RedissonExampleController {@Autowiredprivate RedissonClient redissonClient;@PostMapping("/list")public void addToList(@RequestParam String element) {RList<String> list = redissonClient.getList("myList");list.add(element);}@GetMapping("/list")public RList<String> readFromList() {return redissonClient.getList("myList");}@PostMapping("/set")public void addToSet(@RequestParam String element) {RSet<String> set = redissonClient.getSet("mySet");set.add(element);}@GetMapping("/set")public RSet<String> readFromSet() {return redissonClient.getSet("mySet");}
}
Service
@Autowired
private RedissonClient redissonClient;public void listExample() {
RList<String> list = redissonClient.getList("myList");
list.add("1");
list.add("2");
list.add("3");
}public void setExample() {
RSet<String> set = redissonClient.getSet("mySet");
set.add("A");
set.add("B");
set.add("C");
}public void mapExample() {
RMap<String, Integer> map = redissonClient.getMap("myMap");
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
}public void sortedSetExample() {
RSortedSet<Integer> sortedSet = redissonClient.getSortedSet("mySortedSet");
sortedSet.add(3);
sortedSet.add(1);
sortedSet.add(2);
}public void queueExample() {
RQueue<String> queue = redissonClient.getQueue("myQueue");
queue.add("A");
queue.add("B");
queue.add("C");
}public void dequeExample() {
RDeque<String> deque = redissonClient.getDeque("myDeque");
deque.addFirst("D");
deque.addLast("E");
deque.addLast("F");
}public void blockingQueueExample() throws InterruptedException {
RBlockingQueue<String> blockingQueue = redissonClient.getBlockingQueue("myBlockingQueue");
blockingQueue.put("G");
}
3. 参考资料
-
Redisson官方网站:https://redisson.org/
-
Redisson GitHub仓库:https://github.com/redisson/redisson
-
redisson 参考文档 https://redisson.org/documentation.html
4. 源码地址
https://github.com/wangshuai67/icepip-springboot-action-examples
https://github.com/wangshuai67/Redis-Tutorial-2023
5. Redis从入门到精通系列文章
- 《【Redis实践篇】使用Redisson 优雅实现项目实践过程中的5种场景》
- 《Redis使用Lua脚本和Redisson来保证库存扣减中的原子性和一致性》
- 《SpringBoot Redis 使用Lettuce和Jedis配置哨兵模式》
- 《Redis【应用篇】之RedisTemplate基本操作》
- 《Redis 从入门到精通【实践篇】之SpringBoot配置Redis多数据源》
- 《Redis 从入门到精通【进阶篇】之三分钟了解Redis HyperLogLog 数据结构》
- 《Redis 从入门到精通【进阶篇】之三分钟了解Redis地理位置数据结构GeoHash》
- 《Redis 从入门到精通【进阶篇】之高可用哨兵机制(Redis Sentinel)详解》
- 《Redis 从入门到精通【进阶篇】之redis主从复制详解》
- 《Redis 从入门到精通【进阶篇】之Redis事务详解》
- 《Redis从入门到精通【进阶篇】之对象机制详解》
- 《Redis从入门到精通【进阶篇】之消息传递发布订阅模式详解》
- 《Redis从入门到精通【进阶篇】之持久化 AOF详解》
- 《Redis从入门到精通【进阶篇】之持久化RDB详解》
- 《Redis从入门到精通【高阶篇】之底层数据结构字典(Dictionary)详解》
- 《Redis从入门到精通【高阶篇】之底层数据结构快表QuickList详解》
- 《Redis从入门到精通【高阶篇】之底层数据结构简单动态字符串(SDS)详解》
- 《Redis从入门到精通【高阶篇】之底层数据结构压缩列表(ZipList)详解》
- 《Redis从入门到精通【进阶篇】之数据类型Stream详解和使用示例》
大家好,我是冰点,今天的【实践篇】Redis最强Java客户端(四)之Ression分布式集合使用指南。如果你有疑问或见解可以在评论区留言。