/
afanasevn
/
RedisLab
Обзор
Документация
Войти
/
afanasevn
/
RedisLab
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/RedisLab.Application/Redis/RedisKeyNames.cs
63 строки
3 KB
IBS\NAfanasev
Solution commit
24 июн 2026, 16:45
24 июн 2026, 16:45
bab80b7
Код
Авторство
О чём код?
namespace RedisLab.Application.Redis; /// <summary> /// Соглашения по ключам Redis проекта. /// Namespace помогает избежать коллизий и упрощает invalidation. /// </summary> public static class RedisKeyNames { /// <summary>KPI дашборда (String, JSON, TTL 3 мин).</summary> public const string DashboardKpi = "dashboard:kpi"; /// <summary>TTL ключа dashboard:kpi в секундах (баланс свежести и нагрузки на PG).</summary> public const int DashboardKpiTtlSeconds = 180; /// <summary>Ключ Hash карточки задачи task:{id}.</summary> public static string Task(Guid taskId) => $"task:{taskId}"; /// <summary>TTL Hash task:{id} в секундах.</summary> public const int TaskCardTtlSeconds = 600; /// <summary>Имена полей Hash task:{id}.</summary> public static class TaskHashFields { /// <summary>Заголовок задачи.</summary> public const string Title = "title"; /// <summary>Статус задачи (строка enum).</summary> public const string Status = "status"; /// <summary>Имя исполнителя для отображения.</summary> public const string AssigneeName = "assigneeName"; /// <summary>Due date в ISO или пустая строка.</summary> public const string DueDate = "dueDate"; } /// <summary>Ключ rate limit входа по IP (String counter, TTL 60 сек).</summary> public static string LoginRateLimit(string ip) => $"ratelimit:login:{ip}"; /// <summary>Максимум неудачных login с одного IP за окно.</summary> public const int LoginRateLimitMaxAttempts = 10; /// <summary>Длина окна rate limit в секундах.</summary> public const int LoginRateLimitWindowSeconds = 60; /// <summary>Distributed lock для cron-напоминаний о просроченных задачах.</summary> public const string TaskReminderLock = "lock:task-reminder"; /// <summary>TTL lock:task-reminder в секундах (auto-release при падении инстанса).</summary> public const int TaskReminderLockTtlSeconds = 60; /// <summary>Топ активных пользователей (Sorted Set, member=userId).</summary> public const string LeaderboardTasksCompleted = "leaderboard:tasks-completed"; /// <summary>Канал live-ленты (Pub/Sub).</summary> public const string ActivityFeedChannel = "activity:feed"; /// <summary>Поток уведомлений (Stream, outbox-lite).</summary> public const string NotificationsStream = "notifications:stream"; /// <summary>Consumer group для notifications:stream (XREADGROUP + XACK).</summary> public const string NotificationsConsumerGroup = "notifier"; }