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 能快速构建高性能的分布式系统。

相关推荐
刘一说10 分钟前
深入理解 Spring Boot Actuator:构建可观测性与运维友好的应用
运维·spring boot·后端
oak隔壁找我15 分钟前
Spring AI 入门教程,使用Ollama本地模型集成,实现对话记忆功能。
java·人工智能·后端
懒羊羊不懒@16 分钟前
JavaSe—Stream流☆
java·开发语言·数据结构
郝开17 分钟前
最终 2.x 系列版本)2 - 框架搭建:pom配置;多环境配置文件配置;多环境数据源配置;测试 / 生产多环境数据源配置
java·spring boot·后端
用户37779672109630 分钟前
RabbitMQ Unacked 消息深度解析:机制、问题与解决方案
spring boot·rabbitmq
Homeey38 分钟前
深入理解ThreadLocal:从原理到架构实践的全面解析
java·后端
ANGLAL40 分钟前
27.短链系统
java
大数据CLUB44 分钟前
酒店预订数据分析及预测可视化
大数据·hadoop·分布式·数据挖掘·数据分析·spark·mapreduce
Lisonseekpan1 小时前
Git 命令大全:从基础到高级操作
java·git·后端·github·团队开发
CodeCraft Studio1 小时前
国产化Excel处理控件Spire.XLS教程:使用Java将CSV转换为PDF(含格式设置)
java·pdf·excel·spire.xls·文档格式转换·csv转pdf