Redis кеш против использования памяти напрямую

142

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

Я слышал, что Redis использует память в качестве базы данных кэш-хранилища, так какая разница, если я использую переменную в качестве объекта или словарного типа данных для хранения данных? лайк:

var cache = {
    key: {

    },
    key: {

    }
    ...
}

В чем преимущество Redis?

hh54188
источник

Ответы:

222

Redis - это удаленный сервер структуры данных. Это, конечно, медленнее, чем просто хранить данные в локальной памяти (так как для извлечения / хранения данных используются циклические операции с сокетами). Тем не менее, это также приносит некоторые интересные свойства:

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

  • Память Redis достаточно эффективна и выполняется в отдельном процессе. Если приложение работает на платформе, чья память используется для сбора мусора (node.js, java и т. Д.), Оно позволяет обрабатывать гораздо больший кэш / хранилище памяти. На практике очень большие кучи плохо работают с языками, собираемыми мусором.

  • Redis может сохранить данные на диске, если это необходимо.

  • Redis - это нечто большее, чем простой кеш: он предоставляет различные структуры данных, различные политики удаления элементов, очереди блокировки, pub / sub, атомарность, сценарии Lua и т. Д.

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

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

Дидье Специя
источник
5
Ваше последнее замечание особенно заставляет думать, что такие вещи, как Rlite , немного бессмысленны - хранилище словарей было бы таким же подходящим в большинстве случаев, когда у вас есть один процесс. Это правильно?
naught101
1
Да. ИМО интерес Rlite довольно ограничен.
Дидье Специя
спасибо за эти подсказки, так что Redis отлично подходит для масштабирования, но я предполагаю, что в случае простого приложения chat'а с в среднем 300 - 500 объектами для извлечения в память структура данных в памяти будет очень хорошо работать, если не быстрее, так как маленький номер?
Webwoman
2
@DidierSpezia very large heaps do not perform well with garbage collected languagesвы можете объяснить, почему?
roottraveller
1
@roottraveller, я полагаю, это потому, что процесс сборки мусора обычно должен прерывать выполнение вашего приложения («остановка мира»), чтобы освободить память кучи, и чем больше куча, тем дольше это прерывание обычно длится.
Regorsmitz
3

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

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

В этом случае мы должны использовать redis, так как он хранит кеш в удаленном месте, и мы можем получить доступ к тому, что даже контейнер изменяется в архитектуре без сервера.

Ашиш Байнаде
источник