Шта је Редис: Комплетан водич за употребу, предности и примере

Последње ажурирање: КСНУМКС Септембер оф КСНУМКС
  • Редис чува податке у меморији са напредним структурама и атомским операцијама.
  • Подржава перзистентност (RDB/AOF), асинхрону репликацију и алате попут Pub/Sub и Lua.
  • Идеално за кеширање, сесије, размену порука и рангирање са веома ниским латенцијама.

Употреба и дефиниција Редиса
Ако вам је икада било потребно да ваша апликација ради као ракета, вероватно сте чули за Редис. Ова технологија функционише као систем података у меморији који нуди веома ниске латенције и готово тренутни одговори, идеално када је брзина апсолутни приоритет.

Више од обичног кеша, Redis је NoSQL база података типа кључ-вредност са вишеструким структурама података и интегрисаним алатима. Првобитно покренута 2009. године и написана у C-у, њено име потиче од Remote Dictionary Server . Данас се може похвалити веома активним екосистемом, клијентима за скоро сваки програмски језик и робусним могућностима перзистентности и репликације.

Шта је Редис и за шта се користи?

Redis је механизам за складиштење података у меморији који ради са паровима кључ-вредност и напредним структурама. Радом у RAM меморији смањује уска грла типична за приступ диску , што га чини савршеним за случајеве употребе где је потребна екстремна брзина: кеш меморије за тешке упите, корисничке сесије, размену порука у реалном времену, онлајн игре, контролне табле са стримованим подацима и још много тога.

У многим пројектима се користи као кеш слој испред традиционалних база података , чувајући понављајуће резултате како би се избегло континуирано поновно израчунавање или поновно упитивање. Такође се користи као сама база података када строга издржљивост није захтев или када је њена перзистентност конфигурисана тако да се осигура чување података на диску.

Његова клијент/сервер архитектура, мрежни интерфејс и лаган дизајн олакшавају имплементацију и повезивање са више хостова. Штавише, пружа асинхрони пренос података од мастера до репликације (мастер наставља да ради током репликације), што помаже у скалирању читања и побољшању доступности.

Кључне карактеристике

Највећа снага Редиса је то што се све налази у главној меморији. Ово елиминише приступе диску током критичне путање и омогућава изузетно брзе операције читања/писања . Штавише, сваки стринг може достићи до 512 MB, са подршком за бинарне податке и укључује структуре као што су листе, скупови, сортирани скупови, хешеви, HyperLogLog, битмапе и стримови.

Редис имплементира атомске операције високог нивоа на страни сервера на овим структурама. Ово вам омогућава да изводите уније, пресеке или разлике на скуповима, модификујете подстрингове или повећавате и смањујете целе бројеве и бројеве са покретним флоатом без услова трке.

Укључује алате који убрзавају развој и поједностављују уобичајене обрасце: Pub/Sub за објављивање и претплату на канале (идеално за слање порука и обавештења у реалном времену), кључеве са TTL-ом за аутоматски истекање, атомске бројаче за метрику и контролу конкурентности и уграђену подршку за Lua скрипте за логику на страни сервера од верзије 2.6.

Још једна снажна предност је његова компатибилност са модулима. Redis модули проширују могућности као што су JSON документи , временске серије и претрага , што га чини свестраним системом који иде далеко даље од једноставног упаривања кључ-вредност.

  Како аутоматизовати радне процесе помоћу n8n и Docker-а

Функције Редиса

Историја, лиценце и еволуција

Редис је 2009. године креирао Салваторе Санфилипо како би побољшао латенцију производа под називом LLOGG. Његов успех је био тренутан, и 2010. године VMware је ангажовао Санфилипа да води пројекат пуно радно време ; Питер Нордхајс се придружио убрзо након тога. Између 2013. и 2015. године, спонзорисао га је Пивотал, а касније Редис Лабс.

Од верзије 2.6, сервер има интегрисан Луа интерпретер, омогућавајући извршавање скрипти директно унутар Редиса са атомичношћу и минимизирајући латенцију клијент-сервер у повратном путовању. Што се тиче лиценцирања, дистрибуира се под дуалним RSALv2 и SSPLv1 моделом.

Модел података и операције

