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

相关推荐
JH30737 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
Coder_Boy_8 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
invicinble8 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
较真的菜鸟9 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖9 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
qq_124987075310 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_10 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Mr_sun.10 小时前
Day06——权限认证-项目集成
java
瑶山10 小时前
Spring Cloud微服务搭建四、集成RocketMQ消息队列
java·spring cloud·微服务·rocketmq·dashboard
abluckyboy10 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法