项目使用dubbo架构做分布式服务实现的,因为业务的操作流程较长,请求分多部,所以需要保证客户端的请求保证唯一性,目前系统中是是用数据库的锁机制,保证请求的唯一,但是并发量上来的话就回导致数据库的压力较大。
之前研究过使用zookeeper的注册中心,将分布式的请求同步进行,但是跟业务场景不符合,所以可以使用redis的setnx实现并发数据过来的唯一性
代码很简单
public class RedisSyc {
public static void main(String[] args) {
Jedis jedisClient = new Jedis("127.0.0.1", 6379);
//抢到锁的时候可以把value置为相关请求线程的信息,其他的线程则返回业务异常出去
if(jedisClient.setnx("ISLOCK", Thread.currentThread().getName()) == 1){
//business。。。
}else {
throw new RuntimeException("资源竞争异常");
}
}
}