Чи запам’ятовується динозавр порівняно з Редісом? [зачинено]


185

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

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

Це звучить дивовижно. Я також знайшов цю сторінку з орієнтирами: http://www.ruturaj.net/redis-memcached-tokyo-tyrant-mysql-compitation

Отже, чесно кажучи - чи справді пам’ятний пам’ять справді той старий динозавр, який є поганим вибором з точки зору продуктивності в порівнянні з цим новачком під назвою Redis?

Я не чув багато про Redis раніше, тим самим підхід до мого питання!



9
цей орієнтир ruturaj насправді не вартий великої уваги
dsomnus

2
Ми почали експериментувати з пам’яттю на роботі, і поки що задоволені. Хоча ми йдемо з Memcache, тож падіння заміни було приємним плюсом: membase.org
jayshao

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

4
Я здивований, що патруль святості ТА не закрив це питання як невідповідне та не корисне.
Dogweather

Відповіді:


74

Memcache - чудовий інструмент все-таки і ДУЖЕ надійний.

замість того, щоб дивитись на це питання з точки зору зниження того, хто швидший в діапазоні <100 мс, подивіться на продуктивність для "класу" програмного забезпечення.

  • Він використовує лише місцевий баран? -> найшвидший
  • Він використовує віддалений таран? -> швидкий
  • Він використовує ram plus hardddisk -> о, шкода.
  • Він використовує лише жорсткий диск -> run!

3
Немає можливості обробляти реплікацію мемашами, про які я знаю. Memcache суто означає, що це кеш. Якщо предмет очищено / загублено, його потрібно відновити. Я раніше цього не використовував і не оцінював, але це може вас зацікавити. code.google.com/p/memagent
Даніель

1
Membase підтримує протокол запам’ятовування, але також стійкість і реплікацію.
Джим Ферранс

1
Нещодавно я побачив зв’язаний Ethernet через 4 порти. 4 х 44 Мб / с. Це робить оперативної пам’яті ще більш цінною, якщо припустити, що ви можете зв’язати мережеву мережу!
Даніель

1
Для подальшої довідки нещодавно з відкритим кодом у Facebook відкрився mcrouter, який додає реплікацію до запам’ятованого. Інші речі також датовані (redis зараз дуже швидкий тощо), але FYI, якщо ви тут п'ять років пізніше ...
dannysauer

ну, який сенс? як не можу зберігати простий direclty JSON масив, найбільш широко використовуваний DATA формат обміну в Інтернеті, я поняття не маю , про що вони думають ... Ой , зачекайте , може бути , я повинен додати ReJSON , тому що нативної не один дбає про JSON в світі права
PirateApp

205

Залежить від того, що вам потрібно, загалом я думаю, що:

  • Ви не повинні занадто дбати про виступи. Redis швидше на одне ядро ​​з малими значеннями, але складований вміє використовувати декілька ядер з одним виконуваним і TCP-портом без допомоги клієнта. Також запам’ятовується швидше з великими значеннями порядку 100k. Нещодавно Redis значно покращив великі значення (нестабільна гілка), але все-таки запам'ятовується швидше в цьому випадку використання. Суть у цьому: ні один, ні інший, ймовірно, не стануть вашим вузьким місцем для запиту за секунду, який вони можуть доставити.
  • Вам слід подбати про використання пам'яті. Для простих пар ключів і значень запам’ятовується ефективніше пам’яті. Якщо ви використовуєте хеди Redis, Redis є більш ефективною пам'яттю. Залежить від випадку використання.
  • Вам слід подбати про стійкість та реплікацію, дві функції доступні лише у Redis. Навіть якщо ваша мета - створити кеш, це допоможе, що після оновлення або перезавантаження ваші дані все ще є.
  • Вам слід подбати про необхідні вам операції. У Redis є багато складних операцій, навіть просто враховуючи випадок використання кешування, ви часто можете зробити набагато більше за одну операцію, не вимагаючи, щоб дані оброблялися на стороні клієнта (іноді потрібно багато вводу-виводу). Ці операції часто такі швидкі, як звичайні GET і SET. Тож якщо вам не потрібно лише GET / SET, але і більш складні речі, Redis може дуже допомогти (подумайте про кешування часової шкали).

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

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


67
+1 для великого розкриття в кінці
NateDSaint

6
Я не впевнений, чи це мовна помилка, але якщо ви ведете свій аргумент із "загалом, я думаю, що вам не слід надто піклуватися про продуктивність", це серйозна причина для занепокоєння. Redis може бути дуже хорошим для певних класів проблем, але, як правило, пам'ять використовується спеціально для вирішення проблем продуктивності з постійними базами даних. Я також вважаю, що яскравим недоліком у вашому списку є зрілість продукту. Memcache - зрілий продукт, що має близько десятиліття досвіду. Redis є багатообіцяючим, але існує лише 3 роки.
DougW

