Redis
 sql >> база данни >  >> NoSQL >> Redis

Redis срещу Memcached – Сравнение 2021

Redis означава RE моте DI речник S erver, създаден през 2009 г. от Салваторе Санфилипо. Memcached, от друга страна, е създаден през 2003 г. от Брад Фицпатрик. И Redis, и Memcached са:

  • NoSQL структури от данни в паметта
  • Написано на C
  • Отворен код
  • Използва се за ускоряване на приложенията
  • Поддържа забавяне под милисекунда

През 2014 г. Салваторе написа отлична публикация в StackOverflow за това кога е по-разумно да се използва Memcached от Redis. В тази публикация предоставяме текущо и подробно сравнение между Redis и Memcached, за да можете да направите информиран избор относно използването им във вашето приложение.

Инфографика

Тази публикация е съкратена до инфографиката по-долу. С тази инфографика можете лесно да визуализирате резултатите от това сравнение, за да видите кой е на първо място в различни сценарии. Ако искате да прочетете сравнението в текстов формат, щракнете тук.

Документация

За начало Redis е много по-изчерпателно документиран от Memcached. Това го прави по-лесно за научаване, администриране и използване.

Модел на базата данни

Redis е предимно хранилище за ключови стойности. Докато ключовете са двоични низове, предимството на Redis е, че стойността не е ограничена само до двоични низове. Те могат да бъдат различни структури от данни, които позволяват съхраняване на сложни обекти и осигуряват богат набор от операции над тях. Redis също така осигурява разширяемост чрез Redis модули. Модулите на Redis са разширения, които осигуряват допълнителни структури от данни и функции, които не са налични в основния набор от функции. Ето извадка от няколко функции, които вече са налични като модули:

  • Магазин за документи
  • Графикова СУБД
  • Търсачка
  • СУБД от времеви серии

Memcached е обикновен хранилище за ключови стойности, което поддържа само двоични низове като стойност.

Структури от данни

Както бе споменато по-горе, Redis предлага множество типове структура на данни, което му позволява да бъде изключително гъвкава за използване, включително низове, хешове, списъци, набори, сортирани набори, растерни изображения, битови полета, HyperLogLog, Геопространствени индекси и потоци. Можете да научите повече за тях в тази статия за водещи случаи на използване на Redis по основни типове структура на данни.

Източник на изображение:https://redislabs.com/redis-enterprise/data-structures/

Memcached поддържа само обикновени двоични низове, които са чудесни за данни само за четене, така че ако не се нуждаете от всички звънци и свирки на Redis, Memcached е по-проста база данни за вас за използване.

Ранг и популярност в базата данни

По-голямата популярност на база данни води до по-голяма общност от потребители, повече дискусии и генерирани от потребители уроци и повече помощ и поддръжка чрез инструменти на трети страни като DBaaS платформи и инструменти за анализ, които да ви помогнат да оптимизирате внедряването си.

Redis е 8-ата най-популярна база данни в света към февруари 2021 г. според DB-Engines поради своята простота, богати структури от данни и страхотна документация. Memcached в момента е класиран като 28-ата най-популярна база данни. Когато Redis и Memcached са класирани по отношение на модели на база данни ключ-стойност, Redis е на 1-во място, а Memcached е на 4-то място. Въпреки това, ако търсите само база данни ключ-стойност с отворен код или такава, която може да бъде разгърната на място, Memcached идва на второ място, тъй като Amazon DynamoDB и Microsoft Azure Cosmos DB са и двете търговски бази данни, които могат да бъдат внедрени само в облака.

Архитектура

Redis и Memcached следват клиент-сървър архитектура. Клиентите попълват данните в сървъра под формата на ключ-стойност.

Redis е еднонишков, като от друга страна Memcached има многонишкова архитектура. Memcached мащабира по-добре в система с повече ядра, която може да се справи с повече операции, ако изчислителният капацитет е мащабиран. Въпреки това, повече от един екземпляр на Redis може да бъде иницииран в една и съща система, за да се използват допълнителни ядра.

Леснота на използване

Както е обяснено по-горе в раздела за модел на база данни, Redis, тъй като е многомоделна база данни, може да се използва с всеки тип модел на данни. В Redis е лесно да се пише код, тъй като опростява сложните задачи. Redis има усъвършенствани структури от данни и не се ограничава до прости стойности на низове. Например, ако вашето приложение съхранява данни в набори и искате да следите набори в списък, можете да направите това лесно в Redis. Подобна задача в Memcached не е възможна. Но има и други начини за извършване на същите задачи, които ще изискват повече редове код.

Memcached, от друга страна, съхранява само обикновени стойности на низове. Така че приложението остава да се справи със сложността на структурата от данни.

