1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/crossoverJie-distributed-redis-tool

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Распределённый инструмент Redis

Статус сборки codecov Maven Central

Это простой распределённый инструмент, основанный на Redis.

Распределённая блокировка

Распределённое ограничение

Посетите этот сайт для получения дополнительной информации.## Изменения версий

v1.0.3

  • Обновление API.
  • Дополнено аннотациями.
  • Улучшена производительность :zap:.

Контакты

Почта: crossoverJie@gmail.com

weixinchat.jpg

Распределенная блокировка

Функциональные возможности

  • Высокая производительность.
  • Отсутствие мертвыхlocks.

Быстрый старт

М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);

Распределённое ограничение

Возможности

  • Высокая производительность.
  • Native API.
  • Аннотация API.
  • Поддержка Redis Cluster, одиночной версии.
  • Поддержка Spring 4.x+

Быстрый старт

Maven зависимость:

<dependency>
    <groupId>top.crossoverjie.opensource</groupId>
    <artifactId>distributed-redis-tool</artifactId>
    <version>1.0.3</version>
</dependency>
  1. Настройка бин:
@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;
    }
}
  1. Пробел com.crossoverjie.distributed.intercept пакет.
@ComponentScan(value = "com.crossoverjie.distributed.intercept")

Нативная API:

boolean limit = redisLimit.limit();
if (!limit){
    res.setCode(StatusEnum.REQUEST_LIMIT.getCode());
    res.setMessage(StatusEnum.REQUEST_LIMIT.getMessage());
    return res ;
}

Другие апи:

@ControllerLimit

@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

@CommonLimit
public void anyMethod() {}

Может использоваться для любых методов.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Распределённые инструменты. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/crossoverJie-distributed-redis-tool.git
git@api.gitlife.ru:oschina-mirror/crossoverJie-distributed-redis-tool.git
oschina-mirror
crossoverJie-distributed-redis-tool
crossoverJie-distributed-redis-tool
master