码迷,mamicode.com
首页 > 其他好文 > 详细

redis锁的实现

时间:2020-01-03 10:47:44      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:als   链接   star   data-   pre   delete   abs   owa   val   


redisjar引用
   <!-- redis工具类 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        <!-- 去掉下面这个,是因为在高并发调用redis时,如果你用的jedis的方式连接,大量连接redis就会出现连接不上redis的错误 --> <exclusions> <exclusion> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency>

 

springboot配置文件,我这个是yml的配置文件,(下面是集群的redis,如果是单个的就加host和port,以及密码这些)
spring:
  redis:
    # redis密码,如果是集群,所有密码必须一致
    password:
    jedis:
      pool:
        # 连接池最大连接数(使用负值表示没有限制)
        max-active: 8
        # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: -1
        # 连接池中的最大空闲连接
        max-idle: 8
        # 连接池中的最小空闲连接
        min-idle: 0
    # 链接超时时间(毫秒)
    timeout: 30000
    # redis集群配置
    cluster:
      # redis集群所有的服务器
      nodes: 10.5.9.140:7000,10.5.9.140:7001,10.5.9.140:7002
      # 跨集群执行命令时要遵循的最大重定向数量
      max-redirects: 3

 



redis初始化连接工具
      //   
    private RedisTemplate redisTemplate;


    // 初始化redis连接工具
    @Autowired(required = false)
    public void setRedisTemplate(RedisTemplate redisTemplate) {

        RedisSerializer stringSerializer = new StringRedisSerializer();
        redisTemplate.setKeySerializer(stringSerializer);
        redisTemplate.setValueSerializer(stringSerializer);

        redisTemplate.setHashKeySerializer(stringSerializer);
        redisTemplate.setHashValueSerializer(stringSerializer);
        this.redisTemplate = redisTemplate;

    }

  锁的代码


/**
* 判断是否已经锁上 true 表示已经上锁 flase表示没有上锁
*/
public boolean isLock(String key) {
try {
Object object = redisTemplate.opsForValue().get(key);
if (object != null) {
return true;
} else {
return false;
}
} catch (Throwable e) {
log.error("[redis分布式锁] 获取锁异常, {}", key);
}
return false;
}

/**
* 加锁
* @param key
* @param value 随便存储一个值,也可以不用存储
* @return
*/
public boolean lock(String key, String value) {
//SETNX命令, 可以设置返回true, 不可以返回false
try {
if (StringUtils.isBlank(value)) {
value = "1";
}
// 这个方法表示,如果这个key值存在就不更新值
if (redisTemplate.opsForValue().setIfAbsent(key, value)) {
return true;
}
} catch (Throwable e) {
log.error("[redis分布式锁] 加锁异常, {}", key);
}

return false;
}

/**
* 解锁
*/
public boolean unLock(String key) {
try {
Object object = redisTemplate.opsForValue().get(key);
if (object != null) {
return redisTemplate.opsForValue().getOperations().delete(key);
}
} catch (Throwable e) {
log.error("[redis分布式锁] 解锁异常, {}", key);
}
return false;
}

个人心得记录,如果其他观点,欢迎一起指点,讨论学习

redis锁的实现

标签:als   链接   star   data-   pre   delete   abs   owa   val   

原文地址:https://www.cnblogs.com/LMDclg/p/12143399.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!