Node.js & Redis. Yüksək performans önbelleği

İki texnologiyada performans və sadəlik. Bir matçdır!

Burada uzun söhbət etmək istəmirəm. Redis'i maşınlarınıza izah etmək və quraşdırmaqdan başlayaq, Redis CLI-nin əsaslarını əhatə edib sonra Node.js-də istifadə edək. Hal-hazırda yalnız Redisdə sadə verilənlər tipləri ilə işləyəcəyik. Çünki bizə ən çox ehtiyac olan budur. Buradakı yaxşı xəbər: Redis'i Node və ya başqa bir proqramlaşdırma langauge ilə istifadə etsəniz - sizi Redisdəki ən vacib əmrlərlə tanış etdikdən sonra hər yerdə olduqca oxşar olacaq.

Redis nədir və niyə belə sərindir?

Redis, əsas dəyərlərlə işləyən yaddaşdakı bir verilənlər bazasıdır. Beləliklə, hər bir dəyər üçün bir açar var. Buna görə Redis SQL verilənlər bazası deyil və bu məqalədə işləyəcəyimiz ibtidai məlumat strukturları üçün hazırlanmışdır. Redis ilə məlumatları oxumaq və yazmaq sürətinə və sadə açar dəyər sisteminə görə, Redis, məsələn, önbelleği üçün çox istifadə edilə bilər. İstifadəçi məlumatları və ya görüntülər kimi daimi məlumatlar Redisdə dəyişkən olduğuna görə saxlanılmamalıdır. Artıq daha çox acsınız? Gedək!

Redis maşınınıza quraşdırılır

Linux: https://redis.io/topics/quickstart sudo service redis start və ya sudo service redis-server start

MacOS: Əgər əvvəlcədən quraşdırılmamısınızsa, dəm qurun: https://brew.sh/ dəmləndir

Windows: Windows üçün Linux alt sistemindən istifadə edin. Sonra linux-da olduğu kimi quraşdırın.

Redis işləyirsə yoxlayın:

Redis xidmətinə başladıqdan sonra, redis-cli vasitəsi ilə onunla əlaqə qura bilməlisən. Redis-cli ping etməyə çalışın və Redis "PONG" ilə əlavə etməlidir. Demək, Redis işləyir.

Redis CLI

Redisiniz işləyərkən, birbaşa ona qoşulmaq üçün həmişə redis-cli istifadə edə bilərsiniz. CLI-də Redis əmrlərinin hamısını işlədə bilərsiniz, buna görə də bir neçəsinə nəzər salaq.

Sadə bir String ilə işləmək

Qeyd: SET və digər əmrləri böyük hərflə yazmağımız CLI-də əlaqəsizdir. Sadə məlumatlar üçün prinsip sadədir. SET deyirik, sonra açarı, yəni dəyişən adını verin və ardından boşluq ilə sadəcə dəyəri verin.

SET adı Maks

İndi "ad" adlanan açarımızın dəyərini çap edə bilərik. "Max" almalıyıq

Adı alın     

Adımızla kifayət qədər oynadığımız zaman əlbəttə ki yenidən silə bilərik. Bundan sonra bir (nil), artıq silinmiş dəyəri yenidən əldə etməyə çalışdığımızda bizi gözləməlidir.

DEL adı GET adı // (nil) çap olunacaq.

Amma ola bilsin ki, bundan sonra başqa bir ad saxlamaq istəyirik. Bunu etmək üçün əvvəlcə yenidən bir ad yaradaq və əsas "adları" qəsdən adlandıraq

SET adını Max qoy

İndi bu sətri genişləndirə bilərik, bu vəziyyətdə mən kotirovkalarla edəcəyəm ki, Redis də boşluqlar və xüsusi simvollar daxil etsin.

APPEND adları "& Matt"

Əvvəl olduğu kimi, indi tamamlanmış sətri yenidən çıxara bilməliyik. "Max & Matt" almalıyıq.

Bəs indi zərif bir cache necə həyata keçirə bilərik?

Yaxşı sual, məncə. Görünür əvvəlcə Redisin bunun üçün əla olduğunu söylədiyim zaman ehtiyatlı olmusunuz. Yaxşı, bir önbelleğin nöqtəsi məlumatları müvəqqəti saxlamaqdır. İndi məlumatları necə silmək lazım olduğunu bilirik, ancaq bir az çətin olacaq bir cache üçün. Buna görə Redis, müəyyənləşdirdiyimiz bir müddətdən sonra məlumatların avtomatik olaraq bitməsini təklif edir.

Bunu iki yolla edə bilərik: 1) ya açarı yaratarkən birbaşa, dəqiqənin neçə saniyədən sonra bitəcəyini göstərəcəyik. 2) Yoxsa bunu sonradan müəyyənləşdiririk. Yenə də keçdiyimiz say, açarın bitməsinə qədər saniyələrin sayıdır.

// 1) Ad düyməsi 60 saniyədən sonra SET adı Max EX 60 sonra başa çatacaq
// 2) Əvvəlcə SET adı Max müəyyənləşdiririk // Sonra 60 EXPIRE adının nə vaxt bitəcəyini müəyyənləşdiririk

Beləliklə, bir açarın bir anda bitməyəcəyi müəyyən edilmişsə, mövcud qalan ömrü istənilən vaxt oxuya bilərik. Yenidən aydınlaşdırmaq üçün: Əlbəttə hər saniyədə dəyişən yalnız qalan vaxt çıxır.

SET adı Max EX 60
// qalan vaxt TTL adını almaq
// 60, 59, 58 və s ... olacaq

