Spring Boot整合Redisson

Spring boot 整合 redisson ,spring-session Spring boot 整合 redisson ,spring-session整合Redisson整合Spring Session会话管理器参考文章 整合Redisson 在项目中引入封装好的redisson-spring-boot-starter依赖(也可以根据封装代码或者官网自己实现,从简单角度建议根据封装代码实现自己需要的) <dependency> <g... 阅读详情

Redis与Redisson

什么是Redis?

Remote Dictionary Server(Redis)远程字典服务器是完全开源免费的,用C语言编写的,遵守BSD开源协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行,并支持持久化的NoSQL数据库,它也通常被称为数据结构服务器,因为值(value)可以是字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
与传统数据库不同的是 Redis 的数据是存在内存中的,所以存写速度非常快,因此 Redis被广泛应用于缓存方向。Redis为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。
Rediis 与其他 key - value 缓存产品有以下几个特点:
性能极高 – Redis读的速度是11W次/s,写的速度是81K次/s
支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
丰富的数据类型,Redis不仅仅支持简单的key-value类型的数据,同时还提供Strings, Lists, Hashes, Sets 及 Ordered Sets 等数据结构的存储。
支持数据的备份,即master-slave模式的数据备份。 Redis使用场景,查询出的数据保存到Redis中,下次查询的时候直接从Redis中拿到数据。不用和数据库进行交互。

什么是Redisson

Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Set, Multimap,SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque,Semaphore, Lock, AtomicLong, CountDownLatch, Publish / Subscribe,Bloom filter, Remote service, Spring cache, Executor service, Live Object service, Scheduler service) Redisson提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。 关于Redisson项目的详细介绍可以在官方网站找到。
每个Redis服务实例都能管理多达1TB的内存。

Spring Boot整合Redisson

源码地址

添加依赖

 		<dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.5.0</version>
        </dependency>

修改application.properties配置

因为是简单的demo,所以简单配置即可

server.port=8082
redisson.address=redis://192.168.1.106:6379

添加配置类

RedisConfig.java

@Configuration
public class RedisConfig {

    @Value("${redisson.address}")
    private String addressUrl;

    @Bean
    public RedissonClient getRedisson() throws Exception{
        RedissonClient redisson = null;
        Config config = new Config();
        config.useSingleServer()
                .setAddress(addressUrl);
        redisson = Redisson.create(config);

        System.out.println(redisson.getConfig().toJSON().toString());
        return redisson;
    }
}

定义redis操作接口

TestRedisService.java

@Service
public interface TestRedisService {

    RLock lock(String lockKey);

    RLock lock(String lockKey, long timeout);

    RLock lock(String lockKey, TimeUnit unit, long timeout);

    boolean tryLock(String lockKey, TimeUnit unit, long waitTime, long leaseTime);

    void unlock(String lockKey);

    void unlock(RLock lock);
}

定义操作实现类

TestRedisServiceImpl.java

@Component
public class TestRedisServiceImpl implements TestRedisService {
    // RedissonClient已经由配置类生成,这里自动装配即可
    @Autowired
    private RedissonClient redissonClient;

    // lock(), 拿不到lock就不罢休,不然线程就一直block
    @Override
    public RLock lock(String lockKey) {
        RLock lock = redissonClient.getLock(lockKey);
        lock.lock();
        return lock;
    }

    // leaseTime为加锁时间,单位为秒
    @Override
    public RLock lock(String lockKey, long leaseTime) {
        RLock lock = redissonClient.getLock(lockKey);
        lock.lock(leaseTime, TimeUnit.SECONDS);
        return null;
    }

    // timeout为加锁时间,时间单位由unit确定
    @Override
    public RLock lock(String lockKey, TimeUnit unit, long timeout) {
        RLock lock = redissonClient.getLock(lockKey);
        lock.lock(timeout, unit);
        return lock;
    }

    @Override
    public boolean tryLock(String lockKey, TimeUnit unit, long waitTime, long leaseTime) {
        RLock lock = redissonClient.getLock(lockKey);
        try {
            return lock.tryLock(waitTime, leaseTime, unit);
        } catch (InterruptedException e) {
            return false;
        }
    }

    @Override
    public void unlock(String lockKey) {
        RLock lock = redissonClient.getLock(lockKey);
        lock.unlock();
    }

    @Override
    public void unlock(RLock lock) {
        lock.unlock();
    }

}

