This is a simple distributed tools based on Redis.
Visit this website for more information.
Mail: [email protected]
- High performance.
- No deadlock.
- Support Redis cluster, single.
- Non-blocking lock.
- blocking lock.
maven dependency:
<dependency>
<groupId>top.crossoverjie.opensource</groupId>
<artifactId>distributed-redis-tool</artifactId>
<version>1.0.2</version>
</dependency>
Set bean:
@Configuration
public class RedisLockConfig {
@Bean
public RedisLock build(){
//Need to get Redis connection
RedisLock redisLock = new RedisLock() ;
HostAndPort hostAndPort = new HostAndPort("127.0.0.1",7000) ;
JedisCluster jedisCluster = new JedisCluster(hostAndPort) ;
RedisLock redisLock = new RedisLock.Builder(jedisCluster)
.lockPrefix("lock_test")
.sleepTime(100)
.build();
return redisLock ;
}
}
@Autowired
private RedisLock redisLock ;
public void use() {
String key = "key";
String request = UUID.randomUUID().toString();
try {
boolean locktest = redisLock.tryLock(key, request);
if (!locktest) {
System.out.println("locked error");
return;
}
//do something
} finally {
redisLock.unlock(key,request) ;
}
}
redisLock.lock(String key, String request);
redisLock.lock(String key, String request,int blockTime);
- High performance.
- native API.
- Annation API.
- Support Redis cluster, single.
- Suppport Spring4.x+
maven dependency:
<dependency>
<groupId>top.crossoverjie.opensource</groupId>
<artifactId>distributed-redis-tool</artifactId>
<version>1.0.2</version>
</dependency>
- Set bean:
@Configuration
public class RedisLimitConfig {
@Value("${redis.limit}")
private int limit;
@Autowired
private JedisConnectionFactory jedisConnectionFactory;
@Bean
public RedisLimit build() {
//Need to get Redis connection
RedisClusterConnection clusterConnection = jedisConnectionFactory.getClusterConnection();
JedisCluster jedisCluster = (JedisCluster) clusterConnection.getNativeConnection();
RedisLimit redisLimit = new RedisLimit.Builder<>(jedisCluster)
.limit(limit)
.build();
return redisLimit;
}
}
- Scan
com.crossoverjie.distributed.intercept
package.
@ComponentScan(value = "com.crossoverjie.distributed.intercept")
boolean limit = redisLimit.limit();
if (!limit){
res.setCode(StatusEnum.REQUEST_LIMIT.getCode());
res.setMessage(StatusEnum.REQUEST_LIMIT.getMessage());
return res ;
}
Other apis:
@ControllerLimit
public BaseResponse<OrderNoResVO> getOrderNoLimit(@RequestBody OrderNoReqVO orderNoReq) {
BaseResponse<OrderNoResVO> res = new BaseResponse();
res.setReqNo(orderNoReq.getReqNo());
if (null == orderNoReq.getAppId()){
throw new SBCException(StatusEnum.FAIL);
}
OrderNoResVO orderNoRes = new OrderNoResVO() ;
orderNoRes.setOrderId(DateUtil.getLongTime());
res.setCode(StatusEnum.SUCCESS.getCode());
res.setMessage(StatusEnum.SUCCESS.getMessage());
res.setDataBody(orderNoRes);
return res ;
}
Used for @RequestMapping
.
@CommonLimit
public void anyMethod(){}
It can be used for any Methods.