Редис користи глобални речник који мапира кључеве у вредности. За разлику од једноставнијих решења кључ-вредност, вредности могу бити различитих типова. Тип одређује доступне команде и атомске операције које можете извршити на тим подацима.

Тип Redis String је „безбедан за бинарно коришћење“: може да садржи текст, целе бројеве, бројеве са покретним механизмом или сирове бинарне податке као што су JPEG слика или серијализовани објекат. Можете да радите на деловима стринга, да мењате одређене битове или да га користите као бројач са инкрементима/смањењима.

Листе вам омогућавају да управљате редовима или стековима, скупови и уређени скупови се користе за чланство и рангирање по резултату, а хешеви чувају мапе вредности поља, што је веома корисно за груписање атрибута објекта . HyperLogLog се користи за приближне бројаче кардиналности са врло мало меморије, а стримови олакшавају токове догађаја са груписаном потрошњом.

Штавише, Редис нуди трансакције (MULTI/EXEC), што вам омогућава да групишете више операција ради секвенцијалног и атомског извршавања . У комбинацији са Луа језиком, можете поуздано да инкапсулирате сложену логику на страни сервера.

Перзистентност: снимци и AOF

Редис може да ради искључиво у меморији, али такође подржава перзистентност диска како би уравнотежио перформансе и издржљивост. Са снимцима (RDB), прави периодичне снимке скупа података и чува их асинхроно, што резултира минималним утицајем на време одзива.

Друга опција је AOF (дневник), који бележи сваку операцију писања у датотеку. Овај режим пружа финију, подесивију издржљивост: `appendfsync=always` приморава синхронизацију на сваку промену (максимална безбедност, ниже перформансе), а `appendfsync=everysec` синхронизује сваке секунде (одличан баланс).

Ако је потребно, можете и ручно покренути САЧУВАЊЕ да бисте одмах направили снимак. У случају потпуног квара машине, обично ћете изгубити највише малу количину података, у зависности од изабране политике синхронизације.

У старијим верзијама, употреба „виртуелне меморије“ је била дозвољена почев од верзије 2.4, али тај приступ је сада застарео. Данас се препоручује избор између RDB, AOF или комбинације оба , прилагођавајући конфигурацију према критичности података и жељеним перформансама.

Репликација и висока доступност

Редис имплементира асинхрону репликацију мастер-реплика. То значи да се писања прихватају на мастеру и реплике се синхронизују без његовог блокирања, одржавајући услугу оперативном током синхронизација . Мастер може имати више реплика, а заузврат, реплика може бити ланчано повезана као мастер друге реплике, формирајући топологију стабла.

  Како паузирати и контролисати редове чекања у Ларавелу корак по корак

Репликација је веома корисна за скалирање операција читања и за редундантност. Неке конфигурације дозвољавају писање у реплике, иако то може довести до недоследности ако се не контролише правилно; подразумевано, реплике се обично користе само за читање како би се одржала доследност.

Постављање реплика близу корисника смањује перципирану латенцију. Уз оркестрацију и алате за чување/кластер, може се постићи висока доступност и аутоматско пребацивање у случају отказа како би се минимизирало време застоја у случају кварова главног сервера.

Клијент/сервер архитектура и екосистем

Redis сервер нуди једноставан протокол на који се клијенти различитих језика повезују. Можете користити његов званични CLI (redis-cli) за тестирање, администрацију или брзо писање скрипти, или интегрисати библиотеку у своју апликацију.

Постоје клијенти за ActionScript, C, C++, C#, Java, Go, Python, PHP, Ruby, Scala, JavaScript (укључујући Node.js на страни сервера), R, Erlang, Haskell, Lua, Objective-C, Perl, Common Lisp, Smalltalk, Tcl, Io, haXe, Pure Data и друге. Ова широка подршка олакшава усвајање на скоро сваком стеку.

Стварни случајеви употребе и практични примери

Веома чест пример је онлајн агенција за некретнине: оглас за некретнину са ценом, садржајима и бројем соба се једва мења. Без кеширања, свака посета захтева поновљене упите и прорачуне. Са Редисом, након првог учитавања, објекат се чува са кључем (на пример, property_4056 ) и TTL-ом од, рецимо, једног месеца. Накнадне посете читају из меморије и избегавају приступ бази података.

