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

OSCHINA-MIRROR/sense7-spring-redis-distributed-lock

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

spring-redis-distributed-lock

Введение

spring-redis-distributed-lock — расширение проекта redisLock.

Это основанный на Redis распределённый замок, который можно применять в проектах SpringBoot с несколькими узлами для предотвращения повторных вызовов бизнес-логики.

Он прост и удобен в использовании: достаточно добавить аннотации к методам.

Можно настроить блокировку как для одного компьютера, так и для нескольких.

Инструкция по использованию

  1. Добавьте аннотацию @EnableLock в класс SpringBootApplication, чтобы включить блокировку.
  2. Добавьте аннотацию @Lock к методу, для которого требуется блокировка.
  3. Если необходимо, добавьте аннотацию @LockKey к параметрам метода, которые будут использоваться в качестве ключа Redis. Методы с одинаковыми ключами будут конкурировать за одну и ту же блокировку. К одному методу можно добавить несколько аннотаций @LockKey.
@EnableLock
public class XXServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(XXServiceApplication.class, args);
    }
}
@Lock(policy = LockPolicy.Lock, featureParams = MacAddressFeatureParam.class)
public boolean service(@LockKey int id, @LockKey String name) {
    //бизнес-код
}

Описание параметров аннотации @Lock

Имя Тип Значение по умолчанию Примечание
policy LockPolicy Lock Стратегия блокировки. По умолчанию Lock: если блокировка не получена, сразу возвращается; SpinLock: спин-блокировка, которая возвращает значение после достижения таймаута; BlockLock: продолжает вращаться до получения блокировки.
keyPrex String имя класса + имя метода Префикс ключа Redis. Если пусто, используется имя класса и имя метода по умолчанию.
featureParams LockFeatureParam Нет Набор параметров признаков блокировки, которые можно использовать для добавления параметров, не связанных с бизнес-логикой, чтобы различать блокировки и предотвращать конкуренцию блокировок. Можно реализовать LockFeatureParam для расширения пользовательских параметров, отличных от бизнес-логики.
lockTime int 60 Время удержания блокировки в Redis, в секундах.
timetOut long 300 Таймаут спин-блокировки, в миллисекундах.

Примеры кода

Прямое использование
@Lock
public boolean service() {
    //Бизнес-код
}
Использование параметров
@Lock
public boolean service(@LockKey int id) {
    //Бизнес-код
}
Конкуренция между разными процессами на одном компьютере, внедрение MAC-адреса в качестве параметра признака
@Lock(featureParams = MacAddressFeatureParam.class)
public boolean service(@LockKey int id) {
    //Бизнес-код
}
Спин-блокировка с таймаутом 500 мс
@Lock(policy = LockPolicy.SpinLock, timetOut = 500L)
public boolean service(@LockKey int id) {
    //Бизнес-код
}
Блокировка с ожиданием до освобождения
@Lock(policy = LockPolicy.BlockLock)
public boolean service(@LockKey int id) {
    //Бизнес-код
}

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

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

Введение

На основе распределённой блокировки на базе Redis, используется аннотация. Поддерживает несколько узлов; поддерживает блокировку, спин-блокировку; поддерживает различные параметры функций, включая, но не ограничиваясь конкуренцией между разными процессами на одной машине. Развернуть Свернуть
MIT
Отмена

Обновления

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

Участники

все

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

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