Ответ
В своих проектах я применял Redis как высокопроизводительное in-memory хранилище данных для нескольких ключевых сценариев:
-
Кэширование: Самый частый случай. Кэширую результаты тяжёлых SQL-запросов, вычислений или ответов внешних API.
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); $cacheKey = 'user_profile:' . $userId; if ($data = $redis->get($cacheKey)) { return unserialize($data); // Данные из кэша } $data = fetchUserProfileFromDb($userId); // Дорогой запрос к БД $redis->setex($cacheKey, 300, serialize($data)); // Кэшируем на 5 минут return $data; - Хранение сессий: Настройка PHP для хранения сессионных данных в Redis (
session.save_handler = redis) позволяет сделать приложение stateless и легко масштабировать. - Очереди задач: Использовал структуры данных вроде List для реализации простой очереди задач (например, для отложенной отправки email). Более продвинутый вариант — Redis Streams для гарантированной доставки сообщений.
- Счётчики и рейтинги: Благодаря атомарным командам
INCR,HINCRBYудобно хранить счётчики просмотров, лайков, онлайн-пользователей. - Pub/Sub для событий: Реализовывал простые системы уведомлений в реальном времени, где один сервис публиковал событие (
PUBLISH), а другие подписывались (SUBSCRIBE) на его обработку.
Выбор конкретного сценария зависит от требований к скорости, объёму данных и необходимости их персистентности.