|
Разработването на приложения с Redis е приятен процес, но както при всяка технология, има няколко неща, които трябва да имате предвид при проектирането на приложения, базирани на Redis. Може би сте били запознати с цялата рутина на релационната разработка на бази данни и разработката на приложения, базирана на Redis, има много прилики, но трябва да имате предвид следните две неща – Redis е база данни в паметта и е еднонишкова. Затова, когато използвате Redis, трябва да обърнете внимание на следните точки: 1. Контрол на всички ключове, съхранявани в Redis Основната функция на базата данни е да съхранява данни, но е нормално разработчиците да игнорират някои данни, съхранявани в базата данни поради промени в изискванията на приложението или методите на използване на данни, и същото важи и за Redis. Може да пропуснете определени ключове, които изтичат, или да забравите данните, защото модул от вашето приложение е остарял. Във всеки случай, Redis съхранява данни, които вече не се използват, заемайки място без причина. Слабо структурираният модел на данни на Redis затруднява разбирането на централно съхранението, освен ако не използвате много зряла номенклатура за ключовете. Използването на правилния метод за именуване ще опрости управлението на базата данни, а когато създадете пространство от имена за ключове чрез вашето приложение или услуга (обикновено с двоеточие за разделяне на имената на ключовете), лесно можете да идентифицирате данни при миграция, конвертиране или изтриване. Друг често срещан случай на използване на Redis е като второ хранилище на данни за горещи данни, където по-голямата част от данните се съхраняват в други бази данни, като PostgreSQL или MongoDB. В тези случаи разработчиците често забравят да изтрият съответните данни в Redis, когато данните се премахват от основното хранилище. В този случай обикновено е необходимо каскадно изтриване, като в този случай може да се постигне чрез запазване на всички идентификатори за конкретен елемент от данни в конфигурацията на Redis, така че след изтриването на данните в основната база данни се призовава почистващ агент, който да изтрие всички релевантни копия и информация. 2. Контролиране на дължината на всички ключови имена Както казахме по-горе, използвахме подходящи именуващи конвенции и добавихме префикси, за да определим накъде отиват данните, така че това изглежда противоречи на това. Въпреки това, не забравяйте, че Redis е база данни в паметта и колкото по-къси са клавишите, толкова по-малко място ви трябва. Естествено, когато в една база данни има милиони или милиарди ключове, дължината на името на ключа ще има голямо влияние. Например, на 32-битов Redis сървър, ако съхранявате един милион ключове с дължина 32 знака, това ще заема около 96MB пространство при използване на 6-символно ключово име, но ако използвате 12-символово ключово име, разходът на пространство ще се увеличи до около 111MB. С повече ключове, допълнителните 15% режийни разходи ще имат значително въздействие. 3. Използвайте правилната структура от данни Независимо дали става дума за използване на памет или производителност, понякога структурите от данни могат да имат голямо въздействие, ето някои от най-добрите практики, към които да се позовате: Вместо да съхранявате данните като хиляди (или милиони) отделни низове, помислете за използване на хеширани структури от данни за групиране на свързани данни. Хеш таблиците са много ефективни и могат да намалят използването на памет; В същото време хеширането е по-полезно за детайлна абстракция и четивост на кода. Когато е подходящо, използвайте списък вместо set. Ако не е нужно да използвате функцията set, List може да осигури по-високи скорости от зададените при използване на по-малко памет. Сортираните множества са най-скъпите структури от данни, както по отношение на консумацията на памет, така и по сложност на основните операции. Ако просто искате начин да заявявате записи и не ви интересува да сортирате такива свойства, силно се препоръчва да използвате хеш таблици. Често пренебрегвана функция в Redis са битмапите или битсетовете (след V2.2). Битсетовете ви позволяват да извършвате множество операции на битово ниво върху стойности на Redis, като например лек анализ. 4. Не използвайте клавиша при използване на SCAN Към версията Redis v2.8 вече е налична командата SCAN, която позволява извличане на ключове от ключовото пространство чрез курсора. В сравнение с командата KEYS, въпреки че SCAN не може да върне всички резултати наведнъж, тя избягва високия риск от блокиране на системата, така че някои операции могат да се изпълняват върху главния възел. Важно е да се отбележи, че командата SCAN е итератор, базиран на курсор. Всеки път, когато се извика командата SCAN, нов курсор се връща на потребителя и потребителят трябва да използва този нов курсор като параметър на курсора на командата SCAN в следващата итерация, за да продължи предишния процес на итерация. В същото време, с SCAN, потребителите могат да регулират команди чрез режим на ключови имена и опции за броене. Командите, свързани със SCAN, включват също SSCAN команди, HSCAN команди и ZSCAN, които се използват съответно за колекции, хеш ключове и продължения. 5. Използвайте сървърни Lua скриптове В процеса на използване на Redis, поддръжката на Lua скриптове несъмнено предоставя на разработчиците много приятелска среда за разработка, като по този начин значително освобождава креативността на потребителите. Когато се използват правилно, Lua скриптовете могат да донесат значителни подобрения в производителността и потреблението на ресурси. Вместо да предават данни към процесора, скриптовете позволяват да изпълнявате логика най-близо до данните, намалявайки мрежовата латентност и излишния трансфер на данни. В Redis много класически случай на използване на Lua е филтриране на данни или агрегиране на данни в приложение. Като капсулирате работния процес в скрипт, можете просто да го извикате, за да получите по-малък отговор, използвайки малко ресурси за по-малко време. Професионален съвет:Lua е страхотна, но има и някои проблеми, като трудности при докладване и обработка на бъгове. Умен подход е да се използва функцията Pub/Sub на Redis и скриптът да изпраща лог съобщения по отделен канал. След това създайте абонатски процес и го обработете съответно.
|