springboot redis分布式锁代码实例

网友投稿 226 2022-12-17


springboot redis分布式锁代码实例

这篇文章主要介绍了springboot redis分布式锁代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

随着微服务等分布式架构的快速发展及应用,在很多情况下,我们都会遇到在并发情况下多个线程竞争资源的情况,比如我们耳熟能详的秒杀活动,多平台多用户对同一个资源进行操作等场景等。分布式锁的实现方式有很多种,比如基于数据库、Zookeeper、Redis等,本文我们主要介绍Spring Boot整合Redis实现分布式锁。

工具类如下:

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

import org.springframework.data.redis.core.RedisCallback;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.data.redis.serializer.RedisSerializer;

import org.springframework.stereotype.Component;

import redis.clients.jedis.Protocol;

import redis.clients.util.SafeEncoder;

import java.io.Serializable;

@Component

public class RedisUtils {

@Autowired

private RedisTemplate redisTemplate;

public RedisTemplate getRedisTemplate() {

return this.redisTemplate;

}

/**

* 设置redis分布式锁

* @param key

* @param value

* @param expire 锁过期时间

* @return

*/

public boolean tryLock(final String key, final Serializable value, final long expire){

boolean isSuccess = (boolean) redisTemplate.execute((RedisCallback) connection -> {

RedisSerializer valueSerializer = redisTemplate.getValueSerializer();

RedisSerializer keySerializer = redisTemplate.getKeySerializer();

Object object = connection.execute("set",keySerializer.serialize(key),valueSerializer.serialize(value), SafeEncoder.encode("NX"),SafeEncoder.encode("EX"), Protocol.toByteArray(expire));

return null != object;

});

return isSuccess;

}

  //释放锁

public boolean releaseLock(String key){

return redisTemplate.delete(key);

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringCloud turbine监控实现过程解析
下一篇:Java原子变量类原理及实例解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~