Redis кеш vs використання пам'яті безпосередньо


141

Я ще не використовував Redis, але чув про це і планую спробувати його як зберігання кешу.

Я чув, що Redis використовує пам'ять як базу даних сховища кеш-пам'яті, тож яка різниця, якщо я використовую змінну як об’єкт або тип даних словника для зберігання даних? подібно до:

var cache = {
    key: {

    },
    key: {

    }
    ...
}

Яка перевага має Redis?

Відповіді:


221

Redis - віддалений сервер структури даних. Це, звичайно, повільніше, ніж просто зберігання даних у локальній пам'яті (оскільки це передбачає зворотні переходи сокета для отримання / зберігання даних). Однак це також приносить деякі цікаві властивості:

  • До Redis можна отримати доступ до всіх процесів ваших додатків, можливо, він працює на декількох вузлах (чогось локальна пам'ять не може досягти).

  • Зберігання пам’яті Redis є досить ефективним і проводиться в окремому процесі. Якщо програма працює на платформі, у пам'яті якої зібрано сміття (node.js, java тощо), це дозволяє обробляти набагато більший кеш-пам'ять пам'яті. На практиці дуже великі купи не справляються із зібраними сміттями мовами.

  • Redis може зберігати дані на диску, якщо потрібно.

  • Redis - це трохи більше, ніж простий кеш: він пропонує різні структури даних, різні політики виселення предметів, блокування черг, паб / суб, атомність, сценарії Lua тощо.

  • Redis може повторити свою діяльність за допомогою механізму master / slave для того, щоб реалізувати високу доступність.

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


5
З вашого останнього пункту, особливо, здається, що такі речі, як Rlite, є трохи безглуздими - магазин словників був би таким же підходящим у більшості випадків використання, коли у вас є один процес. Це так?
naught101

1
Так. ІМО інтерес Rlite досить обмежений.
Didier Spezia

дякую за ці підказки, тому Redis чудово масштабує, але я припускаю, що у випадку простого чат-ап з середнім об'єктом 300 - 500 для отримання пам'яті, структура даних в пам'яті зробить цю роботу дуже добре, якщо не швидше, ніж ці невелика кількість?
Веб-жінка

2
@DidierSpezia very large heaps do not perform well with garbage collected languagesВи можете пояснити, чому?
roottraveller

1
@roottraveller, я вважаю, це тому, що процес збору сміття, як правило, повинен перервати виконання вашої програми ("стоп-світ"), щоб звільнити купу пам'яті, і чим більша купа, тим довше ця перерва зазвичай триває.
Regorsmitz

3

В даний час нас більше приваблює архітектура без сервера, де кожен запит може переходити до іншого контейнера. У цьому випадку redis може зіграти дуже важливу роль.

Ми не можемо використовувати простий кеш на сервері менше, оскільки не можемо бути впевнені, що наш запит подається в тому ж контейнері, де зберігається наш простий кеш.

У цьому випадку ми повинні використовувати Redis, оскільки він зберігає кеш у віддаленому місці, і ми можемо отримати доступ до того, що навіть контейнер змінюється в архітектурі сервера.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.