Springboot Redisson 分布式锁、缓存、消息队列、布隆过滤器
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: localhost
port: 6379
redisson:
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 {
@Autowired
private 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 {
@Autowired
private 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 {
@Autowired
private RedissonClient redissonClient;
public void cacheData() {
// 分布式 Map
RMap<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 {
@Autowired
private 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 {
@Autowired
private RedissonClient redissonClient;
public void useBloomFilter() {
RBloomFilter<String> bloomFilter = redissonClient.getBloomFilter("myBloomFilter");
// 初始化布隆过滤器:预计元素数量为 100,误判率为 0.01
bloomFilter.tryInit(100, 0.01);
bloomFilter.add("item1");
bloomFilter.add("item2");
// 检查元素是否存在
System.out.println(bloomFilter.contains("item1")); // 输出:true
System.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 {
@Autowired
private 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 {
@Autowired
private 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 能快速构建高性能的分布式系统。