测试与验证

定义一个restcontroller,作为请求入口,在控制器中使用100个线程模拟一下获取锁的动作,然后不去释放锁,浏览器请求后查看下控制台输出情况。

@RestController
@RequestMapping("/test")
public class TestRedisController {
    @Autowired
    private TestRedisService testRedisService;
    @GetMapping("/test")
    @ResponseBody
    public void redissonTest() {
        String key = "redisson_key";
        for (int i = 0; i < 100; i++) {
            Thread t = new Thread(() -> {
                try {
                    System.err.println("=============线程开启============" + Thread.currentThread().getName());

                    /*testRedisService.lock(key,10L); //直接加锁,获取不到锁则一直等待获取锁
                      Thread.sleep(100); //获得锁之后可以进行相应的处理
                      System.err.println("======获得锁后进行相应的操作======"+Thread.
                      currentThread().getName());
                    testRedisService.unlock(key); //解锁
                      System.err.println("============================="+
                      Thread.currentThread().getName());
*/

                    boolean isGetLock = testRedisService.tryLock(key, TimeUnit.SECONDS, 5L, 10L); // 尝试获取锁,等待5秒,自己获得锁后一直不解锁则10秒后自动解锁
                    if (isGetLock) {
                        System.out.println("线程:" + Thread.currentThread().getName() + ",获取到了锁");
                        Thread.sleep(100);
                        // 获得锁之后可以进行相应的处理
                        System.err.println("======获得锁后进行相应的操作======" + Thread.currentThread().getName());
                        //distributedLocker.unlock(key);
                        System.err.println("=============================" + Thread.currentThread().getName());
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            });
            t.start();
        }
    }
}

=============线程开启============Thread-209
=============线程开启============Thread-210
=============线程开启============Thread-211
=============线程开启============Thread-212
=============线程开启============Thread-213
线程:Thread-122,获取到了锁
======获得锁后进行相应的操作======Thread-122
=============================Thread-122

122线程获得了锁,然后其他线程在等待状态。
下面将解锁代码注释去掉,查看控制台情况:

=============线程开启============Thread-213
======获得锁后进行相应的操作======Thread-130
=============================Thread-130
线程:Thread-130,获取到了锁
======获得锁后进行相应的操作======Thread-130
=============================Thread-130
======获得锁后进行相应的操作======Thread-171
=============================Thread-171
线程:Thread-171,获取到了锁
======获得锁后进行相应的操作======Thread-171
=============================Thread-171
======获得锁后进行相应的操作======Thread-155
=============================Thread-155
线程:Thread-155,获取到了锁
======获得锁后进行相应的操作======Thread-155
=============================Thread-155
======获得锁后进行相应的操作======Thread-148
=============================Thread-148
线程:Thread-148,获取到了锁
======获得锁后进行相应的操作======Thread-148
=============================Thread-148

可以发现,每次在我们设置时间过后,都会有新的线程来获得锁。

Spring Boot整合Redisson的两种方式 Redis是一个开源的内存数据库,支持多种数据类型,如字符串、哈希、列表、集合和有序集合等,常用于缓存、消息队列、计数器、分布式锁和搜索等应用场景。Redisson则是一个基于Redis实现的Java驻内存数据网格,提供了一系列分布式的Java常用对象和多种锁机制,以及分布式服务,使开发者能更集中于处理业务逻辑。Redisson不支持字符串操作、排序、事务、管道、分区等Redis特性,但Redisson 提供了许多其他功能,如分布式闭锁、分布式计数器、分布式信号量等。 阅读详情

相关推荐

Spring Boot 3.4.3 整合 Redisson 实现分布式

分布式锁是在分布式环境下,用于协调多个进程或线程对共享资源的访问,确保同一时间只有一个实例可以操作资源。它通常用于防止数据竞争、重复处理等问题。Redisson 是一个基于 Redis 的 Java 客户端,提供分布式锁、分布式集合等功能。它内置了多种锁机制(如可重入锁、读写锁),并支持高性能和可靠性。Spring Boot 3.4.3 整合 Redisson 提供了一种简单而强大的方式实现分布式锁。本文从依赖配置到锁的实现,覆盖了核心步骤。

lssffy的博客 1530

spring整合redisson配置

配置方式 redis的部署方式有单节点部署、哨兵方式部署、集群方式部署3种方式 各种配置方式可以去看xsd文件:redisson-1.1.xsd <xsd:element name="single-server"> // 单节点 <xsd:element name="sentinel-servers"> // 哨兵 <xsd:element name=...

qq_36042938的博客 8580

基于Redis集群SpringBoot整合Redisson实现分布式锁

分布式锁使用场景 ​ 用锁保护共享资源,例如 生成唯一的序列号、电商系统下单前确保库存足够等。 RedLock算法的核心原理: 使用N个完全独立、没有主从关系的Redis master节点以保证他们大多数情况下都不会同时宕机,N一般为奇数。一个客户端需要做如下操作来获取锁: 获取当前时间(单位是毫秒)。 轮流用相同的key和随机值在N个节点上请求锁,在这一步里,客户端在每个master上请求锁时,会有一个和总的锁释放时间相比小的多的超时时间。比如如果锁自动释放时间是10秒钟,那每个节点锁请求的超时时间可

quest101的博客 820

【论文阅读】2021-(Pidinet)Pixel Difference Networks for Efficient Edge Detection

文章目录摘要1. Introduction 摘要 motivations: 基于CNN的边缘检测的高性能是通过一个大的预训练CNN主干来实现的,该主干占用大量内存和能量。传统边缘检测器(如Canny、Sobel和LBP)很少被研究。 contributions: 提出了一种简单、轻量级但有效的架构,称为像素差分网络(PiDiNet),用于有效的边缘检测。PiDiNet采用了新颖的像素差卷积,将传统的边缘检测算子集成到现代CNN中流行的卷积运算中,以增强任务性能。 experiments: 在BSDS500

轻舟的万重重山 1万+

STM32CubeMX+FreeRTOS+CAN总线+传感器实战:多任务系统与通信融合开发详解

本文详细介绍了基于STM32CubeMX和FreeRTOS的CAN总线与光电传感器融合开发实战。通过多任务系统设计,实现传感器数据采集与CAN通信的协同工作,提供完整的配置例程和调试技巧,适用于工业控制与机器人感知等应用场景。

n2o3p4的博客 734

SpringBoot之使用Redisson实现分布式锁(秒杀系统)

前面讲完了Redis的分布式锁的实现,接下来讲Redisson的分布式锁的实现,一般提及到Redis的分布式锁我们更多的使用的是Redisson的分布式锁,Redis的官方也是建议我们这样去做的。Redisson点我可以直接跳转到Redisson的官方文档。 1.1、引入Maven依赖 <dependency> <groupId>org.redisson&lt...

一叶知秋hwb的博客 1万+

台积电技术研发实力

台积电技术研发实力 台积电在半导体行业的地位毋庸置疑。他们究竟有多强大,大部分读者了解得可能非常片面。从最新公布的2019年财报里,看看台积电的真正实力。 一、台积电在市场上的地位 根据公司财报,台积公司在先进制程技术、特殊制程技术,以及先进封装技术的发展上持续领先全球集成电路制造服务领域,2019年的市场占有率为52%。台积公司总体营收以地区划分(主要依据客户营运总部所在地),来自北美市场的营收占台积公司总体营收的60%、日本与中国大陆以外的亚太市场占9%、中国大陆市场占20%、欧洲、中东及非洲市场占6

吴建明wujianming_110117 1900

spring boot 下 Redisson分布式锁框架简单使用

在项目中要用到分布式锁,之前都是用jedis去实现的,有很多细节方面都有可能出问题,然后在了解到了redisson之后,决定使用这个成熟的框架去实现分布式锁。 首先引入jar包,除了spring boot的相关jar包,只引这一个就够了 <dependency> <groupId>org.redisson</gr...

lvqinglou的博客 600

《时序分析、时序约束和时序收敛》专栏的说明与导航

《时序分析、时序约束和时序收敛》专栏的说明与导航(建议阅读)。

孤独的单刀 14万+

Android AICore的核心组件工作原理解析

AICore通过LoRA实现个性化适配Gemini Nano提供多模态智能Safety Features保障可信运行,构建了端侧AI的完整生态。这种设计不仅让手机等移动设备能处理复杂AI任务(如实时多模态交互),还通过隐私保护机制打破了传统云端AI的数据依赖,为未来“设备即AI基础设施”的愿景奠定了基础。输入触发:用户输入“刚提交了代码,等审核”→ 进入TEE加密处理。Gemini Nano基础生成:通过原始权重W_q生成初始回复候选。LoRA个性化微调:通过A'和B'计算ΔW,更新W_q。

1551

redisson参数配置

Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了丰富的Redis操作接口,还提供了许多分布式相关的服务,包括但不限于Redisson分布式锁、Redisson分布式集合、Redisson分布式服务等。以上是Redisson的一些基本参数配置,具体的配置可能会根据你的应用需求有所不同。在配置Redisson时,你应该根据你的应用的特性和需求来选择合适的参数。

高性价比服务器就选:蓝易云 1133

20、基于图神经网络的脱氢焓预测方法研究

本文研究了基于图神经网络(GNN)的液态有机氢载体(LOHC)材料脱氢焓预测方法。通过分析现有GNN方法的局限性,提出了一种新的聚合自节点表示(AWS)方法,并结合丰富的原子特征和集成学习策略,显著提高了预测性能。实验结果表明,AWS在脱氢焓预测和多个基准化学性质预测任务中均优于现有GNN方法。此外,基于分子结构的集成方法进一步提升了模型的鲁棒性和准确性。研究展示了该方法在筛选LOHC材料中的潜力,并为未来预测更多化学性质奠定了基础。

pp12345的博客 103

spring boot整合redisson

1.springboot 整合redisson,也依赖于spring-boot-starter-data-redis。 1.引入依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent&...

lucky_ly的博客 2585

软件崩溃时Visual Studio中看不到有效的调用堆栈,使用Windbg动态调试去分析定位

当在Visual Studio中遇到软件崩溃且无法查看详细调用堆栈时,可以使用Windbg进行动态调试去分析定位问题。

dvlinker的技术专栏 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Spring Boot 整合 Redisson 实现分布式锁详解

摘要:本文介绍了在Spring Boot项目中整合Redisson实现分布式锁的完整方案。首先阐述了分布式锁的基础概念和核心特性(互斥性、安全性、可用性等),对比了主流实现方案。重点讲解了Redisson的优势(可重入锁、自动续约等)及其典型应用场景(库存扣减、任务调度等)。最后详细给出了Spring Boot整合Redisson的具体步骤,包括环境配置、依赖添加、RedissonClient注入和分布式锁的代码实现示例.

深耕 Java 后端与企业级软件架构设计,专注微服务、分布式系统、大模型 AI 应用架构落地。 2138

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

springboot整合redisson实战(一)整合 redisson-spring-boot-starter

SpringBoot整合Redisson有个比较好用的starter包就是redisson-spring-boot-starter,这也是官方比较推荐的配置方式。

s_156的博客 2万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Redisson 与 Spring Boot 3.4 整合指南

本文详细介绍了Spring Boot 3.4.0项目整合Redisson 3.23.2的完整流程,采用手动配置方式避免自动配置的常见问题。文章包含Maven依赖配置、Redisson YAML配置文件示例、RedisConfig配置类实现及使用注意事项,同时提供了基础使用和高级特性示例。重点解决了address协议前缀、配置加载方式等关键点,并比较了Redisson与RedisTemplate的使用差异,帮助开发者顺利完成整合并利用Redisson的高级功能。

gxy03的博客 1992

Spring Boot2.x 整合lettuce redis 和 redisson

前言 springboot2之前redis的连接池为jedis,2.0以后redis的连接池改为了lettuce,lettuce能够支持redis4,需要java8及以上。 lettuce是基于netty实现的与redis进行同步和异步的通信。 lettuce和jedis比较:jedis使直接连接redis server,如果在多线程环境下是非线程安全的,这个时候只有使用连接池,为每个jedis实例增加物理连接...

lgxzzz的博客 3705

Spring Boot 中整合 Redisson 实现分布式锁

在这个示例中,我们使用 Redisson 创建了一个名为 "stock_lock_" + productId 的分布式锁来保护减库存操作。在减库存的过程中,我们首先获取分布式锁,然后再次检查当前库存是否充足,避免因为网络延迟等原因导致的超卖问题。确保在项目中正确配置 Redisson 和 Redis 连接信息,并在关键代码块中使用分布式锁来保护共享资源。使用 Redisson 实现分布式锁:在预减库存的地方使用 Redisson 提供的分布式锁功能,确保在并发情况下只有一个线程能够成功减库存。

qq_61068952的博客 1180
上一篇: Spring Boot整合ActiveMQ
下一篇: Spring Boot整合Neo4j
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值