tg-me.com/csharpproglib/6028
Last Update:
🛠 Гид по Redis в C#
Представьте, что ваши запросы обрабатываются мгновенно. Для этого можно использовать Redis. Сейчас покажем как это сделать.
1. Устанавливаем
Install-Package StackExchange.Redis
2. Создаём подключение
using StackExchange.Redis;
var redis = ConnectionMultiplexer.Connect("localhost:6379");
IDatabase db = redis.GetDatabase();
3. Базовые операции: SET и GET
// Записываем строку
bool setResult = db.StringSet("user:42:name", "ProgLib");
Console.WriteLine($"SET OK: {setResult}");
// Читаем строку
string name = db.StringGet("user:42:name");
Console.WriteLine($"GET: {name}"); // → ProgLib
StringSet
возвращает true, если всё прошло гладко. StringGet
в случае отсутствия ключа вернёт null.4. Механизм подписки и публикации
Подписчик:
var sub = redis.GetSubscriber();
sub.Subscribe("notifications", (channel, message) => {
Console.WriteLine($"Получено сообщение: {message}");
});
Публикация:
sub.Publish("notifications", "Новый заказ №128");
5. Дополнительно: списки, хэши и TTL
Пушим и читаем из конца/начала:
db.ListRightPush("tasks", "Сделать отчёт");
var task = db.ListLeftPop("tasks");
Группируем поля в одном ключе:
db.HashSet("session:1001", new HashEntry[] {
new HashEntry("userId", 42),
new HashEntry("expiresAt", DateTime.UtcNow.AddMinutes(30).ToString("O"))
});
var expires = db.HashGet("session:1001", "expiresAt");
TTL для удаления ключей через время:
db.StringSet("cache:item:7", "данные", TimeSpan.FromMinutes(5));
Бонус: бест практис
• ConnectionMultiplexer — тяжёлый объект, создавайте один раз.
• Используйте ConfigureAwait(false) и ловите исключения RedisConnectionException.
• Выполняйте атомарные операции на стороне сервера для консистентности.
• При росте нагрузки переходите на кластерный режим или Redis Sentinel для отказоустойчивости.
В будущем Redis становится центром событийной архитектуры: Stream-поддержка и геоданные открывают новые горизонты.