Как вы используете Redis и для каких задач?

«Как вы используете Redis и для каких задач?» — вопрос из категории Базы данных, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В своих проектах я применял Redis как высокопроизводительное in-memory хранилище данных для нескольких ключевых сценариев:

  1. Кэширование: Самый частый случай. Кэширую результаты тяжёлых 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;
  2. Хранение сессий: Настройка PHP для хранения сессионных данных в Redis (session.save_handler = redis) позволяет сделать приложение stateless и легко масштабировать.
  3. Очереди задач: Использовал структуры данных вроде List для реализации простой очереди задач (например, для отложенной отправки email). Более продвинутый вариант — Redis Streams для гарантированной доставки сообщений.
  4. Счётчики и рейтинги: Благодаря атомарным командам INCR, HINCRBY удобно хранить счётчики просмотров, лайков, онлайн-пользователей.
  5. Pub/Sub для событий: Реализовывал простые системы уведомлений в реальном времени, где один сервис публиковал событие (PUBLISH), а другие подписывались (SUBSCRIBE) на его обработку.

Выбор конкретного сценария зависит от требований к скорости, объёму данных и необходимости их персистентности.