Redisson 分布式锁实现和部分源码解析

一、关于 Redisson

  1. 基于java框架netty进行扩展了的redis客户端
  2. 实现了分布式和可拓展的数据结构
  3. API是线程安全的,所以可以操作单个Redisson连接来完成各种操作
  4. 加锁逻辑都是通过lua脚本来完成的,lua脚本执行能够保证原子性, 锁为可重入锁

二、使用

1. Spring Boot 引入依赖
	<!-- redis -->
	 <dependency>
	 	<groupId>org.springframework.boot</groupId>
	 	<artifactId>spring-boot-starter-data-redis</artifactId>
	 </dependency>
	<dependency>
		<groupId>org.redisson</groupId>
		<artifactId>redisson</artifactId>
		<version>3.11.6</version>
	</dependency>
2. 配置,主要配置方式为

a. 程序化配置
b. JSON 文件引入
c. YAML 文件引入

这里启用第一种配置方式, 更多参数配置参考:Redisson配置方法

package com.sf.vsolution.hn.iwms.redis;


import cn.hutool.core.util.StrUtil;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.config.SingleServerConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class RedissonConfig {
   
   

    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private String port;
    @Value("${spring.redis.timeout}")
    private Integer timeout;
    @Value("${spring.redis.password}")
    private String password;
    @Value("${spring.redis.database}")
    private Integer database;

    // 单节点
    @Bean
	@ConditionalOnProperty(name = "spring.redis.mode", havingValue = "single")
    public RedissonClient getRedisson() {
   
   
        Config config = new Config();
        // 单节点模式
        SingleServerConfig serverConfig = config.useSingleServer().setAddress("redis://" + host + ":" + port)
                .setTimeout(timeout)
                .setDatabase(database);

        if (StrUtil.isNotBlank(password)) {
   
   
            serverConfig.setPassword(password);
        }
        return Redisson.create(config);
    }
    // 集群
    @Bean
	@ConditionalOnProperty(name = "spring.redis.mode", havingValue = "cluster")
    public RedissonClient redissonClientCluster() throws IOException {
   
   
        String[] nodes = urls.split(",");
        for 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值