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

相关文章
|
数据采集 存储 测试技术
Python生成随机数插件Faker的用法
Python生成随机数插件Faker的用法
820 0
|
6月前
|
存储 SQL 监控
SpringBoot- 整合Logback,滚动记录+多文件
`logback-spring.xml` 是 Spring Boot 项目中的日志配置文件,用于定义日志输出格式、级别及存储路径。支持控制台与文件双输出,按时间滚动日志,并分类记录如 SQL、错误、请求参数等信息,便于问题排查与系统监控。
|
Java Spring
Spring Boot利用Spring Data JPA实现排序与分页查询实战(附源码,超详细)
Spring Boot利用Spring Data JPA实现排序与分页查询实战(附源码,超详细)
882 0
|
SQL 存储 数据挖掘
深入了解SQLite3命令:小巧强大的数据库工具
SQLite3是轻量级数据库工具,适用于嵌入式设备和数据分析。它提供交互式shell,无需服务器,易于部署。常用命令如`.schema`显示表结构,`.mode`设置输出格式。示例包括创建数据库`mydatabase.db`,创建表`users`,插入数据并查询。注意动态类型系统、性能限制及SQL注入安全。适合轻量级数据存储和管理。
解析Spring Boot中的配置文件与外部化配置
解析Spring Boot中的配置文件与外部化配置
|
Java 文件存储 Spring
【springboot】logback配置
【springboot】logback配置
638 1
|
存储 JavaScript Java
【已开源】针对 jar 和 vue 一键自动化部署工具,界面好,操作简单!
easy-jenkins是一款对vue和jar的部署工具,操作简单,实行一键部署,内部结构采用流水线形式架构,每次部署,时时提供部署过程,部署记录,界面友好简洁,使用方便,符合用户常规操作
|
XML 数据格式
记一下Shiro重构之ShiroConfig配置文件
记一下Shiro重构之ShiroConfig配置文件
|
XML 消息中间件 架构师
SpringBoot从小白到精通(十二)logback日志配置
Springboot的日志的框架比较丰富,而且Springboot本身就内置了日志功能,不过实际项目中会出现:只记录想要的日志,日志输出到磁盘,按天归档,日志信息同步到其他系统等功能。这些是Springboot本身就内置了日志功能不具备的。所以我推荐使用logback。下面我们就以logback讲讲Spring Boot中的日志收集。
SpringBoot从小白到精通(十二)logback日志配置