1.使用Redission实现分布式锁
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.8.2</version>
</dependency>
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;
@Configuration
public class RedissonConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private String port;
@Bean
public RedissonClient getClient() {
Config config = new Config();
config.useSingleServer().setAddress("redis://"+host+":"+port);
RedissonClient redisson = Redisson.create(config);
return redisson;
}
}
- 在需要加锁的函数中添加代码(registerUser(message)为主函数),最后在finally中释放锁
try {
boolean tryLock = lock.tryLock(2, 8, TimeUnit.SECONDS);
if (tryLock) {
registerUser(message);
}
} catch (Exception e) {
log.error("redission error e:{} ", e);
e.printStackTrace();
} finally {
lock.unlock();
}
}