redisson-spring-boot-starter
是 Redisson 提供的 Spring Boot 集成包,旨在简化与 Redis 的交互,包括分布式锁、缓存、消息队列、布隆过滤器等功能的实现。
Maven 依赖
在 Spring Boot 项目中添加 redisson-spring-boot-starter
依赖:
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.22.0</version> <!-- 请根据需要选择最新版本 -->
</dependency>
核心功能
- 分布式锁
- 分布式缓存
- 布隆过滤器
- 分布式队列
- 对象映射
快速配置
1. 配置文件
在 application.yml
中配置 Redis 连接信息:
spring:redis:host: localhostport: 6379redisson:config: |singleServerConfig:address: "redis://127.0.0.1:6379"
2. 自动装配 RedissonClient
Spring Boot 项目启动后,redisson-spring-boot-starter
会自动注册 RedissonClient
,可以直接注入使用:
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class RedissonController {@Autowiredprivate RedissonClient redissonClient;@GetMapping("/test")public String test() {// 测试连接return redissonClient.getKeys().getKeysCount() + " keys in Redis";}
}
功能示例
1. 分布式锁
Redisson 提供了基于 Redis 的分布式锁功能:
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.concurrent.TimeUnit;@Service
public class LockService {@Autowiredprivate RedissonClient redissonClient;public void executeWithLock() {// 获取分布式锁RLock lock = redissonClient.getLock("myLock");try {// 尝试获取锁,最多等待 10 秒,锁自动释放时间为 30 秒if (lock.tryLock(10, 30, TimeUnit.SECONDS)) {try {System.out.println("Lock acquired. Executing critical section.");// 业务逻辑} finally {lock.unlock(); // 释放锁}}} catch (InterruptedException e) {Thread.currentThread().interrupt();}}
}
2. 分布式缓存
使用 Redisson 提供的 RMap
实现分布式缓存:
import org.redisson.api.RMap;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class CacheService {@Autowiredprivate RedissonClient redissonClient;public void cacheData() {// 分布式 MapRMap<String, String> map = redissonClient.getMap("myCache");map.put("key1", "value1");map.put("key2", "value2");System.out.println("Cached data: " + map.get("key1")); // 输出:value1}
}
3. 分布式队列
Redisson 支持多种类型的分布式队列:
import org.redisson.api.RQueue;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class QueueService {@Autowiredprivate RedissonClient redissonClient;public void processQueue() {// 分布式队列RQueue<String> queue = redissonClient.getQueue("myQueue");// 入队queue.add("Task1");queue.add("Task2");// 出队String task = queue.poll();System.out.println("Processing: " + task); // 输出:Processing: Task1}
}
4. 布隆过滤器
Redisson 提供了对布隆过滤器的支持,用于高效检查元素是否存在:
import org.redisson.api.RBloomFilter;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class BloomFilterService {@Autowiredprivate RedissonClient redissonClient;public void useBloomFilter() {RBloomFilter<String> bloomFilter = redissonClient.getBloomFilter("myBloomFilter");// 初始化布隆过滤器:预计元素数量为 100,误判率为 0.01bloomFilter.tryInit(100, 0.01);bloomFilter.add("item1");bloomFilter.add("item2");// 检查元素是否存在System.out.println(bloomFilter.contains("item1")); // 输出:trueSystem.out.println(bloomFilter.contains("item3")); // 输出:false}
}
5. 发布/订阅
Redisson 支持 Redis 的发布/订阅功能:
发布消息:
import org.redisson.api.RTopic;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class PublisherService {@Autowiredprivate RedissonClient redissonClient;public void publishMessage() {RTopic topic = redissonClient.getTopic("myTopic");topic.publish("Hello, Redisson!");}
}
订阅消息:
import org.redisson.api.RTopic;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class SubscriberService {@Autowiredprivate RedissonClient redissonClient;public void subscribeToTopic() {RTopic topic = redissonClient.getTopic("myTopic");topic.addListener(String.class, (channel, msg) -> {System.out.println("Received message: " + msg);});}
}
常见配置
多节点配置(主从模式):
redisson:config: |masterSlaveServersConfig:masterAddress: "redis://127.0.0.1:6379"slaveAddresses:- "redis://127.0.0.2:6380"
哨兵模式:
redisson:config: |sentinelServersConfig:masterName: "mymaster"sentinelAddresses:- "redis://127.0.0.1:26379"- "redis://127.0.0.2:26379"
集群模式:
redisson:config: |clusterServersConfig:nodeAddresses:- "redis://127.0.0.1:7000"- "redis://127.0.0.2:7001"
总结
redisson-spring-boot-starter
提供了对 Redis 的高级功能支持,常用场景包括:
- 分布式锁:轻松实现高效的分布式锁管理。
- 分布式缓存:代替原生的 RedisTemplate,更易用。
- 布隆过滤器:高效检查数据是否存在。
- 分布式队列:支持消息队列与任务调度。
- 发布/订阅:实现实时消息分发。
Redisson 的强大在于其对 Redis 功能的全面支持,结合 Spring Boot 能快速构建高性能的分布式系统。