Ответ
Redis (REmote DIctionary Server) — это высокопроизводительное, резидентное (in-memory) хранилище данных типа «ключ-значение». Его часто называют "сервером структур данных", так как значениями могут быть не только строки, но и более сложные структуры.
Принцип работы:
- In-Memory хранение: Все данные хранятся в оперативной памяти (RAM), что обеспечивает минимальные задержки при чтении и записи (менее миллисекунды).
- Однопоточность: Redis использует однопоточную модель для выполнения команд. Это исключает гонки состояний при доступе к данным и упрощает архитектуру. Сложные операции, такие как сохранение на диск, выполняются в фоновых потоках.
- Персистентность (опционально): Хотя Redis работает в памяти, он может сохранять данные на диск для восстановления после перезапуска. Есть два механизма:
- RDB (Snapshotting): Создание снимков всей базы данных через определенные интервалы.
- AOF (Append-Only File): Запись каждой операции изменения в лог-файл.
Ключевые структуры данных:
- Strings: Строки, числа.
- Lists: Списки элементов, упорядоченные по порядку вставки (идеально для очередей).
- Hashes: Хеш-таблицы для хранения объектов.
- Sets: Неупорядоченные коллекции уникальных строк.
- Sorted Sets: Sets, где у каждого элемента есть вес (score), по которому коллекция отсортирована.
Пример на Go с go-redis
:
// Создание клиента
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
})
// Запись значения с временем жизни 1 час
// 0 - означает без времени жизни (бессрочно)
err := client.Set(ctx, "user:1:session", "some_value", time.Hour).Err()
if err != nil {
panic(err)
}
// Чтение значения
val, err := client.Get(ctx, "user:1:session").Result()
if err == redis.Nil {
fmt.Println("Ключ не найден")
} else if err != nil {
panic(err)
}
Основные сферы применения:
- Кеширование: Кеширование данных из БД, результатов API-запросов.
- Управление сессиями: Хранение сессий пользователей.
- Очереди задач: Реализация простых очередей для фоновых задач (background jobs).
- Pub/Sub: Создание систем обмена сообщениями в реальном времени.
- Счетчики и аналитика: Быстрые атомарные операции (
INCR
) для real-time аналитики.