Когда использовать хранилище ключей / значений, такое как Redis, вместо / вдоль стороны базы данных SQL?

166

Я читал замечательные вещи о хранилищах ключей / значений, таких как Redis, но не могу понять, когда пришло время использовать его в приложении.

Скажем, я проектирую веб-приложение; Я знаю, какой стек я собираюсь использовать для внешнего интерфейса, серверной части, базы данных и т. Д., В каких случаях я бы сказал: «О, нам также нужен Redis для X, Y или Z».

Я был бы признателен за примеры node.js, а также не-node.js.

Крис Абрамс
источник

Ответы:

102

Я не могу понять, когда пришло время использовать его в приложении.

Я бы порекомендовал вам прочитать этот учебник, который также содержит примеры использования. Поскольку Redis ориентирован скорее на память, он действительно хорош для часто обновляемых данных в реальном времени, таких как хранилище сеансов, база данных состояний, статистика, кеширование и его расширенные структуры данных, что обеспечивает универсальность для многих других сценариев.

Redis, однако, не является заменой NoSQL для классических реляционных баз данных, поскольку он не поддерживает многие стандартные функции мира RDBMS, такие как запросы ваших данных, которые могут замедлить их. Замена - это, скорее, базы данных документов, такие как MongoDB или CouchDB, и Redis отлично дополняет определенные функции, где удобна скорость и поддержка расширенных структур данных.

yojimbo87
источник
3
Учебник, на который вы ссылаетесь, потрясающий!
Крис Абрамс
5
Я быстро выполнил поиск в Google по URL этого учебного сайта и натолкнулся на это как на первое место - slideshare.net/dvirsky/introduction-to-redis-version-2
Пол
66

Я думаю, что ничто не объясняет лучше варианты использования Redis, чем эта статья: http://antirez.com/post/take-advantage-of-redis-adding-it-to-your-stack.html

Бьюсь об заклад, у вас будет ага! момент . ;)

Цитата из предыдущего читателя:

Я читал о Redis раньше и слышал, как компании используют его, но так и не понял полностью его назначение. Прочитав это, я могу сказать, что теперь понимаю Redis и насколько он полезен. Удивительно, что, услышав так много об этом, все это заняло относительно простую статью.

Цитата из статьи:

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

Примеры использования, к которым относится статья:

  • Медленные списки последних товаров на вашей домашней странице
  • Таблицы лидеров и связанные с ними проблемы
  • Порядок по голосам и времени пользователя
  • Реализация истекает на предметы
  • Подсчет вещей
  • Уникальные N предметов за заданный промежуток времени
  • Анализ в реальном времени того, что происходит: статистика, антиспам или что-то еще
  • Pub / Sub
  • Очереди
  • Кэширование
zenw0lf
источник
Эта статья очень полезна, у меня есть то, что я хотел знать
Hos Mercury
@ Zenw0lf Redis все еще лучше для простого кэширования? Ваш пост за 2011 год, так что не уверен, что я должен использовать что-то еще.
Moondra
@Moondra Да, проект все еще очень жив, и его создатель делает частые выпуски. Это все еще превосходный проект для различных сценариев использования!
zenw0lf
@ zenw0lf Хорошая статья, но я все еще немного запутался в некоторых случаях использования. Например, вариант использования «последний элемент», почему лучше добавить Redis в этом случае? то, что находится в базе данных, мы добавляем в конкретную таблицу, чтобы иметь идентификатор пользователя, комментарий (идентификатор) и / или метку времени, и использовать это напрямую. Не будет ли это так же?
Тони Лин
1
@TonyLin И то и другое, это быстро, потому что это в памяти и потому, что Redis также имеет довольно хорошую реализацию передовых моделей данных, чтобы помочь ему выполнить свою работу как можно лучше.
zenw0lf
9
  • Я хотел бы использовать Redis в проектах в реальном времени. Я недавно сделал для одной системы отслеживания GPS, которая ранее была построена на MySQL в качестве базы данных.

    ПРЕИМУЩЕСТВО

    1. Каждый раз, когда трекер транслирует данные, мне не нужно открывать MySQL соединение и сохранять на нем. Мы можем сохранить его на Redis, а затем перенести на MySQL, используя другой процесс. Это позволит избежать одновременного подключения от нескольких трекеров к MySQL.
    2. Я могу опубликовать все эти данные GPS, а другие клиенты (Javascript / Android) могут подписаться в режиме реального времени, используя очередь сообщений на основе Redis
    3. Я могу активировать оповещения в реальном времени
Sumit
источник
3

Одно дело, что Redis не является реляционной базой данных. Если вам понадобится SQL «JOIN», вам не нужно будет использовать Redis или любую другую нереляционную базу данных. Redis быстрее, чем большинство реляционных баз данных. Если вы собираетесь выполнять только пару ключей: значение, тогда вы захотите использовать Redis.

EhevuTov
источник
Так, например, было бы хорошо использовать redis для получения информации о сеансе пользователя, чтобы быстрее получить доступ к имени, электронной почте, идентификатору и т. Д.?
Крис Абрамс
Я бы так подумал. Думаю, Киотский кабинет будет еще быстрее.
EhevuTov