目录
目录
1、加锁实现关键:
Redis的setNX命令
2、分布式加锁实现方式:
1)先加锁,加所有执行程序,程序执行完毕通过finally模块关闭锁。弊端:如果程序在执行finally之前程序异常崩溃锁将不会被释放
2)先加锁,加锁成功后进行过时操作,当并发量达到一定程度那么程序很可能会变慢,如原设置加锁时长为30秒,如果程序运行超过30秒,那么锁将被提前释放, 下一个线程将可以和上个线程同时操作,并且并发量足够大这种情况将一直存在,此时相当于锁失效
3)同时加锁并设置加锁时间,当并发量达到一定程度那么程序很可能会变慢,如原设置加锁时长为30秒,如果程序运行超过30秒,那么锁将被提前释放,下一个线程将可以和上个线程同时操作,并且并发量足够大这种情况将一直存在,此时相当于锁失效
4)redisson加锁:加锁、锁时长配置为原子性同步执行,,并且如果遇见大并发量造成的程序运行超过指定加锁时长会对线程的锁进行弹性续时,如果程序正常运行时长没超过加锁时长将按照程序运行时长正常释放锁
一、pom.xml配置
spring-data-redis:redis基本连接,redisTempldate操作等依赖
redisson:分布式锁依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.5.0</version>
</dependency>
二、application.properties配置
## redis setting
spring.redis.host=127.0.0.1
spring.redis.password=123456
spring.redis.port=6379
## redis lettuce pool setting
spring.redis.lettuce.pool.max-active=20
spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.min-idle=5
三、redisson的java配置类
package com.leadpms.qianlistandard.web.config;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Redisson 配置类
*
* @author Shaoyu Liu
* @date 2021/6/2 16:31
**/
@Configuration
public class RedissonConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private String port;
@Value("${spring.redis.password}")
private String password;
@Bean
public RedissonClient getRedisson() {
Config config = new Config();
config.useSingleServer().setAddress("redis://" + host + ":" + port).setPassword(password);
//添加主从配置
// config.useMasterSlaveServers().setMasterAddress("").setPassword("").addSlaveAddress(new String[]{"",""});
return Redisson.create(config);
}
}<