Всем привет, сегодня опишем возможности Redis, кажется когда…
Всем привет, сегодня опишем возможности Redis, кажется когда разработчик слышит слово «Redis», он сразу представляет себе `GET` и `SET`. Достали данные из тяжелой базы, положили в быструю память, профит. Но у Redis внутри спрятана целая мастерская.
Если вы используете Redis только для кэширования, это как на Ferrari, ездить за хлебом в соседний ларек. Вот несколько сценариев, где Redis раскрывается по-настоящему.
1. Лидерборды, которые не тормозят
Любой геймер знает боль: ты закрыл игру, ждешь обновления таблицы рекоротов, и приложение зависает.
В обычной базе данных посчитать топ-10 игроков из миллиона — это тяжелая операция сортировки. В Redis для этого есть Sorted Sets. Добавление нового счета и запрос топа занимают доли миллисекунды.
2. Распределенные блокировки (Mutex)
Представьте, что у вас работает 10 инстансов одного сервиса. Раз в час им всем нужно запустить тяжелую задачу очистки. Если запустятся все 10 — база ляжет.
Redis позволяет сделать «флажок» с помощью команды `SETNX` (Set if Not Exists). Кто первый успел поставить флажок — тот работает. Остальные видят, что ключ занят, и спят до следующего часа. Это атомарная операция, обмануть ее нельзя.
3. Пого-переменные (Rate Limiting)
Вам нужно ограничить пользователя: не более 10 запросов в секунду.
Вместо того чтобы писать каждую попытку в SQL-базу и считать их там, Redis делает это одной командой через скользящее окно. Это спасает ваши API от перегрузки, когда кто-то решит написать простенький скрипт для парсинга вашего сайта.
4. Настоящая очередь, которая не теряет задачи
Мы уже обсуждали Lists (`LPUSH`/`BRPOP`). Но настоящая магия начинается в Redis Streams. Это мини-Kafka внутри Redis.
Там есть группы потребителей. Если один воркер упал, подобрав задачу, Redis не удалит её. Она будет висеть в статусе «в работе». Другой воркер увидит, что коллега пропал, и заберет «зависшую» задачу себе. Ни одно сообщение не потеряется.
5. Геолокация на лету
В Redis встроены геодвижок. Вы можете закинуть туда координаты всех курьеров в городе и одной командой спросить: «Кто из них ближе всего к клиенту на улице Ленина?». Никаких PostGIS и тяжелых пространственных запросов. Идеально для такси, доставки еды или поиска ближайшего открытого банкомата.
Почему это работает?
Секрет Redis не только в том, что он «in-memory». Секрет в его атомарности. Поскольку Redis однопоточный, он выполняет команды строго по очереди. Вам не нужно бояться, что два процесса одновременно увеличат один и тот же счетчик и получится каша.
Redis — это оперативная память вашего приложения, вынесенная на отдельный сервер. И использовать её можно гораздо изобретательнее, чем просто как хранилище строк.
Если вы используете Redis только для кэширования, это как на Ferrari, ездить за хлебом в соседний ларек. Вот несколько сценариев, где Redis раскрывается по-настоящему.
1. Лидерборды, которые не тормозят
Любой геймер знает боль: ты закрыл игру, ждешь обновления таблицы рекоротов, и приложение зависает.
В обычной базе данных посчитать топ-10 игроков из миллиона — это тяжелая операция сортировки. В Redis для этого есть Sorted Sets. Добавление нового счета и запрос топа занимают доли миллисекунды.
2. Распределенные блокировки (Mutex)
Представьте, что у вас работает 10 инстансов одного сервиса. Раз в час им всем нужно запустить тяжелую задачу очистки. Если запустятся все 10 — база ляжет.
Redis позволяет сделать «флажок» с помощью команды `SETNX` (Set if Not Exists). Кто первый успел поставить флажок — тот работает. Остальные видят, что ключ занят, и спят до следующего часа. Это атомарная операция, обмануть ее нельзя.
3. Пого-переменные (Rate Limiting)
Вам нужно ограничить пользователя: не более 10 запросов в секунду.
Вместо того чтобы писать каждую попытку в SQL-базу и считать их там, Redis делает это одной командой через скользящее окно. Это спасает ваши API от перегрузки, когда кто-то решит написать простенький скрипт для парсинга вашего сайта.
4. Настоящая очередь, которая не теряет задачи
Мы уже обсуждали Lists (`LPUSH`/`BRPOP`). Но настоящая магия начинается в Redis Streams. Это мини-Kafka внутри Redis.
Там есть группы потребителей. Если один воркер упал, подобрав задачу, Redis не удалит её. Она будет висеть в статусе «в работе». Другой воркер увидит, что коллега пропал, и заберет «зависшую» задачу себе. Ни одно сообщение не потеряется.
5. Геолокация на лету
В Redis встроены геодвижок. Вы можете закинуть туда координаты всех курьеров в городе и одной командой спросить: «Кто из них ближе всего к клиенту на улице Ленина?». Никаких PostGIS и тяжелых пространственных запросов. Идеально для такси, доставки еды или поиска ближайшего открытого банкомата.
Почему это работает?
Секрет Redis не только в том, что он «in-memory». Секрет в его атомарности. Поскольку Redis однопоточный, он выполняет команды строго по очереди. Вам не нужно бояться, что два процесса одновременно увеличат один и тот же счетчик и получится каша.
Redis — это оперативная память вашего приложения, вынесенная на отдельный сервер. И использовать её можно гораздо изобретательнее, чем просто как хранилище строк.