当前位置: 首页 > article >正文

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. 分布式锁
  2. 分布式缓存
  3. 布隆过滤器
  4. 分布式队列
  5. 对象映射

快速配置

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


http://www.kler.cn/a/506080.html

相关文章:

  • 深入理解计算机系统阅读笔记-第十二章
  • Android BottomNavigationView不加icon使text垂直居中,完美解决。
  • 【蓝牙】win11 笔记本电脑连接 hc-06
  • Facebook 隐私风波:互联网时代数据安全警钟
  • sql_实用查询语句模版
  • (一)QSQLite3库简介
  • KVM创建ubuntu20.04虚机,部署K8S,再克隆出二份,做为Worker节点加入集群,通过Helm创建2个Pod,让它们之间通过域名互访
  • 解锁转型密码:不同方向的技能与素质修炼手册
  • PHP与HTML、CSS、JavaScript、jQuery的关系**
  • 主动出击,在去中心化世界中成为连接中心
  • 线性变换与矩阵的关系及其在机器学习中的应用
  • GoLang教程004:流程控制和if语句介绍
  • 微信小程序在使用页面栈保存页面信息时,如何避免数据丢失?
  • C#局部函数 VS Lambda表达式
  • LLMs之RAG:《EdgeRAG: Online-Indexed RAG for Edge Devices》翻译与解读
  • 使用 JUnit 和 SuiteRunner 测试私有方法
  • AI辅助编程:快速构建软件原型,开启高效开发新纪元
  • 《探秘火焰目标检测开源模型:智能防火的科技利刃》
  • SpringBoot 集成 Gitee 实现三方登录
  • 5套经典行业原型-含生鲜电商、旅游社交、O2O美食、汽车美容行业
  • python-应用自动化操作方法集合
  • 漫话架构师|什么是系统架构设计师(开篇)
  • 【Mysql进阶知识】
  • MyBatis-Plus6--MyBatis中的分页插件
  • 物联网网关Web服务器--lighttpd服务器部署与应用测试
  • 【深度学习基础】线性神经网络 | 图像分类数据集