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

Как да анализирате и оптимизирате използването на паметта в Redis

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

Това, разбира се, е често срещан проблем с всяка база данни, но боли повече в случай на бази данни в паметта като Redis, тъй като RAM е по-скъпа от вторичната памет като твърди дискове и SSD. Трябва да помним обаче, че Redis не е предназначен да съхранява терабайти данни за вашето приложение. По-скоро той е предназначен да се използва за съхраняване конкретно на тези данни, които трябва да бъдат прочетени (и в по-малка степен, записани) с много висока скорост, докато останалите ви данни могат да се намират в поддържани от диск традиционни бази данни. За тази цел Redis най-често се използва като кеш, съхраняващ само най-активните данни с високи изисквания за пропускателна способност за четене/запис (помислете за табла и съобщения за чат в реално време). Следователно основният виновник за прекомерното използване на паметта с Redis е поведението на приложението. Вашето приложение може да съхранява ненужни данни, които нямат полза от това, че са в Redis, или дори напълно излишни данни, т.е. данни, които никога не са използвани за никакви цели, какъвто беше този потребител.

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

Командата MEMORY USAGE

Тази команда с подходящо име е достъпна след Redis 4.0.0 и е първата стъпка към отстраняване на грешки в паметта с Redis. От документите:

Командата MEMORY USAGE отчита броя байтове, които ключът и неговата стойност изискват да бъдат съхранени в RAM. Отчетеното използване е общият брой разпределения на паметта за данни и административни разходи, които ключът изисква неговата стойност.

Ето един пример:

MEMORY USAGE users_by_reputation
(integer) 2923419

Връща се просто цяло число, представляващо броя на байтовете, използвани за съхранение на ключа, стойността и вътрешните допълнителни разходи. За бързо намиране на използването на паметта на конкретен ключ не става по-лесно от това.

Два възможни минуса са:

  1. Тази команда е достъпна само в Redis 4.0.0 и по-нови версии. Това изключва повечето доставчици на облак.
  2. Тя ви казва само паметта, използвана от един ключ, така че освен ако не знаете предварително кой ключ или клавиши причиняват проблема, тази команда има много ограничена полезност.

redis-rdb-tools

redis-rdb-tools е изящен малък инструмент от командния ред, който надхвърля скромното MEMORY USAGE команда, която обсъдихме по-горе. Това е популярен и мощен инструмент за профилиране на паметта, създаден специално за Redis, който анализира файл за дъмп на Redis (.rdb) и генерира подробен профил на паметта за всеки ключ в дъмпа, включително подробности като използваната памет, тип данни, брой елементи, и т.н. Той също така ви позволява да филтрирате ключовете, които се обработват, така че по избор можете да стартирате анализа на конкретен ключ или подмножество от ключове, които съответстват на конкретен модел. Резултатът от анализа е CSV файл с колони за ключа, използваната памет, тип данни, брой елементи и т.н.

Този инструмент е толкова страхотен, защото за разлика от MEMORY USAGE команда, която работи само с един ключ, този инструмент анализира целия набор от данни и изхвърля резултата във формат CSV, което означава, че можете да го заредите във всяка SQL база данни и да изпълнявате каквито заявки желаете, като го сортирате и филтрирате, както желаете , с цялата сила на SQL, което ви дава страхотна представа за цената на паметта на вашите данни. Като бонус, ако използвате версии на Redis преди 4.0.0, все още можете да използвате този инструмент за анализиране на единични ключове, ако желаете, тъй като този инструмент работи чрез анализиране на двоичния дъмп, който Redis произвежда, вместо да разчита на Redis за отчет за използване на паметта. От друга страна, тази разлика в подхода означава, че изчисленото използване на паметта е по-скоро приблизителна, отколкото точна цифра, както е посочено в документацията на проекта. Това обаче всъщност не е проблем, когато нашата цел е да идентифицираме проблемите с използването на паметта, тъй като се интересуваме повече от относителните размери на ключовете и идентифицирането на ключове, които използват значително повече памет, която трябва да използват, така че няколко байта тук или там наистина е без значение.

RDBTools

RDBTools е уеб-базиран инструмент, който предлага няколко инструмента за управление и оптимизиране на Redis, с основен фокус върху оптимизирането на паметта. Той се роди от проекта с отворен код redis-rdb-tools, разгледан по-горе. С него можем без усилие да анализираме използването на паметта на нашия Redis сървър, като просто посочим нашия екземпляр и щракнем върху „Анализ“. Инструментът изтегля дъмп от работещия екземпляр и го анализира, като ви представя гладък потребителски интерфейс за филтриране и сортиране на вашите ключове въз основа на различни параметри като използване на памет, тип данни, кодиране, брой елементи и т.н., подобно на командния ред инструмент, но без никакви ръчни усилия за вземане на дъмп, генериране на профила на паметта, настройка на база данни, импортиране на профила, писане и изпълнение на заявки и т.н.

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

RDBTools се предлага като изображение на докер, достъпно в docker hub и може да се изпълнява на вашата собствена машина, така че няма нужда да се притеснявате за изтичане на чувствителни данни. Пробната версия е налична безплатно завинаги, с някои ограничения за използване. Вижте страницата с цените за повече информация относно различните налични платени планове.

Заключение

Изчерпването на паметта е неизбежен проблем при използване на бази данни в паметта като Redis. Както всички оптимизационни проблеми, първата стъпка е правилното диагностициране на проблема. Важно е да се противопоставите на изкушението бързо да правите заключения въз основа на непроверени хипотези. „Измерете, измерете, измерете“ е името на играта, когато става въпрос за оптимизация и има различни методи и инструменти за придобиване на представа за проблемите с паметта на Redis. Кой е най-добрият зависи от вашите специфични нужди и къде се намирате в процеса на разработка. За някой, който току-що започва да използва Redis, следенето на отделните клавиши може да е достатъчно, за да започне, докато за тежките потребители на Redis, със сигурност има смисъл да потърсят специален GUI инструмент с всички звънци и свирки, за да спестят болка по-късно. Какъвто и да е изборът ви, винаги разбирайте корена на проблема си, преди да се опитате да го разрешите, и не забравяйте, че ако имате проблеми с паметта с Redis, вероятно използвате повече памет, отколкото наистина ви трябва.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как socket.io изпраща съобщения на множество сървъри?

  2. Вземете индекса на елемент по стойност в списък за редис

  3. Как да създадете собствена база данни в Redis?

  4. hdel вътре в hget блок nodejs redis

  5. Redis като база данни