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

OSCHINA-MIRROR/musclechen-disgo

Клонировать/Скачать
README-CN.md 3.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 01:50 ba9c4a3

DisGo: введение

DisGo — это распределённая блокировка на основе Redis, разработанная с использованием языка Golang. Название DisGo происходит от слов «Distributed», «Disco» и «Golang». Надеемся, что написание кода будет таким же гладким, как танцы диско!

Характеристики DisGo

  • Реентерабельная блокировка. DisGo представляет собой реентерабельную блокировку, использующую тип Hash в Redis в качестве блокировки. hash-name — это имя блокировки, hash-key хранит уникальный идентификатор текущего потока, удерживающего блокировку, а hash-value — текущее количество блокировок.

  • Справедливая блокировка. В Golang нет поточно-безопасных очередей, поэтому для удобства DisGo использует ZSet в Redis для имитации очереди. Это обеспечивает справедливый механизм захвата блокировки.

  • Автоматическое продление срока действия. DisGo предлагает функцию автоматического продления срока действия, предотвращая преждевременное освобождение блокировки и возможные ошибки данных.

  • Самовращающийся захват блокировки. DisGo предоставляет функцию самовращающегося захвата блокировки, автоматически повторяя попытки захвата до тех пор, пока блокировка не будет получена или время ожидания не истечёт.

  • Более высокая эффективность. DisGo использует публикацию и подписку Redis. Как только блокировка освобождается, немедленно отправляется сообщение, и затем блокировка получается в соответствии с порядком очереди ожидания.

Процесс получения блокировки DisGo

[Здесь приведён рисунок LockFlowChart.png]

Введение в API DisGo

Получение объекта блокировки

    redisClient := redis.NewClient(&redis.Options{
        Network: "tcp",
        Addr:    "127.0.0.1:6379",
    })
    lock, err := disgo.GetLock(redisClient, "test")

Обычная блокировка (без автоматического продления)

    success, err := lock.Lock(ctx, 5*time.Second, 10*time.Second)

Самовращающаяся блокировка (без автоматического продления)

    success, err := lock.TryLock(ctx, 5*time.Second, 10*time.Second)

Самовращающаяся блокировка (с автоматическим продлением)

    success, err := lock.TryLockWithSchedule(ctx, 5*time.Second)

Снятие блокировки (общее)

    success, err := lock.Release(ctx)

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/musclechen-disgo.git
git@api.gitlife.ru:oschina-mirror/musclechen-disgo.git
oschina-mirror
musclechen-disgo
musclechen-disgo
master