分布式Redis锁并发编程Redis分布式锁实例

Posted 吃素的猎人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式Redis锁并发编程Redis分布式锁实例相关的知识,希望对你有一定的参考价值。

在处理业务代码时,总会遇到多线程对同一资源竞争,此时对已经抢到资源的线程做Lock。

这里暂时先不考虑 是否是公平锁,是否可以重入的情况。

 

给出实现代码,key为加锁的维度。

@Service
public class LockManagementService {
    private static Logger logger = LoggerFactory.getLogger(LockManagementService.class);
    
    @Autowired
    private RedisService redisService;
    
    /**
     * 加分布式锁
     */
    public void getLock(String type,String value){
        String key = type+value;
        Long result = redisService.setnx(key, "00");
        logger.info("{},开始创建分布式锁...",key);
        while(result==0L){
            Long ttl  =redisService.getTtl(key);
            logger.info("{},并发等待中...,剩余过期时间:{} s",key,ttl);
            try {
                Thread.sleep(500L);
            } catch (InterruptedException e) {
                logger.error("分布式锁线程等待出现异常:"+ e.getMessage(),e);
            };
            result = redisService.setnx(key, "00");
        }
        logger.info("{},成功创建分布式锁...",key);
        redisService.setKeyExpire(key, 300);//单位秒
    }
    /**
     * 释放分布式锁
     */
    public void unLock(String type,String value){
        String key = type+value;
        redisService.del(key);
        logger.info("{},成功释放分布式锁...",key);
    }
    
}

 

以上是关于分布式Redis锁并发编程Redis分布式锁实例的主要内容,如果未能解决你的问题,请参考以下文章

Redis简单实践-分布式锁

基于redis的分布式锁实现

基于redis的分布式锁实现

redis 实现并发锁go

redis基于redis实现分布式并发锁

Redis 并发锁