简介:本文全面解析Redisson API的功能、使用场景及代码示例,涵盖分布式锁、集合操作、发布订阅等核心功能,帮助开发者快速掌握Redisson的实践技巧。
Redisson是一个基于Redis的Java客户端,提供了丰富的分布式和并发数据结构,支持多种Redis操作模式(单机、主从、哨兵、集群)。其API设计简洁且功能强大,能够显著简化分布式系统的开发工作。本文将从基础到进阶,系统梳理Redisson API的核心功能与使用方法。
Redisson API的功能可划分为六大类,每类均包含多个具体方法:
putIfAbsent、remove)。add、remove等操作。add、contains等。offer、poll等阻塞操作。incrementAndGet。publish与addListener。场景:防止多节点同时执行关键代码。
RLock lock = redisson.getLock("orderLock");try {// 尝试加锁,最多等待100秒,上锁后10秒自动解锁boolean isLocked = lock.tryLock(100, 10, TimeUnit.SECONDS);if (isLocked) {// 执行业务逻辑}} catch (InterruptedException e) {Thread.currentThread().interrupt();} finally {lock.unlock();}
关键点:
tryLock参数:等待时间、锁持有时间、时间单位。finally中释放锁,避免死锁。场景:共享缓存或状态存储。
RMap<String, String> map = redisson.getMap("userCache");map.put("user:1001", "Alice");String value = map.get("user:1001");// 原子性更新map.addAndGet("counter", 1);
高级操作:
fastPut:非阻塞写入。putIfAbsent:仅当键不存在时插入。场景:实时消息通知。
RTopic topic = redisson.getTopic("orderUpdates");// 订阅消息topic.addListener(String.class, (channel, msg) -> {System.out.println("Received: " + msg);});// 发布消息topic.publish("NewOrder:12345");
优势:
场景:减少网络往返。
RBatch batch = redisson.createBatch();RMap<String, String> map = batch.getMap("batchMap");RList<String> list = batch.getList("batchList");map.putAsync("key1", "value1");list.addAsync("item1");batch.execute(); // 原子性执行所有操作
注意事项:
Config config = new Config();config.useSingleServer().setAddress("redis://127.0.0.1:6379").setConnectionPoolSize(32) // 连接池大小.setConnectionMinimumIdleSize(8); // 最小空闲连接RedissonClient redisson = Redisson.create(config);
参数建议:
config.useClusterServers().addNodeAddress("redis://node1:6379", "redis://node2:6379").setScanInterval(2000); // 集群节点扫描间隔(毫秒)
关键配置:
masterConnectionPoolSize:主节点连接池。slaveConnectionPoolSize:从节点连接池。| 序列化方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| JSON | 可读性强 | 性能较低 | 配置类数据 |
| Kryo | 高性能 | 二进制格式 | 业务对象 |
| FST | 兼容JDK | 内存占用高 | 复杂对象 |
配置示例:
config.setCodec(new JsonJacksonCodec()); // 使用JSON序列化
现象:业务未执行完,锁被自动释放。
解决方案:
leaseTime)。原因:单个命令执行失败导致整个批次回滚。
建议:
表现:频繁抛出RedisConnectionException。
排查步骤:
CLUSTER NODES)。retryAttempts和retryInterval。finally块中关闭RedissonClient。order
lock)。config.useJMX())。通过系统掌握上述API与实践技巧,开发者能够高效构建高可用的分布式应用。建议结合官方文档与源码进行深度学习,以应对复杂场景需求。