В документацията на 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 разработчик може да се чувства комфортно