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

Как Redis постига висока производителност и производителност?

В документацията на Redis има изобилие от информация, за да разберете как работи. Сега, за да отговоря конкретно на вашите въпроси:

1) Как се поддържат връзките?

Връзките се поддържат и управляват с помощта на цикъла за събития ae (проектиран от автора на Redis). Всички мрежови I/O операции не са блокиращи. Можете да видите ae като минималистична реализация, използваща най-добрия мрежов I/O механизъм за демултиплексиране на платформата (epoll за Linux, kqueue за BSD и т.н. ...) точно като libevent, libev, libuv и т.н. ...

2) Връзките TCP или HTTP ли са?

Връзките са TCP с помощта на протокола Redis, който е прост telnet съвместим, текстово ориентиран протокол, поддържащ двоични данни. Този протокол обикновено е по-ефективен от HTTP.

3) Как се управлява паметта?

Паметта се управлява чрез разчитане на разпределител на памет с общо предназначение. На някои платформи това всъщност е разпределителят на системната памет. На някои други платформи (включително Linux), jemalloc е избран, тъй като предлага добър баланс между консумация на процесора, поддръжка на едновременност, фрагментация и отпечатък на паметта. Изходният код на jemalloc е част от дистрибуцията на Redis.

За разлика от други продукти (като memcached), в Redis няма внедряване на разпределител на плочи.

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

4) Какви са техниките за синхронизиране, използвани за постигане на висока пропускателна способност, въпреки конкуриращите се четене/записване?

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

Можете да намерите повече информация там:Redis е еднонишков, тогава как прави едновременен I/O?

Каква е разликата между обикновена ванилова реализация на машина с кеш памет и сървър, който може да отговаря на команди, и кутия Redis?

Няма разлика. Redis е обикновена ванилова реализация на машина с кеш памет и сървър, който може да отговаря на команди. Но това е реализация, която е направена правилно:

  • използвайки модела на цикъла на събития с една нишка
  • използване на прости и минималистични структури от данни, оптимизирани за съответните им случаи на употреба
  • предлага набор от команди, внимателно подбрани за балансиране на минимализма и полезността
  • постоянно насочване към най-добрата необработена ефективност
  • добре адаптиран към съвременните механизми на ОС
  • предоставянето на множество механизми за постоянство, тъй като подходът „един размер отговаря на всички“ е само мечта.
  • предоставяне на градивните елементи за HA механизми (например система за репликация)
  • избягване на натрупване на безполезни абстракционни слоеве като палачинки
  • което води до чиста и разбираема кодова база, с която всеки добър C разработчик може да се чувства комфортно



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis:Сортирайте и вземете n съседни ключове

  2. Как да кажа на клиент къде новият Redis master използва Sentinel

  3. Redis SYNC и EXEC

  4. Трябва ли да създам нов Redis клиент за всяка връзка?

  5. Redis използва ли потребителско име за удостоверяване?