Бележки на програмиста

Redis и неговите приложения

Redis (REmote DIctionary Server) е нерелационна високоефективна система за управление на база данни. Redis съхранява всички данни в паметта, достъпът до данните става с ключ. По желание копие от данните може да се съхранява на диск. Този подход осигурява производителност, която е десетки пъти по-добра от тази на релационните СУБД, а също така опростява разделянето на данни (рязкото).

Накратко за основното

На пръв поглед може да изглежда, че Redis не се различава много от Memcached. Всъщност както Redis, така и Memcached съхраняват данни в паметта и имат достъп до тях чрез ключ. И двете са написани на C и се разпространяват под лиценза BSD. Но в действителност има повече разлики между Redis и Memcahced, отколкото прилики.

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

Интересна особеност на Redis е, че е - сървър с една нишка. Това решение значително опростява поддръжката на кода, гарантира атомност на операциите и ви позволява да стартирате един процес Redis за всяко ядро ​​на процесора. Разбира се, всеки процес ще слуша на свой собствен порт. Решението е нетипично, но напълно оправдано, тъй като Redis прекарва много малко време за извършване на една операция (около сто хилядни от секундата).

Редис има репликация. Не се поддържа репликация с няколко главни копия. Всеки подчинен сървър може да действа като мастер за другите. Репликацията в Redis не води до блокиране нито на главния, нито на подчинените. Операцията за запис е разрешена на реплики. Когато главният и подчинения сървър се свържат отново след прекъсване на връзката, настъпва пълна синхронизация (повторна синхронизация).

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

Друга характеристика на Redis е поддръжката на механизма публикуване/абониране . Той позволява на приложенията да създават канали, да се абонират за тях и да публикуват съобщения в канали, които ще бъдат получени от всички абонати. Нещо като IRC чат.

Бих искал също да отбележа следното:

И така, за какви цели можете да използвате Redis?

Области на употреба

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

Позволете ми да цитирам от The Little Redis Book:

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

Идват ми на ум следните случаи на употреба за Redis:

  • Съхранение на сесии и потребителски профили;
  • Сървър за опашки, плюс имаме предвид механизма за публикуване/абониране;
  • Пълна подмяна на Memcached, освен това в случай на Redis ще получим репликация, по-дълги ключове и стойности, възможност за възстановяване на кеша от диска и т.н.
  • Място за съхраняване на броя на онлайн потребителите, captcha кодове, различни флагове, мъдреци на заявки за търсене;
  • СУБД за малки приложения - съкращаване на връзки, табла за изображения, може би дори блогове;
  • Ролята на „речник“ в шардинга, тоест сървър, който знае кои парчета да търси на кои сървъри;
  • Съхранение на междинни резултати от изчисления при обработка на големи количества данни;

Също така за случаи на употреба вижте връзка първа и връзка две. Ако сред читателите има потребители на Redis, ще ми е много интересно да разбера как го използвате.

Свързани връзки

Препоръчвам ви да се запознаете със следните материали:

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