基于Redis的分布式锁,Redisson的简单使用和常用配置

介绍

Redisson是一个在Redis基础上实现的Java驻内存数据网格。Redisson提供了使用Redis的最简单最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中的放在处理业务逻辑上。

Redisson官方文档地址:https://github.com/redisson/redisson/wiki

使用

首先在项目中添加Redisson的依赖,如下 我这里使用的是目前github上的最新版本

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

官网文档中的配置说明,可以看到有两种配置方式,程序化配置和yaml配置

我这里选择第一种程序化配置方式,并且配置的是单机节点模式,创建一个配置类如下

package com.vhukze.lockdemo.config;

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;

/**
 * redisson 配置类
 *
 * @author vhukze
 * @date 2023/5/17 - 18:43
 */
@Configuration
public class RedissonConfig {

    @Value("${spring.redis.host}")
    private String host;

    @Value("${spring.redis.port}")
    private String port;

    @Bean
    public RedissonClient redissonClient() {
        // redis 地址为127.0.0.1:6379 时, 可以无需配置 一行代码搞定
//        RedissonClient redisson = Redisson.create();

        Config config = new Config();
        config.useSingleServer().setAddress("redis://" + host + ":" + port);
        return Redisson.create(config);
    }
}

使用时注入Redisson客户端类即可

简单写了一个减库存的操作

原库存为3000,使用jmeter访问3000次这个接口,结果还剩两千多

下面加上Redisson的分布式锁

再次使用jmeter测试,可以看到库存已经减为0了

常用配置

在创建Redisson的配置类时,还有很多其他配置需要了解

上面案例中是配置了单机模式,实际使用中可以还会用到其他几种模式,集群模式 主从模式等等 如下图

其他相关配置

    @Bean
    public RedissonClient redissonClient() {
        // redis 地址为127.0.0.1:6379 时, 可以无需配置 一行代码搞定
//        RedissonClient redisson = Redisson.create();

        Config config = new Config();
        // 使用单机模式
        config.useSingleServer().setAddress("redis://" + host + ":" + port)
                // 指定Redis数据库编号
                .setDatabase(0)
                // 设置Redis用户名和密码
                .setUsername("").setPassword("")
                // 设置连接池最小空闲连接数
                .setConnectionMinimumIdleSize(10)
                // 设置连接池最大线程数
                .setConnectionPoolSize(50)
                // 设置线程超时时间为
                .setIdleConnectionTimeout(60000)
                // 设置客户端程序获取Redis连接的超时时间
                .setConnectTimeout(30000)
                // 设置响应超时时间
                .setTimeout(30000);
                
        return Redisson.create(config);
    }

 还有就是在加锁的时候,可以给锁设置一个过期时间

RLock lock = redissonClient.getLock("lock");
lock.lock(10, TimeUnit.SECONDS);

 推荐阅读:做了个springboot接口参数解密的工具,我给它命名为万能钥匙(已上传maven中央仓库,附详细使用说明)

猜你喜欢

转载自blog.csdn.net/qq_41890624/article/details/130731616