Ancaq yenə də işləyən bir önbelleğe ehtiyacımız var ...

İndi düymələri əllə və avtomatik silə bilərik. Ancaq açarımızın hələ də olub olmadığını yoxlamaq istəsək nə etməli? Bunun üçün Redisdə mövcud funksiya mövcuddur. Açar varsa 1-i, yoxsa 0-ni qaytarır.

SET adı Max EXISTS adı // qayıdacaq: (tam) 1
DEL adı EXISTS adı // qayıdacaq: (tam) 0

İndi CLI və Redisdəki ən vacib əmrlərlə tanışsınız. İndi bunu tətbiq edək - Node.js ilə!

Node.js-də Redis ilə başlayın

Əvvəlcə Node.js layihəmizə Redis quraşdırmalıyıq:

npm yenidən quraşdırın

Sonra onu kodumuzda idxal edə bilərik və maşınımızda Redis nümunəsinə qoşula bilərik. CreateClient üçün parametr maşındakı nümunəmizin ünvanı olacaq (buna görə də localhost istifadə edirik) və 6379 port Redis üçün standart portdur.

const redis = tələb ('redis') const müştəri = redis.createClient ('redis: // localhost: 6379')

İndiyə qədər belədir. İndi əvvəlcədən olduğu kimi eyni əmrlərlə Node-də istifadə edə bilərik. Beləliklə, bu əmri xatırlamalısınız:

SET adı Maks

Bu eyni, yalnız Node.js üçün:

client.set ('hi', 'there')

Gördüyünüz kimi, demək olar ki, eynidir. Yalnız sintaksis bir az dəyişir, müştəri obyekti vasitəsi ilə həmişə nöqtədən sonra müvafiq əmrə daxil oluruq. Əlbətdə ki, JavaScript-də tirnoq işarələrində sətirləri keçməliyik, CLI-nin özündə bu məcburiyyət deyil.

Beləliklə, burada əvvəllər öyrəndiklərimizin hamısı. Node.js ilə müqayisə ilə

Adı alın
client.get ('adı', (səhv, dəyər) => {console.log (value)})
// və ya birbaşa çap etmək üçün: (Dəyəri yalnız yazdırmayacaq) client.get ('name', console.log)

Gördüyünüz kimi, hər zaman bir şey əldə etdiyimiz bütün əmrlər üçün başqa bir funksiyadan istifadə edirik. Birinci parametr bizə mümkün səhv mesajları verir, ikincisi həqiqi nəticədir. Bəli, ikinci nümunədə göstərilən birbaşa çıxış üçün bir konsol.log funksiyasını birbaşa yaza bilərik. Əhəmiyyətli: Çıxış "null Max" olmalıdır, ancaq "null" yalnız heç bir səhv baş verməməsi deməkdir. Birinci misalda, "dəyər" yalnız açarın dəyərini birbaşa çıxarmaq üçün istifadə olunur.

Növbəti nümunə, silmək:

DEL adı
müştəri.del ('ad')

Əlavə:

APPEND adı 'və Tom'
client.append ('adı', '& Tom')

Açarın nə vaxt bitəcəyini birbaşa müəyyənləşdirin:

SET adı Max EX 60
client.set ('ad', 'Maks', 'EX', 60)

Bundan sonra bunu necə edə bilərik:

60 TƏMİR adı
client.expire ('ad', 60)

Müddəti bitənə qədər qalan müddət:

TTL adı
client.ttl ('ad', (səhv, dəyər) => {console.log (value)})

Açarın olub olmadığını yoxlamaq: (JavaScript 0 saxta, 1-i doğrudan doğrudur)

Adı mövcuddur
client.exists ('name', (error, value) => {if (value) {console.log ('Açar var')} else {console.log ('Açar mövcud deyil')}})

Hesab edirəm ki, indi prinsip aydın olmalıdır. Node.js üçün sintaksis əmrlərin növləri üçün tamamilə sabitdir, buna görə indi Redis haqqında biliklərinizi öz üzərinizdə genişləndirə və yeni öyrənilmiş əmrləri yalnız CLI-də deyil, həm də Node.js-də həyata keçirə biləcəksiniz. Axı bu çətin deyildi :)

Ancaq burada sizin üçün əlavə bir şey var - çünki hamımız Objects & JSON ilə işləməyi sevirik. Redis-də bir JS obyektini necə saxlamaq olar. Və sonra onu necə çap etmək olar

client.set ('adı', JSON.stringify ({ad: 'max', soyadı: 'meyer'}))
client.get ('adı', (err, val) => {console.log (JSON.parse (val))})

Oxumaq üçün təşəkkür edirik. Əlavələr varsa, şərhlərdə yazın. Bu məqaləyə hər zaman əlavə etməyi planlaşdırıram, buna görə tez-tez geri çekinmeyin. Redis ilə nəhayət əylənə biləcəyinizdən əvvəl son bir şey: mənə bir qucaqlama qoyun, heç bir dəyəri olmur :)

Mənim haqqımda, müəllif :)

Salam! Oxuduğunuz üçün bir daha çox təşəkkür edirəm, mənim adım Louis və mən 18 yaşında Almaniyadan bir tələbəyəm. Veb inkişafına, həm arxa, həm də ön tərəfə aşiqəm. Ən sevdiyim texnologiyalar React, Vue, React Native və Node.js-dir. Bununla əlaqəli daha çox məzmun üçün məni izlədiyinizə əmin olun və İG-nin @ louis.jsx & @ kodingcultureshop-a bir xeyir verin.