Какую проблему решал с помощью Redis

Ответ

Redis часто использую для кеширования результатов тяжёлых запросов к БД или API, чтобы ускорить работу приложения. Например, кеширование списка товаров в интернет-магазине:

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$cacheKey = 'popular_products';
if (!$products = $redis->get($cacheKey)) {
    $products = $db->query('SELECT * FROM products ORDER BY views DESC LIMIT 10')->fetchAll();
    $redis->setex($cacheKey, 3600, serialize($products)); // Кеш на 1 час
} else {
    $products = unserialize($products);
}

Также Redis отлично подходит для:

  • Очередей задач (через LIST)
  • Хранения сессий
  • Реализации блокировок (мьютексы)
  • Счетчиков (INCR/DECR)
  • Pub/Sub для событийной архитектуры

Главные преимущества - скорость работы (in-memory) и богатый набор структур данных.

Ответ 18+ 🔞

Да ты посмотри, какой умный! Ну прям взял и притащил сюда Redis, как будто это панацея от всех бед. Ладно, слушай сюда, сейчас разложу по полочкам, но без соплей.

Вот смотришь на этот код и думаешь: «Ёпта, гений!». А на деле-то что? Обычная история — бензин хавает как не в себя, а отдача — хуй с горы. Берёшь тяжёлый запрос к базе, который тормозит, как смерд пердящий в пробке, и суёшь его в Redis. Логика проще пареной репы: нет в кеше — грузим из базы и кладём на час; есть в кеше — забираем оттуда. И всё, приложение летает, пользователи довольны, а ты — молодец. Чистая магия, блядь.

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$cacheKey = 'popular_products';
if (!$products = $redis->get($cacheKey)) {
    $products = $db->query('SELECT * FROM products ORDER BY views DESC LIMIT 10')->fetchAll();
    $redis->setex($cacheKey, 3600, serialize($products)); // Кеш на 1 час
} else {
    $products = unserialize($products);
}

Но это, дружок, только цветочки. Эта штука — она как хитрая жопа, умеет гораздо больше, чем кажется. Смотри, на что ещё способен этот зверь:

  • Очереди задач (через LIST) — Представь, тебе надо отправить десять тысяч писем. Если делать это прямо в запросе, пользователь сдохнет от ожидания. А ты кидаешь задачи в список Redis и потом потихоньку их обрабатываешь фоновым воркером. Красота, да и только.
  • Хранение сессий — Особенно если у тебя несколько серверов. Сессии в Redis — и никакой головной боли, где какой пользователь был. Всё в одной куче, быстро и удобно.
  • Реализация блокировок (мьютексы) — Чтобы два процесса не налетели, как гомосеки на одного пацана, и не начали одновременно менять одни и те же данные. Поставил блокировку — и спи спокойно.
  • Счетчики (INCR/DECR) — Лайки, просмотры, онлайн-пользователи. Всё что угодно, что нужно быстро увеличивать или уменьшать. В базе это делать — просто ебать копать, а тут — раз, и готово.
  • Pub/Sub для событийной архитектуры — Одна часть приложения крикнула в канал, а десяток других её услышали и отреагировали. Мощная штука для всяких уведомлений в реальном времени.

А главные плюсы, из-за которых все его и любят? Скорость, блядь, овердохуища! Всё в оперативке крутится, поэтому отклик — как удар током. И второе — богатый набор структур данных. Не просто «ключ-значение», а списки, множества, хеши, сортированные множества. Прямо как швейцарский нож в мире баз данных.

В общем, инструмент — огонь. Но помни, чувак: если Redis накрылся медным тазом (упал), то и кеша твоего нет. Так что не клади в него то, без чего совсем нельзя жить. А в остальном — да похуй, бери и пользуйся.