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

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

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 4.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 00:41 1332688

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 )

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

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