springboot redis分布式锁代码实例
这篇文章主要介绍了springbootredis分布式锁代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
随着微服务等分布式架构的快速发展及应用,在很多情况下,我们都会遇到在并发情况下多个线程竞争资源的情况,比如我们耳熟能详的秒杀活动,多平台多用户对同一个资源进行操作等场景等。分布式锁的实现方式有很多种,比如基于数据库、Zookeeper、Redis等,本文我们主要介绍SpringBoot整合Redis实现分布式锁。
工具类如下:
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.data.redis.core.RedisCallback;
importorg.springframework.data.redis.core.RedisTemplate;
importorg.springframework.data.redis.serializer.RedisSerializer;
importorg.springframework.stereotype.Component;
importredis.clients.jedis.Protocol;
importredis.clients.util.SafeEncoder;
importjava.io.Serializable;
@Component
publicclassRedisUtils{
@Autowired
privateRedisTemplateredisTemplate;
publicRedisTemplategetRedisTemplate(){
returnthis.redisTemplate;
}
/**
*设置redis分布式锁
*@paramkey
*@paramvalue
*@paramexpire锁过期时间
*@return
*/
publicbooleantryLock(finalStringkey,finalSerializablevalue,finallongexpire){
booleanisSuccess=(boolean)redisTemplate.execute((RedisCallback)connection->{
RedisSerializervalueSerializer=redisTemplate.getValueSerializer();
RedisSerializerkeySerializer=redisTemplate.getKeySerializer();
Objectobject=connection.execute("set",keySerializer.serialize(key),valueSerializer.serialize(value),SafeEncoder.encode("NX"),SafeEncoder.encode("EX"),Protocol.toByteArray(expire));
returnnull!=object;
});
returnisSuccess;
}
//释放锁
publicbooleanreleaseLock(Stringkey){
returnredisTemplate.delete(key);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。