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

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

相关文章:

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

redisson-spring-boot-starter 是 Redisson 提供的 Spring Boot 集成包&#xff0c;旨在简化与 Redis 的交互&#xff0c;包括分布式锁、缓存、消息队列、布隆过滤器等功能的实现。 Maven 依赖 在 Spring Boot 项目中添加 redisson-spring-boot-starter 依赖&#xff1a; <…...

【C语言】_字符串拷贝函数strcpy

目录 1. 函数声明及功能 2. 使用示例 3. 注意事项 4. 模拟实现 4.1 第一版&#xff1a;基本功能判空const修饰 4.2 第二版&#xff1a;优化对于\0的单独拷贝 4.3 第三版&#xff1a;仿strcpy的char*返回值 1. 函数声明及功能 char * strcpy ( char * destination, cons…...

基于 Vue 的拖拽缩放卡片组件:实现思路、方法及使用指南

引言 在前端开发中&#xff0c;实现可交互的组件能够极大地提升用户体验。本文将介绍一个基于 Vue 封装的可缩放卡片组件&#xff0c;从实现思路、代码具体实现以及使用方法等方面进行详细阐述&#xff0c;帮助开发者更好地理解和运用这一组件。项目源码地址&#xff1a;https…...

nginx 实现 正向代理、反向代理 、SSL(证书配置)、负载均衡 、虚拟域名 ,使用其他中间件监控

我们可以详细地配置 Nginx 来实现正向代理、反向代理、SSL、负载均衡和虚拟域名。同时&#xff0c;我会介绍如何使用一些中间件来监控 Nginx 的状态和性能。 1. 安装 Nginx 如果你还没有安装 Nginx&#xff0c;可以通过以下命令进行安装&#xff08;以 Ubuntu 为例&#xff0…...

Kafka客户端-“远程主机强迫关闭了一个现有的连接”故障排查及解决

Kafka客户端-“远程主机强迫关闭了一个现有的连接”故障排查及解决 1. 故障现象 Kafka客户端发送数据时&#xff0c;出现“远程主机强迫关闭了一个现有的连接”错误&#xff0c;导致数据发送失败。错误信息如下&#xff1a; 2. 故障排查 【1】. 查看服务网络状态 出现故障…...

Node.js - Express框架

1. 介绍 Express 是一个基于 Node.js 的 Web 应用程序框架&#xff0c;主要用于快速、简便地构建 Web 应用程序 和 API。它是目前最流行的 Node.js Web 框架之一&#xff0c;具有轻量级、灵活和功能丰富的特点。 核心概念包括路由&#xff0c;中间件&#xff0c;请求与响应&a…...

AWS Lambda

AWS Lambda 是 Amazon Web Services&#xff08;AWS&#xff09;提供的无服务器计算服务&#xff0c;它让开发者能够运行代码而不需要管理服务器或基础设施。AWS Lambda 会自动处理代码的执行、扩展和计费&#xff0c;开发者只需关注编写和部署代码&#xff0c;而无需担心底层硬…...

mysql 如何快速删除表数据

在数据库管理中, 经常会遇到需要删除大量数据的情况. 对于 MySQL 数据库而言, 如何高效快速地删除数据是一个值得深入探讨的问题. 本文将详细介绍几种在 MySQL 中快速删除数据的方法及相关注意事项. delete 语句 delete 语句可以删除符合条件的指定数据, 但是在删除大量数据…...

物联网网关Web服务器--lighttpd服务器部署与应用测试

以下是在国产ARM处理器E2000飞腾派开发板上部署 lighttpd 并进行 CGI 应用开发的步骤&#xff1a; 1、lighttpd简介 Lighttpd 是一款轻量级的开源 Web 服务器软件&#xff0c;具有以下特点和功能&#xff1a; 特点 轻量级&#xff1a;Lighttpd 在设计上注重轻量级和高效性&a…...

vmware虚拟机配置ubuntu 18.04(20.04)静态IP地址

