1 pom
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.11.5</version>
</dependency>
2 使用
import org.redisson.api.RedissonClient;
@Resource
private RedissonClient redissonClient;
加锁
RLock lock = redissonClient.getLock("key");
// 获得锁5s后自动解锁
lock.lockInterruptibly(5L, TimeUnit.SECONDS);
try{
// 业务代码
}finally {
try{
lock.unlock();
}catch (Exception e){
log.error("解锁失败", e);
}
}
3 记录一个问题:redis分布式锁与spring-session-data-redis冲突问题分析
security使用redis做session存储
加入redisson后导致redisson的hash slot计算出错:CROSSSLOT Keys in request don't hash to the same slot……
解决:
@EnableRedisHttpSession(redisNamespace = "{spring:session}")
原理:
1 当mget/mset批量操作时,集群环境下需要Hash Tag:{}包裹主体key值计算,例如:{a:b:c:}111,{a:b:c:}222
2 当SpringSecurity集成redis做session时,会处理批量操作,所以会出现此错误(猜测)