Такође је уобичајено кеширање резултата великих извештаја , управљање аутентификованим сесијама, креирање рангирања уживо са сортираним скуповима или коришћење Pub/Sub-а као лаганог канала за размену порука између сервиса.

У тесту који је користио табелу грешака од 16.000 редова, мерено је време за: 1) упит бази података, 2) чување колекције у Редису и 3) читање из Редиса. Резултат је био запањујући: преузимање из Редиса је било 26 пута брже него из базе података. Ова поређења често истичу стварни утицај на корисничко искуство и трошкове инфраструктуре.

Редис против Мемцацхед-а

Обе технологије се користе за кеширање у меморији, али постоје значајне разлике. Redis нуди више типова података (листе, скупове, хешеве итд.), опциону перзистентност диска , Pub/Sub, Lua скрипте, трансакције и модуле за проширење својих могућности. Memcached се, с друге стране, фокусира на једноставан модел кључ-вредност у меморији без перзистентности.

Што се тиче сирових перформанси, оба су веома брза; Redis се обично истиче у сценаријима са сложеним структурама и атомским операцијама на страни сервера. Ако вам је потребан само веома једноставан и ултралаган кеш, Memcached би могао бити довољан , али када тражите већу функционалност и флексибилност, Redis обично испадне најбољи.

  Директор информационих система: кључ технолошког успеха

Управљане услуге у односу на самостално управљане услуге (Redis и Valkey)

Можете сами да имплементирате Redis или Valkey или да се одлучите за управљану услугу у облаку. Самостално управљање вам даје потпуну контролу, али скалабилност и одржавање су ваша одговорност (додавање чворова, ажурирања, безбедност, резервне копије, праћење).

Управљана услуга смањује оперативно оптерећење: лакше скалирање, висока доступност и ажурирања без проблема. Ово се обично претвара у ниже укупне трошкове власништва и омогућава тиму да се више фокусира на моделирање података и пословне функционалности, него на задатке платформе.

Интегрисани алати: Pub/Sub, TTL, бројачи и Lua

Са Pub/Sub, можете емитовати поруке у каналима и омогућити више претплатника да их примају одмах, што је савршено за ћаскање, обавештења и координацију између микросервиса. То је једноставан и ефикасан образац.

Кључеви са ограничењем трајања (TTL) вам омогућавају да „самочистите“ привремене податке: сесије, токене, истекле резултате упита итд. Ово вас спречава да попуните базу података застарелим информацијама и поједностављује логику истека.

Атомски бројачи су одлични за метрике, ограничавање брзине, редове чекања или било који случај где је потребно безбедно сабирати/одузимати у истовременим окружењима.

Коначно, Луа-ова уграђена подршка вам омогућава да покрећете скрипте близу података са атомичношћу. Ово смањује путовање мреже и омогућава вам да извршавате сложене операције у једном кораку , побољшавајући конзистентност и перформансе.

Често постављана питања

За шта се користи Redis? За убрзање апликација помоћу кеш меморије, сесија, рангирања у реалном времену, лаганог слања порука са Pub/Sub и као NoSQL база података када је латенција критична или је конфигурисана перзистентност.

Зашто је Redis тако брз? Зато што се подаци налазе у RAM меморији, елиминишући приступе диску на критичној путањи и нудећи атомске операције на страни сервера; штавише, његов протокол је лаган и ефикасан.

Може ли се користити као база података? Да. То је NoSQL база података у меморији са опцијама перзистенције (RDB и AOF). У зависности од ваше конфигурације, можете дати приоритет перформансама или издржљивости или комбиновати оба.

Језичка подршка

Постоје зрели клијенти за готово све: Python (redis-py), Java (Jedis), Node.js (ioredis), C#/.NET (StackExchange.Redis), PHP (phpredis), Go (go-redis), Ruby (redis-rb) и многе друге. Ова разноликост осигурава беспрекорну интеграцију са вашим постојећим стеком.

Редис се етаблирао као „џокер“ за решавање проблема перформанси и рада у реалном времену у већини модерних архитектура: комбинује брзину муње, богате структуре података, подесиву перзистентност, репликацију и скуп практичних алата који, када се добро користе, праве разлику у корисничком искуству.

Типови база података
Повезани чланак:
Типови база података: релационе, НоСКЛ и више