Springboot Redisson 分布式锁、缓存、消息队列、布隆过滤器

redisson-spring-boot-starter 是 Redisson 提供的 Spring Boot 集成包,旨在简化与 Redis 的交互,包括分布式锁、缓存、消息队列、布隆过滤器等功能的实现。


Maven 依赖

在 Spring Boot 项目中添加 redisson-spring-boot-starter 依赖:

xml 复制代码
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>3.22.0</version> <!-- 请根据需要选择最新版本 -->
</dependency>

核心功能

  1. 分布式锁
  2. 分布式缓存
  3. 布隆过滤器
  4. 分布式队列
  5. 对象映射

快速配置

1. 配置文件

application.yml 中配置 Redis 连接信息:

yaml 复制代码
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,可以直接注入使用:

java 复制代码
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 的分布式锁功能:

java 复制代码
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 实现分布式缓存:

java 复制代码
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 支持多种类型的分布式队列:

java 复制代码
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 提供了对布隆过滤器的支持,用于高效检查元素是否存在:

java 复制代码
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 的发布/订阅功能:

发布消息:

java 复制代码
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!");
    }
}

订阅消息:

java 复制代码
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);
        });
    }
}

常见配置

多节点配置(主从模式):
yaml 复制代码
redisson:
  config: |
    masterSlaveServersConfig:
      masterAddress: "redis://127.0.0.1:6379"
      slaveAddresses:
        - "redis://127.0.0.2:6380"
哨兵模式:
yaml 复制代码
redisson:
  config: |
    sentinelServersConfig:
      masterName: "mymaster"
      sentinelAddresses:
        - "redis://127.0.0.1:26379"
        - "redis://127.0.0.2:26379"
集群模式:
yaml 复制代码
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 能快速构建高性能的分布式系统。

相关推荐
岁忧3 分钟前
(LeetCode 每日一题) 1865. 找出和为指定值的下标对 (哈希表)
java·c++·算法·leetcode·go·散列表
YuTaoShao6 分钟前
【LeetCode 热题 100】240. 搜索二维矩阵 II——排除法
java·算法·leetcode
亲爱的非洲野猪17 分钟前
Kafka “假死“现象深度解析与解决方案
分布式·kafka
虾条_花吹雪23 分钟前
2、Connecting to Kafka
分布式·ai·kafka
考虑考虑1 小时前
JDK9中的dropWhile
java·后端·java ee
想躺平的咸鱼干1 小时前
Volatile解决指令重排和单例模式
java·开发语言·单例模式·线程·并发编程
hqxstudying2 小时前
java依赖注入方法
java·spring·log4j·ioc·依赖
·云扬·2 小时前
【Java源码阅读系列37】深度解读Java BufferedReader 源码
java·开发语言
Edingbrugh.南空2 小时前
Hadoop高可用集群搭建
大数据·hadoop·分布式
Bug退退退1233 小时前
RabbitMQ 高级特性之重试机制
java·分布式·spring·rabbitmq