Разделяне на данни

Redis поддържа разделяне на данни между множество екземпляри на възел. Настоящите потребители на Redis използват различни техники като разделяне на диапазон, хеш разделяне и последователно хеширане за разделяне на данни. В Redis разделянето на данни може да бъде реализирано по три различни начина:

  • Разделяне от страна на клиента
  • Подпомагано от прокси дялове (пример:twemproxy)
  • Разделяне на дялове от страна на сървъра с маршрутизиране на заявки в клъстерните възли

Memcached също поддържа разделяне на данни между множество възли и последователното хеширане е препоръчителен подход, за да се гарантира равномерното разпределение на трафика.

Redis срещу Memcached – Сравнение 2021 Кликнете, за да туитирате

Поддържани езици

Redis поддържа почти всички от най-използваните езици за програмиране, от езици на високо ниво до езици на ниско ниво. Memcached обаче поддържа по-малък брой езици в сравнение с Redis, но поддържа всички популярни езици.

Memcached

  • .Net
  • C
  • C++
  • ColdFusion
  • Erlang
  • Java
  • Lisp
  • Луа
  • OCaml
  • Perl
  • PHP
  • Python
  • Рубин

Redis

  • C
  • C#
  • C++
  • Clojure
  • Кристал
  • Г
  • Дарт
  • Еликсир
  • Erlang
  • Ефектно
  • Върви
  • Haskell
  • Haxe
  • Java
  • JavaScript (Node.js)
  • Lisp
  • Луа
  • MatLab
  • Цел-C
  • OCaml
  • Паскал
  • Perl
  • PHP
  • Пролог
  • Чисти данни
  • Python
  • R
  • Ребол
  • Рубин
  • Ръжда
  • Scala
  • Схема
  • Smalltalk
  • Бърз
  • Tcl
  • Visual Basic

Транзакции

Транзакциите на Redis се изпълняват с трите гаранции по-долу:

  • Транзакциите се сериализират и изпълняват последователно
  • Или всички команди, или нито една, се обработват (атомарни транзакции)
  • Оптимистичното заключване предлага допълнителна гаранция чрез проверка и настройка

Redis гарантира, че всички само една команда от една клиентска машина се изпълняват наведнъж. Всички команди в транзакциите се изпълняват, когато се извика командата „EXEC“, за да се гарантира атомарността.

Memcached, от друга страна, не осигурява управление на транзакциите.

Репликация

Redis предлага проста репликация лидер-последовател (главен-подчинен), която създава точни копия на главните екземпляри, със следните функции:

  • Мастерът продължава да изпраща команди за данни към подчинения, докато са свързани.
  • Ако връзката се прекъсне, подчинената ще последва частична повторна синхронизация, като копира само данните, които са били пропуснати по време на прекъсване на връзката.
  • Ако частичното повторно синхронизиране не е възможно, тогава ще се опита пълно повторно синхронизиране.

Можете също да използвате функциите за висока наличност, Redis Sentinels или Redis Cluster, за разширена защита при отказ при отказ.

Native Memcached не поддържа репликация, но можете да използвате Repcached, безплатна корекция с отворен код, за да постигнете висока наличност за вашето внедряване. Той предлага мулти главна репликация, асинхронна репликация на данни и поддържа всички Memcached команди.

Снимки/постоянство

Снимките са просто изглед само за четене на вашата база данни, каквато е била в определен момент от време. Redis поддържа моментни снимки и по подразбиране Redis запазва моментни снимки на набора от данни на диск в двоичен файл, наречен dump.rdb. Можете ръчно да извикате моментна снимка или да персонализирате честотата или да промените прага за изпълнение на операцията.

Ето двете опции за постоянство, които Redis поддържа:

  • Постоянство на RDB
  • AOF постоянство

RDB означава "Redis Database Backup". Това е компактна моментна снимка на базата данни в определен момент. Заема по-малко място, увеличава максимално производителността на Redis и е добър за възстановяване след бедствие.

AOF означава „Добавяне само на файл“. AOF следи всички команди, които се изпълняват, и в катастрофална ситуация изпълнява повторно командите, за да върне данните. Този метод заема повече място, тъй като всички команди се изпълняват отново и не е много издръжлив метод за моментна снимка.

Memcached от друга страна не поддържа постоянство на диска.

Скриптове от страна на сървъра

Lua е вграденият скриптов език за вашия Redis сървър, наличен от версия 2.6, който ви позволява да извършвате операции в Redis, за да опростите кода си и да увеличите производителността. Двете основни функции, използвани за оценка на скриптове с помощта на интерпретатора на Lua, са:

  • EVAL
  • ЕВАЛША

Когато Lua скриптът се изпълнява, всички други заявки се блокират, както е показано на фигурата по-долу.

Redis също така включва средство за отстраняване на грешки на Lua скриптове във версия 3.2, което улеснява писането на сложни скриптове и помага за повишаване на производителността.

Memcached не поддържа никакви скриптове от страна на сървъра.

Мащабируемост

Има две техники за хоризонтално мащабиране на вашата база данни Redis:

  • Добавяне на части в Redis клъстери
  • Добавяне на възли към настройка на Redis HA (главен/реплика)

Можете също така да мащабирате вертикално вашата настройка на Redis, когато имате нужда от повече памет или изчисление. Може да се направи без прекъсване, ако имате настройка на HA или използвате технологията Redis Cluster.

Сървърът Memcached не предоставя механизъм за разпространение на данни между възли (шардинг). Така че в Memcached хоризонталната мащабируемост е толкова проста, колкото добавянето на още възли – проблемът с разделянето на вашите данни на различни сегменти ще трябва да бъде направен на ниво приложение/клиент. Има някои инструменти с отворен код, които могат да ви помогнат с това.

Комуникационен протокол

Redis използва TCP като мрежов протокол и не поддържа UDP.

Memcached поддържа както TCP, така и UDP комуникационните протоколи. Данните се изпращат до сървъра Memcached в две форми:

  • Текстови редове:Изпращайте команди и получавайте отговори от сървъра.
  • Неструктурирани данни:Получавайте или изпращайте информация за стойността за даден ключ и данните се връщат в същия предоставен формат.

Поддържани правила за изваждане от кеш

Redis поддържа различни видове политики за изгонване. Нека да разгледаме някои.

  • неизгонване:  При „noeviction“ се връща грешка, когато паметта я достигне обвързана.
  • allkeys-lru:  Lru означава „най-малко наскоро използван“. Това правило премахва най-малко използваните данни.
  • allkeys-lfu:  Lfu означава „най-рядко използван“. Тази политика премахва най-рядко използваните данни.
  • allkeys-random:  Тази политика премахва данните на случаен принцип.
  • volatile-lru:  Променливите данни са с набор от данни за изтичане. Това правило премахва най-малко използваните наскоро нестабилни данни.
  • volatile-lfu:  Променливите данни са с набор от данни за изтичане. Това правило премахва най-рядко използваните нестабилни данни.
  • променливо-случайно:  Тази политика премахва нестабилните данни на случаен принцип.
  • volatile-ttl:  „TTL“ означава време за живот. Тази политика премахва данните, които имат най-кратко време за живот.

Memcached използва LRU алгоритъм за изгонване на данни, когато е необходимо място. Първо търси вече изтекли данни, за да ги изтрие, ако изтекли данни не са налични, използва се алгоритъмът LRU.

Публикувайте и се абонирайте за съобщения

Redis поддържа Pub/Sub съобщения (публикувайте и се абонирайте). Има три команди, които се използват за тази цел.

Клиентът използва:

  • Абонирайте се
  • Отписване

Абониране и отписване се използват за получаване на съобщения от конкретен канал.

Сървърът използва:

  • Публикуване

Публикуването се използва за изпращане на данни към клиентите.

Memcached не поддържа съобщения за публикуване и абониране.

Поддръжка на потоци

Redis поддържа подобни на Kafka потоци с версия 5.0 или по-нова, използвайки нова структура от данни „Redis Streams“. Redis Streams има концепцията за потребителски групи, като Apache Kafka, която позволява на клиентските приложения да консумират съобщения по разпределен начин, което го прави лесен за мащабиране и създаване на високодостъпни системи.

Memcached не предлага естествена поддръжка за потоци, но има библиотечни инструменти с отворен код като Kafcache за обработка на потоци с ниска латентност.

Геопространствена поддръжка

Redis има структура от данни, наречена геопространствени индекси, която съхранява данните за дължина и ширина на дадено местоположение. Можете да извършвате различни операции с геопространствените данни, като изчисляване на разстоянието между две точки или намиране на близки места.

Memcached няма специални структури от данни за обработка на геопространствени данни.

Ефективност

Сравнението на производителността между хранилищата на ключ-стойност в паметта е по-скоро интелектуално упражнение, отколкото от някакво практическо значение – освен ако не внедрявате системи в такъв мащаб, че това става интересно, като мярка за спестяване на разходи. Това е така, защото такива магазини са обвързани с IO и обикновено мрежовата латентност може да играе по-голяма роля в латентността, възприемана от приложението, отколкото забавянето на базата данни.

По-практичен аспект на производителността е ефективността на съхранението – колко данни могат да бъдат опаковани в същото количество памет. Дори тук вътрешните структури от данни, използвани от Redis, варират в зависимост от размера на данните. Така че всяка дискусия относно производителността между тези бази данни трябва да се приема с щипка сол.

Нека да разгледаме някои сравнения, показани в изследователска статия от 2016 г. В тази статия авторите експериментират с широко използвани бази данни в паметта, за да измерят тяхната производителност по отношение на:

  1. Времето, необходимо за завършване на операциите.
  2. Колко ефективно използват паметта по време на операции.

Версии на базата данни, използвани в статията:

База данни Версия
Redis 3.0.7
Memcached 1.4.14

Операция за запис

Докато записвате данни, както можете да видите, в таблицата по-долу Memcached показва изключителна скорост дори след като броят на записите нарасне до милиони.

Изчисленото време за запис на двойки ключ-стойност (ms)

Брой записи
База данни 1000 10 000 100 000 1 000 000
Redis 34 214 1666 14 638
Memcached 23 100 276 2813

Операция за четене

Данните за четене остават почти последователни в Redis дори за милион записа, но в Memcached с увеличаване на броя на записите времето също се увеличава малко.

Изминалото време за четене на стойност, съответстваща на даден ключ за база данни (ms)

Брой записи
База данни 1000 10 000 100 000 1 000 000
Redis 8 6 8 8
Memcached 9 14 14 30

Използване на паметта

Докато обсъждаме използването на паметта, Redis винаги е най-добрият, както можете да видите в резултатите.

Използване на паметта на бази данни в паметта за операция на запис (MB)

Брой записи
База данни 1000 10 000 100 000 1 000 000
Redis 2.5 3.8 4.3 62.7
Memcached 5.3 27.2 211 264.9

Както виждате Redis е по-добър от Memcached.

Използване на паметта на бази данни в паметта за операция изтриване (MB)

Брой записи
База данни 1000 10 000 100 000 1 000 000
Redis 0 0 0 0
Memcached 2.2 2.1 2.2 2.2

Управлявани услуги/Поддръжка

По-голямата популярност и общност за Redis също доведе до необходимостта от управлявани услуги, хостинг и поддръжка. Популярните доставчици на управлявани бази данни за Redis™* включват ScaleGrid, Redis Labs, AWS Elasticache, Azure Cache и DigitalOcean. Тази страница предоставя страхотно сравнение на най-добрите доставчици на Redis™. Redis също така разполага с обширни вътрешни инструменти за отчитане, като посещения в кеша, използване на паметта, операции и дори регистрирана бавна заявка.

Управляваните услуги за Memcached са много по-малко достъпни, но все още се поддържат чрез Amazon Elasticache.

Поддръжка за сигурност на транспортния слой (TLS)

Redis има вградена поддръжка на TLS от Redis 6.0. По-ранните версии на Redis препоръчваха използването на stunnel за осигуряване на TLS поддръжка.

Memcached 1.5.13 и по-нови версии поддържат удостоверяване и криптиране чрез TLS. Тази функция все още е в експериментални етапи.

Удостоверяване

До Redis 5.x Redis поддържаше само проста автентификация, базирана на парола. Тази парола беше запазена в обикновен текст на сървъра. Redis във версия 6.0 по-нататък поддържа пълнофункционален ACL.

Memcached версия 1.4.3 и по-нова има поддръжка на SASL. Преди това Memcached нямаше слой за удостоверяване.

Резюме

Redis и Memcached са страхотни и имат приложения в различни области. Redis, разработен по-късно, има много разширени функции и има страхотна документация и общност.

Интересувате се да научите повече за ScaleGrid?

За да научите повече за това как ScaleGrid Hosting за Redis™* може да ви помогне да управлявате вашите бази данни, вижте нашата страница ScaleGrid Service за Redis™. Вижте как ScaleGrid хостингът за Redis™ може да ви позволи да се съсредоточите повече върху разработването на вашия продукт и по-малко върху управлението на бази данни.

*Redis е търговска марка на Redis Labs Ltd. Всички права върху тях са запазени за Redis Labs Ltd. Всяко използване от ScaleGrid е само за референтни цели и не означава спонсорство, одобрение или връзка между Redis и ScaleGrid.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Django - Как да използвам асинхронна опашка от задачи с целина и redis

  2. Коя NoSQL база данни за изключително големи обеми данни

  3. Как да използвате ключове за пространство от имена на redis, за да избегнете сблъсъци с имена?

  4. Redis набор срещу хеш

  5. Грешка в състоянието на сесията на Azure Redis Изчакване при изпълнение на EVAL, inst:1 , queue:2