[分布式锁]Redisson关于redis主从模式下面的问题

2个同样的微服务模块

用nginx自带的负载均衡统一端口分发请求

然后3个redis  用主从复制模式 (1主2读)

然后同时[jmeter]500个线程同时请求同一个Api 去拿redis中的200个资源  

还是有重复取数据的步骤的 这是我的测试控制器  

另一个服务模块也是一样的配置 然后只有启动端口不一样

你好,我第一直觉是 tryLock 这个方法使用的问题,查阅了一下文档。

看了官方的api,这个tryLock是会返回布尔结果的。

按照你的写法,tryLock 过了三十秒,代码就会往下执行了。

建议可以延长尝试枷锁的事件,或者试试下面的写法。

// or wait for lock aquisition up to 100 seconds 
// and automatically unlock it after 10 seconds
boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS);
if (res) {
   try {
     ...
   } finally {
       lock.unlock();
   }
}

 

建立一个请求库,根据请求类型分线程逐条执行

除了RedLock   zookeeper

经过资料查询,发现实现方式,只有RedLock 和 zookeeper达到这种要求,但是Redlock的话  多台redis数据还不能有同步协调功能,

最后我这边使用的是一个分布式锁注解,使用aop的方式给方法加锁,但是不支持多redis 如主从架构

https://github.com/redisson/redisson/wiki/8.-distributed-locks-and-synchronizers#81-lock