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 )