VMware版本 &#xff1a;VMware Workstation 17 Pro ubuntu版本&#xff1a;ubuntu-18.04.4-desktop-amd64 主机环境 win11 1. 修改 VMware虚拟网络编辑器 打开vmware&#xff0c;点击顶部的“编辑"菜单&#xff0c;打开 ”虚拟化网络编辑器“ 。 选择更改设置&#…...

智能家居篇 一、Win10 VM虚拟机安装 Home Assistant 手把手教学

智能家居篇 一、Win10 VM虚拟机安装 Home Assistant 手把手教学 文章目录 [智能家居篇]( )一、Win10 VM虚拟机安装 Home Assistant 手把手教学 前言一.下载Vm版本的HomeAsistant安装包 二.打开Vmware选择新建虚拟机1.选择自定义高级2.选择16.x及以上3.选择稍后安装4.根据官网的…...

Flutter插件制作、本地/远程依赖及缓存机制深入剖析(原创-附源码)

Flutter插件在开发Flutter项目的过程中扮演着重要的角色&#xff0c;我们从 ​​​​​​https://pub.dev 上下载添加到项目中的第三方库都是以包或者插件的形式引入到代码中的&#xff0c;这些第三方工具极大的提高了开发效率。 深入的了解插件的制作、发布、工作原理和缓存机…...

Python猜数小游戏

Python 实现的《猜数游戏》 介绍 本文将展示如何使用 Python 编写一个简单的《猜数游戏》。这个游戏将会生成一个1到10之间的随机数&#xff0c;用户有最多三次机会来猜测正确的数字。如果用户猜对了&#xff0c;游戏将结束并显示恭喜信息&#xff1b;如果没有猜对&#xff0…...

--- 用java实现一个计时器 ---

这里的计时器值得是当线程设定的时间过了之后&#xff0c;自动执行该线程的工作 设计 MyTimer 既然是要在指定的时间之后执行任务&#xff0c;那么传入的参数就应该有run方法&#xff08;需要执行的任务&#xff09;&#xff0c;time&#xff08;在多少时间之后执行&#xff…...

OPI4A,目标检测,口罩检测,mnn,YoloX

记得之前&#xff0c;使用了bubbling导师复现的python版yolox&#xff0c;训练了自建的口罩数据集&#xff0c;得到了h5文件&#xff0c;又转换成pb文件&#xff0c;再使用阿里巴巴的MNN&#xff0c;使用它的MNNConvert&#xff0c;转换成mnn文件 最终实现了&#xff0c;在树莓…...

C#与Vue2上传下载Excel文件

1、上传文件流程&#xff1a;先上传文件&#xff0c;上传成功&#xff0c;返回文件名与url&#xff0c;然后再次发起请求保存文件名和url到数据库 前端Vue2代码&#xff1a; 使用element的el-upload组件&#xff0c;action值为后端接收文件接口&#xff0c;headers携带session信…...

Linux(Centos7)安装Mysql/Redis/MinIO

安装Mysql 安装Redis 搜索Redis最先版本所在的在线安装yum库 查看以上两个组件是否是开机自启 安装MinIO 开源的对象存储服务&#xff0c;存储非结构化数据&#xff0c;兼容亚马逊S3协议。 minio --help #查询命令帮助minio --server --help #查询--server帮助minio serve…...

港科夜闻 | 香港科大与微软亚洲研究院签署战略合作备忘录,推动医学健康教育及科研协作...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大与微软亚洲研究院签署战略合作备忘录&#xff0c;推动医学健康教育及科研协作。根据备忘录&#xff0c;双方将结合各自于科研领域的优势&#xff0c;携手推动医学健康领域的交流与合作。合作方向将涵盖人才培训、…...

森林网络部署,工业4G路由器实现林区组网远程监控

在广袤无垠的林区&#xff0c;每一片树叶的摇曳、每一丝空气的流动&#xff0c;都关乎着生态的平衡与安宁。林区监控正以强大的力量&#xff0c;为这片绿色家园筑起一道坚固的防线。 工业 4G 路由器作为林区监控组网的守护者&#xff0c;凭借着卓越的通讯性能&#xff0c;突破…...

ASP.NET Core - 配置系统之自定义配置提供程序

