Redis实现可重入分布式锁

可重入分布式锁


使用场景
由于单机应用随着功能和业务越来越复杂导致其越来越臃肿,处理业务变得越来越慢。所以,现在很多大型的网站都选择分而治之,将不同的功能业务进行划分,使用分布式架构管理项目。如果是某个业务的压力特别大,我们这时候还需要集群来减轻服务器的压力。但是随之也会产生有一些问题。比如说现在有两台服务器A和B,他们需要同时对同一数据库
做修改操作,这时候之前的synchronized这些单机锁就无法保证事务的一致性问题。
这时候就需要使用到分布式锁了,由于我对zk的了解不是很多,所以当初项目里就选择了使用redis来实现。你可能会疑问为什么redis可以实现分布式锁?答案是Redis是单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系。下面我就把我的实现方式写一下吧(我第一次呆的公司用到的)。

package com.example.demo.util;

import com.example.demo.constant.RedisKeyConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

/**
 * @author : wulg29230
 * @Date : 2020/3/9 13:20
 **/
@Component
@Slf4j
public class RedisLockUtils {
   
    //锁超时时间1分钟
    private static final long LOCK_TIME_OUT = 60000L;

    //加锁阻塞等待时间
    private static final long THREAD_SLEEP_TIME = 500L;

    @Resource
    private RedisTemplate redisTemplate;
    /**
     * 本地线程池
     */
    private static final ThreadLocal<Map<String,Boolean>> doubleLock = new ThreadLocal<Map<String,Boolean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值