1
@DougW Ви виймаєте цю фразу поза контекстом. Це має набагато більше сенсу, коли ви читаєте фразу, що закриває абзац відразу після: "Справа тут в тому, що: ні той, ні інший, ймовірно, не стануть вашим вузьким місцем для запиту за секунду, який вони можуть доставити"
Діней

83

Отже, чесно кажучи - чи справді пам’ятний пам’ять справді той старий динозавр, який є поганим вибором з точки зору продуктивності в порівнянні з цим новачком під назвою Redis?

  • Порівнюючи набір функцій, тоді Redisє набагато більш функціональним;
  • Порівняти простоту монтажу Redisтакож набагато простіше. Ніяких залежностей не потрібно;
  • Порівняння активного розвитку Redisтакож краще;
  • Я вважаю memcached, це трохи швидше, ніж Redis. Він взагалі не торкається диска;
  • Моя думка, Redisце кращий продукт, ніж memcached.

31
Redis торкається диска лише у тому випадку, якщо ви їм цього скажете. Зазвичай він виконує функцію синхронізації через кожну другу секунду -> ви цього не помітите
Marc Seeger

1
@Marc yup. Я також вірю, що ви можете сказати, щоб він взагалі не торкався диска, але я вважаю, що це завжди завжди ідеально?
Альфред

3
Крім того, на мій досвід, Redis трохи швидше, ніж Memcached (коли використовується Redis в режимі лише пам'яті). Антірез зробив тест тут antirez.com/post/redis-memcached-benchmark.html
Sune Rievers

10
ВЕЛИЧАЯ РІЗНИКА: Memcached багатопотоковий, а Redis - ні. Тож затримка одного запиту порівнянна, Memcached може обслуговувати ще багато запитів, коли паралельність висока. Redis, з іншого боку, досягне свого піку продуктивності лише з кількома одночасними запитами, оскільки використовує лише 1 процесорне ядро ​​/ потік. Запропонований спосіб обійти це - запустити кілька екземплярів Redis на одній машині з послідовним хешуванням, але це дійсно погане рішення. Тож якщо вам потрібна висока конкурентоспроможність і багатоядерний процесор (хто ні), Memcached набагато швидше.
ColinM

2
@Alfred, це не прихований факт, що Redis однопоточний, це авторське рішення (простота над надійністю) автором. Стаття Дастіна, зв'язана вище, є надійним свідченням того, що вона має реальний вплив. Крім того, я підтвердив це у своїх власних орієнтирах, використовуючи Redis як бекенд Zend_Cache; у міру збільшення конкурентоспроможності Редіс буде плато досить швидко порівняно з прихованим.
ColinM

46

Те, що заподіяно Redis, - це найменше нещодавно вилучене значення з кешу. За допомогою запам’ятовування ви можете безпечно встановити скільки завгодно значень, і коли вони переповнять пам’ять, ті, які ви недавно не використовували, будуть видалені. За допомогою Redis ви можете лише наблизити це, встановивши тайм-аут на все; коли йому потрібно звільнити пам'ять, він перегляне три випадкові клавіші та видалить той, який найближчий до закінчення терміну дії.

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



13

Ви також можете поглянути на Membase.

http://www.northscale.com/products/membase_server.html

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

  • Redis має значно більше можливостей для обробки даних (впорядковані набори тощо)
  • Redis має відкладений проект Redis Cluster для додання горизонтальної масштабованості
  • Redis має єдиний рівень завантаження даних на диск (VM) на основі гібридного алгоритму, який враховує як LRU, так і розмір об'єкта.

  • Membase використовує протокол простроченої проводки - корисний як шлях до оновлення для існуючих додатків

  • Membase встановлюється для горизонтального масштабування, використовуючи розподілений хеш-підхід
  • Membase може підтримувати декілька ярусів завантаження даних за допомогою підходу LRU (дуже рідко використовується переходить на диск, дещо рідше передається на SSD, часті речі залишаються в оперативній пам'яті)
  • Не впевнені в можливості TTL в Membase.

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


Привіт Діне, дякую за ваш пост. Я обов'язково це перевіряю. Чи можу я використовувати Membase в PHP?
Промисловий

4
Оскільки Membase використовує протокол зв'язаного
керування

Membase підтримує TTL. Підтримка всіх реалізацій Memcache ставиться із часом закінчення. github.com/memcached/memcached/blob/master/doc/protocol.txt#L79
Saurav

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