Это простой распределённый инструмент, основанный на Redis.
Посетите этот сайт для получения дополнительной информации.## Изменения версий
Почта: crossoverJie@gmail.com
Мaven зависимость:
<dependency>
<groupId>top.crossoverjie.opensource</groupId>
<artifactId>distributed-redis-tool</artifactId>
<version>1.0.3</version>
</dependency>
Настройка бин:
@Configuration
public class RedisLockConfig {
@Bean
public RedisLock build(){
// Необходимо получить соединение с Redis
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 = "ключ";
String request = UUID.randomUUID().toString();
try {
boolean lockTest = redisLock.tryLock(key, request);
if (!lockTest) {
System.out.println("Ошибка при получении блока");
return;
}
// выполнение действий
} finally {
redisLock.unlock(key, request);
}
}
redisLock.lock(String key, String request);
```#### Блокирующий замок с пользовательским временем блокировки
```java
redisLock.lock(String key, String request, int blockTime);
Maven зависимость:
<dependency>
<groupId>top.crossoverjie.opensource</groupId>
<artifactId>distributed-redis-tool</artifactId>
<version>1.0.3</version>
</dependency>
@Configuration
public class RedisLimitConfig {
private Logger logger = LoggerFactory.getLogger(RedisLimitConfig.class);
@Value("${redis.limit}")
private int limit;
@Autowired
private JedisConnectionFactory jedisConnectionFactory;
@Bean
public RedisLimit build() {
RedisLimit redisLimit = new RedisLimit.Builder(jedisConnectionFactory, RedisToolsConstant.SINGLE)
.limit(limit)
.build();
return redisLimit;
}
}
com.crossoverjie.distributed.intercept
пакет.@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 ;
}
Другие апи:
@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;
}
```Используется для `@RequestMapping`.
#### **@SpringControllerLimit**
Если вы используете нативный Spring:
```java
@SpringControllerLimit(errorCode = 200, errorMsg = "ограничение запроса превышено")
@RequestMapping("/createOptimisticLimitOrderByRedis/{sid}")
@ResponseBody
public String createOptimisticLimitOrderByRedis(@PathVariable int sid) {
logger.info("sid=[{}]", sid);
int id = 0;
try {
id = orderService.createOptimisticOrderUseRedis(sid);
} catch (Exception e) {
logger.error("Exception", e);
}
return String.valueOf(id);
}
Spring xml:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.crossoverjie.distributed.intercept.SpringMVCIntercept"/>
</mvc:interceptor>
</mvc:interceptors>
@CommonLimit
public void anyMethod() {}
Может использоваться для любых методов.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )