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

Ако redis вече е част от стека, защо Memcached все още се използва заедно с Redis?

Основната причина, поради която виждам днес като случай на използване на memcached над Redis, е превъзходната ефективност на паметта, която трябва да можете да получите с обикновен Кеширане на HTML фрагменти (или подобни приложения). Ако трябва да съхранявате различни полета на вашите обекти в различни memcached ключове, тогава хешовете на Redis ще бъдат по-ефективни от паметта, но когато имате голям брой двойки ключ -> simple_string, memcached трябва да може да ви даде повече елементи на мегабайт.

Други неща, които са добри точки за memcached:

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

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

Сравнение между Redis LRU и memcached LRU.

Както memcached, така и Redis не извършват реални изгонвания на LRU, а само приблизително.

Изхвърлянето на Memcache е клас по размер и зависи от подробностите за внедряването на неговия разпределител на плочи. Например, ако искате да добавите елемент, който се вписва в даден клас размер, memcached ще се опита да премахне изтекли/неизползвани елементи в този клас, вместо да опита глобален опит да разбере какъв е обектът, независимо от неговия размер, който е най-добрият кандидат.

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

Начинът, по който Redis прави това, е като взема проби от няколко обекта, избирайки този, който е неактивен (без достъп) за най-дълго време. След Redis 3.0 (в момента в бета версия) алгоритъмът беше подобрен и също така събира добри кандидати при изгонвания, така че приближението беше подобрено. В документацията на Redis можете да намерите описание и графики с подробности за това как работи.

Защо memcached има по-добър отпечатък на паметта от Redis за обикновен низ -> карти на низове.

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

Когато Redis започне да работи по-ефективно с паметта

Redis е в състояние да съхранява малки обобщени типове данни по специален начин за пестене на памет. Например малък Redis Hash, представляващ обект, се съхранява вътрешно не с хеш таблица, а като двоичен уникален blob. Така че задаването на множество полета на обект в хеш е по-ефективно от съхраняването на N отделни ключа в memcached.

Всъщност можете да съхранявате обект в memcached като един JSON (или двоично кодиран) blob, но за разлика от Redis, това няма да ви позволи да извличате или актуализирате независими полета.

Предимството на Redis в контекста на интелигентното кеширане.

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

Например, представете си, че трябва да кеширате последните N новини, публикувани в Hacker News, за да попълните секцията „Най-нови“ на сайта. Това, което правите с Redis, е да вземете списък (ограничен до M елементи) с вмъкнати най-новите новини. Ако използвате друго хранилище за вашите данни и Redis като кеш, това, което правите, е да попълните и двете изгледите (Redis и DB), когато е публикуван нов елемент. Няма анулиране на кеша.

Въпреки това приложението винаги може да има логика, така че ако списъкът Redis е празен, например след стартиране, първоначалният изглед може да бъде създаден отново от DB.

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. как да поддържате кеширането актуално

  2. По-бързият метод за преместване на Redis данни в MySQL

  3. Може ли Redis 6 да се възползва от многоядрените процесори?

  4. Най-добрият начин за съхраняване на Redis ключове

  5. Не може да се получи връзка с Jedis, когато се използва SSL с Redis и Spring Data Redis