Redisson实现方案

简介: Redisson方式1引入依赖

Redisson

方式1

引入依赖

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

配置文件application.properties

自定义配置

redisson.url=redis://127.0.0.1:6379

配置类

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RedissonConfig {
    @Value("${redisson.url}")
    private String redisUrl;
    @Bean
    public RedissonClient getRedissonClient(){
        Config config = new Config();
        config.useSingleServer().setAddress(redisUrl);
        return Redisson.create(config);
    }
}

使用

import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DemoService {
    @Autowired
    private RedissonClient redissonClient;
    public void doSomething(){
        RLock lock = redissonClient.getLock("lock_key");
        try {
            lock.lock();
            // TODO 业务逻辑
        } finally {
            lock.unlock();
        }
    }
}

方式2:

依赖

<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>3.15.1</version>
</dependency>

配置文件application.properties(这种方式完全兼容SpringBoot配置)

spring.redis.host=127.0.0.1

spring.redis.port=6379

使用

import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DemoService {
    @Autowired
    private RedissonClient redissonClient;
    public void doSomething(){
        RLock lock = redissonClient.getLock("lock_key");
        try {
            lock.lock();
            // TODO 业务逻辑
        } finally {
            lock.unlock();
        }
    }
}

spring-integration-redis

依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-integration</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-redis</artifactId>
</dependency>

配置文件application.properties

spring.redis.host=127.0.0.1

spring.redis.port=6379

配置类

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.integration.redis.util.RedisLockRegistry;
@Configuration
public class RedisLockConfig {
    @Bean
    public RedisLockRegistry redisLockRegistry(RedisConnectionFactory redisConnectionFactory) {
        return new RedisLockRegistry(redisConnectionFactory, "registry_key");
    }
}

使用

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.integration.redis.util.RedisLockRegistry;
import org.springframework.stereotype.Service;
import java.util.concurrent.locks.Lock;
@Service
public class DemoService {
    @Autowired
    private RedisLockRegistry redisLockRegistry;
    public void doSomething(){
        Lock lock = redisLockRegistry.obtain("lock_key");
        try {
            lock.lock();
            // TODO 业务逻辑
        } finally {
            lock.unlock();
        }
    }
}

追加方式:两种方式测试方便合在一块,实际独立的

org.redisson redisson 3.15.1

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RedissonConfig {
    @Bean
    public RedissonClient getRedissonClient() {
        Config config = new Config();
        config.useSingleServer().setAddress("redis://127.0.0.1:6379");
        return Redisson.create(config);
    }
}
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TaskApplication.class)
public class ExceptionTest {
    //way of first
    //redisson-spring-boot-starter-3.13.6.jar
    @Autowired
    private RedissonClient redissonClient;
//    //way of second
//    //lock4j-redisson-spring-boot-starter-2.2.2.jar
//    @Resource
//    private LockTemplate lockTemplate;
    //way of first
    @Test
    public void redisTest() {
        RLock lock = redissonClient.getLock("this_is_key");
        try {
            lock.lock();
            //模拟业务
            Thread.sleep(5000);
        } catch (Exception e) {
            log.warn("e:{}", e);
        } finally {
            lock.unlock();
        }
    }
//    //way of second
//    @Test
//    public void secondTest(){
//        LockInfo lockInfo = null;
//        try {
//            lockInfo = lockTemplate.lock("this_is_second_key", 5000L, 0);
//
//            Thread.sleep(5000);
//        } catch (Exception e) {
//            log.warn("e:{}", e);
//        }
//
//        lockTemplate.releaseLock(lockInfo);
//    }
}

==========第二种



com.baomidou

lock4j-redisson-spring-boot-starter

2.2.2

spring:
  redis:
    host: 127.0.0.1
    port: 6379


@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TaskApplication.class)
public class ExceptionTest {
//    //way of first
//    //redisson-spring-boot-starter-3.13.6.jar
//    @Autowired
//    private RedissonClient redissonClient;
    //way of second
    //lock4j-redisson-spring-boot-starter-2.2.2.jar
    @Resource
    private LockTemplate lockTemplate;
//    //way of first
//    @Test
//    public void redisTest() {
//        RLock lock = redissonClient.getLock("this_is_key");
//        try {
//            lock.lock();
//            //模拟业务
//            Thread.sleep(5000);
//        } catch (Exception e) {
//            log.warn("e:{}", e);
//        } finally {
//            lock.unlock();
//        }
//    }
    //way of second
    @Test
    public void secondTest(){
        LockInfo lockInfo = null;
        try {
            lockInfo = lockTemplate.lock("this_is_second_key", 5000L, 0);
            Thread.sleep(5000);
        } catch (Exception e) {
            log.warn("e:{}", e);
        }
        lockTemplate.releaseLock(lockInfo);
    }
}

