分布式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分布式锁实例的主要内容,如果未能解决你的问题,请参考以下文章