详解Redis分布式锁(图文并茂,手把手搭建服务,代码详解,建议收藏)

本文详细介绍了Redis分布式锁的实现,包括超时问题、RedLock算法以及Redisson的使用。通过代码示例展示了如何使用Redis实现加锁和解锁操作,并讨论了集群环境下分布式锁存在的问题和解决方案。文章还提供了测试案例,帮助读者理解分布式锁的工作机制。
摘要由CSDN通过智能技术生成

3.0.1

org.projectlombok

lombok

cn.hutool

hutool-all

5.3.4

Redis配置文件

package com.lizba.config;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.cache.annotation.CachingConfigurerSupport;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import redis.clients.jedis.JedisPool;

import redis.clients.jedis.JedisPoolConfig;

/**

  •     Redis简单配置文件
    
  • @Author: Liziba

  • @Date: 2021/7/11 11:17

*/

@Configuration

public class RedisConfig extends CachingConfigurerSupport {

protected static final Logger logger = LoggerFactory.getLogger(RedisConfig.class);

@Value(“${spring.redis.host}”)

private String host;

@Value(“${spring.redis.port}”)

private int port;

@Value(“${spring.redis.jedis.pool.max-active}”)

private int maxTotal;

@Value(“${spring.redis.jedis.pool.max-idle}”)

private int maxIdle;

@Value(“${spring.redis.jedis.pool.min-idle}”)

private int minIdle;

@Value(“${spring.redis.password}”)

private String password;

@Value(“${spring.redis.timeout}”)

private int timeout;

@Bean

public JedisPool redisPoolFactory() {

JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();

jedisPoolConfig.setMaxTotal(maxTotal);

jedisPoolConfig.setMaxIdle(maxIdle);

jedisPoolConfig.setMinIdle(minIdle);

JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, null);

logger.info(“JedisPool注入成功!!”);

logger.info(“redis地址:” + host + “:” + port);

return jedisPool;

}

}

application.yml配置文件

server:

port: 18080

spring:

redis:

database: 0

host: 127.0.0.1

port: 6379

timeout: 10000

password:

jedis:

pool:

max-active: 20

max-idle: 20

min-idle: 0

获取锁与释放锁代码

package com.lizba.utill;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import redis.clients.jedis.Jedis;

import redis.clients.jedis.JedisPool;

import redis.clients.jedis.params.SetParams;

import java.util.Arrays;

import java.util.concurrent.TimeUnit;

/**

  •   Redis分布式锁简单工具类
    
  • @Author: Liziba

  • @Date: 2021/7/11 11:42

*/

@Service

public class RedisLockUtil {

private static Logger logger = LoggerFactory.getLogger(RedisLockUtil.class);

/**

  • 锁键 -> key

*/

private final String LOCK_KEY = “lock_key”;

/**

  • 锁过期时间 -> TTL

*/

private Long millisecondsToExpire = 10000L;

/**

  • 获取锁超时时间 -> get lock timeout for return

*/

private Long timeout = 300L;

/**

  • LU
  • 23
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值