112просмотров
60.2%от подписчиков
24 марта 2026 г.
Score: 123
RedLock.NET. Просто и со вкусом
#dotnet #redis #postgresql Статья разбирает паттерн RedLock и библиотеку RedLock.NET для распределённых блокировок в .NET, сравнивает их с альтернативами (PostgreSQL advisory locks, таблицы в БД и стандартными примитивами .NET). Приведены практические примеры кода, рекомендации по параметрам expiry/wait/retry и замечания по безопасности и производительности. 🔒 RedLock.NET — простая и надёжная реализация на Redis: CreateLockAsync/IsAcquired, expiry должен быть в 5–10× дольше обычного времени операции, а waitTime/retryPeriod задают поведение ожидания. 🐘 PostgreSQL advisory locks (pg_try_advisory_xact_lock) — хорошая альтернатива, автоматически снимаются при завершении транзакции и удобны, если все инстансы уже подключены к общей БД. 🧱 Табличные блокировки через INSERT ... ON CONFLICT с expires_at работают, но требуют ретраев, аккуратной обработки ошибок и могут серьёзно повлиять на производительность при использовании высоких уровней изоляции. ⚠️ Внимание к именам ключей в Redis: не используйте простую маску "{0}", лучше "redlock:service-name:{0}" — иначе возможны коллизии или сторонние SET-операции, которые сломают логику блокировок. 🚀 Производительность и операции: при нагрузке >200 RPS Redis-решение обычно выигрывает; проверяйте безопасность NuGet-пакетов (RedLock.NET 2.3.2 — стабильна) и выбирайте 3–5 попыток проверки блокировки как эмпирическое правило. https://habr.com/ru/articles/988812/ @aStateOfNet