ASP.NET Core - 配置系统之自定义配置提供程序 4. 自定义配置提供程序IConfigurationSourceIConfigurationProvider 4. 自定义配置提供程序 在 .NET Core 配置系统中封装一个配置提供程序关键在于提供相应的 IconfigurationSource 实现和 IConfigurationProvider 接口实现&…...

npm、yarn、pnpm包安装器差异性对比

特性npmyarnpnpm发布年份2010 年发布2016 年发布2017 年发布安装速度较慢&#xff08;旧版本&#xff09;&#xff0c;但自 npm 5 后有所改善较快&#xff0c;尤其是在缓存方面极快&#xff0c;使用硬链接和全局缓存来提高速度包管理模式扁平化依赖&#xff0c;可能会发生重复依…...

正点原子repo放到自己的git服务器

atk-rk3568_android11 导出project-objects对应仓库 .repo/repo/repo list -n > project-object.txt将project-object.txt格式化&#xff0c;并通过gitolite.conf创建对应仓库 atk-rk3568_android11_repo atk-rk3568_android11/RKTools atk-rk3568_android11_repo atk-…...

[MySQL | 二、基本数据类型]

基本数据类型 一、数值类型举例表结构1. 整数类型zerofill属性 与 int(n) 中 n 的关系 2.bit类型3. 小数类型float类型decimal类型 二、字符串类型1. char2. varchar如何选择定长或变长字符串&#xff1f; 3. 日期时间类型(date datetime timestamp)4. enum枚举类型5. set多选类…...

工作记录小点

postman问题 postman 返回404 可以先看看这个模块是否集成到pom文件中 postman 返回200不调debug 请求参数Json有错误请求方式不对Get/Post debug报错连接失败 host文件没copy同事的 2.对应组件的不同服务白名单没添加导致的 host文件刷新 进入 C:\windows\system32\drivers\e…...

在PyCharm中使用Anaconda中的虚拟环境

1、在File菜单中找到Settings 2、Settings中搜索interpreter&#xff0c;找到Python Interpreter&#xff0c;再点击Add 3、选择第一个local interpreter 4、如图&#xff1a; 5、找到anaconda安装位置中的envs文件夹&#xff0c;在里面选择需要添加的python环境&#xff0c;如…...

ansible基础

ansible 1.概述 ansible是基于python语言开发&#xff0c;配置管理和部署应用的工具。批量的配置&#xff0c;部署&#xff0c;管理“上千台”主机 &#xff08;实际一次100台左右&#xff09;&#xff0c;ansible只要在一台主机上就可以对其他主机进行操作。 &#xff08;1&…...

人工智能之深度学习_[2]-PyTorch入门

PyTorch 1.PyTorch简介 1.1 什么是PyTorch PyTorch是一个基于Python的科学计算包 PyTorch安装 pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simplePyTorch一个基于Python语言的深度学习框架&#xff0c;它将数据封装成张量&#xff08;Tensor&#xff09;来进行…...

基于Java的语音陪聊软件——支持聊天私聊-礼物系统-直播系统-缘分匹配-游戏陪玩

丰富的经验、成熟的技术&#xff0c;打造适合当下市场发展的语音交友软件源码。Java 语言凭借其独特的优势&#xff0c;为这款语音陪聊软件的稳健运行和持续发展奠定了坚实基础。它不仅融合了聊天私聊、礼物系统和直播系统等实用且有趣的功能&#xff0c;还创新性地引入了缘分匹…...

Go语言的文件操作

Go语言的文件操作 Go语言是一种开源的编程语言&#xff0c;由谷歌开发&#xff0c;具有简单、高效和并发的特点。在日常开发中&#xff0c;文件操作是一个非常重要且常见的任务。从读取配置文件到写入日志文件&#xff0c;从处理数据到存储结果&#xff0c;文件操作无处不在。…...

php审计1-extract函数变量覆盖

php审计1-extract函数变量覆盖 这是一个关于php审计的栏目&#xff0c;本人也是初学者&#xff0c;分享一下网上的关于php审计的一些知识&#xff0c;学习一下php的语法&#xff0c;顺便记录一下学习过程。 以下是一个关于php审计ctf题 <?php$flagflag.txt; extract($_…...