参考:http://t.zoukankan.com/LUA123-p-14516530.html

目录
相关文章
常用图像卷积核类型小结
卷积操作的主要目的就是对图像进行降维以及特征提取; 1.卷积核往往是行数和列数均为奇数的矩阵,这样中心较好定位; 2.卷积核元素的总和体现出输出的亮度,若元素总和为1,卷积后的图像与原图像亮度基本一致;若元素总和为0,则卷积后的图像基本上是黑色,其中较亮的部分往往就是提取出图像的某种特征; 3.滤波实际上就是Same模式的卷积操作,也就是说滤波后图像的大小不变,各种滤镜和照片的风格化就是使用不同的滤波器对图像进行操作。因此卷积核、滤波器本质上都是一个东西; 4.高通滤波器(High Pass Filter, HPF)表示仅允许图像中高频部分(即图片中变化较剧烈的部分)通过,往往用于对图像
|
10月前
|
人工智能 自然语言处理 安全
MCP的核心组件
MCP采用客户端-服务器架构,由MCP主机、客户端和服务器组成。主机承载AI智能体并发起请求;客户端负责请求标准化与安全通信;服务器提供数据、工具和提示,支持AI实时访问外部资源与服务,实现高效交互。
|
10月前
|
人工智能
官宣!阿里云成为大广赛独家AI战略合作伙伴
阿里云携手第18届全国大学生广告艺术大赛,成为独家AI战略合作伙伴。通义万相作为官方AI创作平台,提供文生图、视频生成等视觉能力,并通过“云工开物”计划提供千万级算力支持,助力150万师生实现创意突破,推动AI与艺术设计深度融合。
|
人工智能 Serverless API
云原生应用开发平台CAP:一站式应用开发及生命周期管理解决方案
阿里云的云应用开发平台CAP(Cloud Application Platform)是一款一站式应用开发及应用生命周期管理平台。它提供丰富的Serverless与AI应用模板、高效的开发者工具链及企业级应用管理功能,帮助开发者快速构建、部署和管理云上应用,大幅提升研发、部署和运维效能。
1322 3
|
算法 数据可视化 Python
使用 Python 模拟蒙特卡洛实验
使用 Python 模拟蒙特卡洛实验
834 1
|
计算机视觉 Python
Python中Pillow库的常见用法和代码示例
Pillow是Python中广泛使用的图像处理库,支持丰富的图像操作功能,包括但不限于打开、保存、缩放、裁剪、旋转、调色等。本文通过一系列示例介绍Pillow的基本用法,涵盖图像的加载与显示、尺寸调整、裁剪与旋转、亮度调整、格式转换、滤镜应用、图像合成及像素级操作等。首先需通过`pip install pillow`安装库,随后可通过导入`PIL.Image`等模块开始图像处理任务。无论是初学者还是进阶用户,都能从Pillow提供的强大功能中获益。
1099 0
|
人工智能
阿里上线AI电商工具“绘蛙”,让你的商品第一时间被种草
【2月更文挑战第15天】阿里上线AI电商工具“绘蛙”,让你的商品第一时间被种草
2052 2
阿里上线AI电商工具“绘蛙”,让你的商品第一时间被种草
|
Java API 开发者
针对Java开发者的RESTful API设计与实现指南
本文是一份针对Java开发者的RESTful API设计与实现指南。RESTful API采用表述性状态转移(REST)架构风格,提供无状态、统一接口的服务。在Java中,可通过Spring Boot框架快速构建RESTful API,利用Spring MVC处理HTTP请求,并支持数据绑定、验证及异常处理等功能。此外,还介绍了版本控制、安全性加强、文档编写与测试等最佳实践,帮助开发者打造高性能且可靠的API服务。
539 0
|
Linux
Linux截断文件truncate和ftruncate
truncate()和 ftruncate()系统调用将文件大小设置为 length 参数指定的值。
579 0
Linux截断文件truncate和ftruncate
|
存储 安全 API
对象存储OSS产品常见问题之附件上传后存储存在被窃取的风险如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
834 0

热门文章

最新文章