Bosh sahifa Wiki Redis

Redis

Redis — ma’lumotlarni tezkor xotirada saqlaydigan yuqori tezlikdagi ma’lumotlar ombori. Redis inglizcha Remote Dictionary Server so‘zlarining qisqartmasi bo‘lib, ko‘pincha cache, session, queue, real-time hisoblagichlar va vaqtinchalik ma’lumotlar uchun ishlatiladi.

Redis odatda RAM’da ishlaydi. Shu sababli u diskka asoslangan ko‘plab database tizimlariga qaraganda juda tez javob qaytaradi.

Vazifasi

Redis tez-tez ishlatiladigan yoki vaqtinchalik ma’lumotlarni saqlash uchun qo‘llanadi.

Redis quyidagi vazifalarda ishlatiladi:

Masalan, sayt bosh sahifasidagi mashhur maqolalar ro‘yxati Redis’da cache qilinsa, backend har safar database’dan ma’lumot o‘qimaydi.

Redis qanday ishlaydi?

Redis ma’lumotlarni kalit va qiymat ko‘rinishida saqlaydi. Har bir ma’lumotga maxsus kalit orqali murojaat qilinadi.

Oddiy misol:

user:15:name = Ali

Bu yerda user:15:name — kalit, Ali esa qiymat hisoblanadi.

Redis server xotirada ishlaydi. Client Redis’ga buyruq yuboradi, Redis esa shu buyruqqa juda tez javob qaytaradi.

Oddiy jarayon:

  • backend Redis’ga ulanadi;
  • kerakli kalit bo‘yicha ma’lumot so‘raydi;
  • Redis ma’lumot xotirada borligini tekshiradi;
  • mavjud bo‘lsa, qiymatni qaytaradi;
  • mavjud bo‘lmasa, backend boshqa manbadan ma’lumot olishi mumkin.

Key-value model

Redis ko‘pincha key-value database sifatida ishlatiladi. Bu modelda har bir qiymat kalit orqali saqlanadi.

Misollar:

  • user:1 — foydalanuvchi ma’lumoti;
  • session:abc123session qiymati;
  • post:views:45 — maqola ko‘rishlar soni;
  • cache:homepage — bosh sahifa cache’i;
  • rate:user:15 — foydalanuvchi so‘rovlar limiti.

Kalit nomlari odatda loyiha ichida tartibli nomlash qoidasi bilan yoziladi.

Redis data typelari

Redis oddiy matnli qiymat bilan cheklanmaydi. U bir nechta ma’lumot turini qo‘llab-quvvatlaydi.

Redis’da keng ishlatiladigan data typelar:

  • String — oddiy matn, son yoki JSON saqlash uchun;
  • List — tartibli ro‘yxat;
  • Set — takrorlanmaydigan qiymatlar to‘plami;
  • Hash — obyektga o‘xshash kalit-qiymat maydonlari;
  • Sorted Set — qiymatlarni score bo‘yicha tartibli saqlash;
  • Stream — voqealar oqimi yoki xabarlar ketma-ketligi;
  • Bitmap — bit darajasidagi ma’lumotlar;
  • HyperLogLog — taxminiy unique hisoblash uchun.

Har bir data type alohida vazifalarda samarali ishlatiladi.

String

String Redis’dagi eng oddiy ma’lumot turi. U matn, son, token yoki JSON satrini saqlashi mumkin.

String quyidagi holatlarda ishlatiladi:

  • oddiy cache qiymati;
  • access token;
  • hisoblagich;
  • sozlama qiymati;
  • vaqtinchalik kod;
  • JSON matn;
  • flag holati.

Misol:

SET site:name "UzbekDevs"

Bu buyruq site:name kaliti ostida UzbekDevs qiymatini saqlaydi.

Hash

Hash bir kalit ostida bir nechta maydon va qiymatlarni saqlash uchun ishlatiladi. U obyektga o‘xshash tuzilishga ega.

Misol:

user:1

Maydonlar:

Hash quyidagi ma’lumotlar uchun ishlatilishi mumkin:

  • foydalanuvchi profili;
  • mahsulot ma’lumoti;
  • sozlamalar;
  • session tafsilotlari;
  • vaqtinchalik obyektlar.

List

List Redis’da tartibli ro‘yxat saqlash uchun ishlatiladi. List boshidan yoki oxiridan element qo‘shish va olish imkonini beradi.

List quyidagi joylarda ishlatilishi mumkin:

  • queue;
  • oxirgi xabarlar;
  • recent activity;
  • loglar ketma-ketligi;
  • background tasklar ro‘yxati.

Masalan, yangi tasklar list oxiriga qo‘shilishi va worker ularni boshidan olib bajarishi mumkin.

Set

Set takrorlanmaydigan qiymatlar to‘plamini saqlaydi. Bitta set ichida bir xil qiymat ikki marta turmaydi.

Set quyidagi holatlarda ishlatiladi:

  • online foydalanuvchilar;
  • maqolani ko‘rgan unique userlar;
  • teglar;
  • ruxsatlar to‘plami;
  • guruh a’zolari;
  • bloklangan IP manzillar.

Set orqali qiymat mavjudligini tez tekshirish mumkin.

Sorted Set

Sorted Set qiymatlarni score bo‘yicha tartibli saqlaydi. Har bir elementga sonli score biriktiriladi.

Sorted Set quyidagi holatlarda ishlatiladi:

  • leaderboard;
  • reyting tizimi;
  • eng ko‘p ko‘rilgan maqolalar;
  • ballar jadvali;
  • vaqt bo‘yicha tartiblangan ro‘yxat;
  • priority queue.

Masalan, foydalanuvchilar ballari score sifatida saqlanib, eng yuqori natijalar tez olinishi mumkin.

TTL

TTL — Redis’da kalit qancha vaqt yashashini bildiradi. TTL inglizcha Time To Live so‘zlarining qisqartmasi.

TTL quyidagi holatlarda ishlatiladi:

Masalan, login tasdiqlash kodi Redis’da 5 daqiqaga saqlanishi mumkin. Muddat tugagach, kalit avtomatik o‘chadi.

Cache

Redis’ning eng keng tarqalgan vazifalaridan biri cache hisoblanadi. Cache tez-tez ishlatiladigan ma’lumotni vaqtincha saqlab, tizim javobini tezlashtiradi.

Redis cache quyidagi ma’lumotlar uchun ishlatilishi mumkin:

  • bosh sahifa ma’lumotlari;
  • maqolalar ro‘yxati;
  • foydalanuvchi profili;
  • kategoriya ro‘yxati;
  • API javoblari;
  • sozlamalar;
  • hisoblangan statistika.

Cache ishlatilganda backend har safar database’dan ma’lumot o‘qimasligi mumkin.

Session

Redis web ilovalarda session ma’lumotlarini saqlash uchun ishlatiladi. Session foydalanuvchining tizimdagi vaqtinchalik holatini bildiradi.

Session ichida quyidagilar bo‘lishi mumkin:

  • user ID;
  • login holati;
  • role;
  • token;
  • vaqtinchalik sozlamalar;
  • savatcha ma’lumotlari;
  • device ma’lumoti.

Redis session uchun qulay, chunki u tez ishlaydi va TTL orqali session muddatini boshqarish mumkin.

Rate limiting

Redis rate limiting uchun ham ko‘p ishlatiladi. Rate limiting foydalanuvchi yoki IP manzil ma’lum vaqt ichida nechta so‘rov yuborishini cheklaydi.

Rate limiting quyidagi joylarda ishlatiladi:

  • login urinishlari;
  • SMS kod yuborish;
  • API so‘rovlari;
  • botlardan himoya;
  • forma yuborish;
  • parol tiklash;
  • public endpointlar.

Masalan, bitta IP manzil 1 daqiqada 60 tadan ortiq so‘rov yubormasligi Redis hisoblagichi orqali nazorat qilinishi mumkin.

Pub/Sub

Redis Pub/Sub mexanizmini qo‘llab-quvvatlaydi. Pub/Sub xabar yuboruvchi va xabarni tinglovchi tizimlar o‘rtasida real-time aloqa yaratadi.

Pub/Sub qismlari:

  • Publisher — xabar yuboruvchi;
  • Subscriber — xabarni tinglovchi;
  • Channel — xabar yuboriladigan kanal.

Pub/Sub quyidagi holatlarda ishlatilishi mumkin:

  • real-time notification;
  • chat tizimlari;
  • status yangilanishlari;
  • workerlar o‘rtasida xabar almashish;
  • event broadcasting.

Queue

Redis queue sifatida ham ishlatilishi mumkin. Queue vazifalarni navbatga qo‘yish va ularni workerlar orqali bajarish uchun ishlatiladi.

Queue quyidagi vazifalarda ishlatiladi:

  • email yuborish;
  • rasmni qayta ishlash;
  • fayl konvertatsiya qilish;
  • notification yuborish;
  • hisobot tayyorlash;
  • scraping tasklar;
  • background joblar.

Masalan, foydalanuvchi rasm yuklaganda backend taskni Redis queue’ga qo‘shadi, worker esa uni keyinroq qayta ishlaydi.

Persistence

Redis asosan RAM’da ishlaydi, lekin ayrim holatlarda ma’lumotni diskka ham saqlashi mumkin. Bu persistence deyiladi.

Redis persistence usullari:

  • RDB — ma’lumotlarning vaqti-vaqti bilan snapshot ko‘rinishida saqlanishi;
  • AOF — bajarilgan yozish buyruqlarini log sifatida saqlash;
  • RDB + AOF — ikkala usulni birga ishlatish.

Persistence Redis qayta ishga tushganda ma’lumotlarni tiklash imkonini beradi.

Redis va database farqi

Redis va relational database bir xil maqsadda ishlatilmaydi.

  • Redis RAM’da ishlaydi va juda tez javob beradi;
  • PostgreSQL yoki MySQL ma’lumotlarni asosiy database sifatida saqlaydi;
  • Redis ko‘pincha vaqtinchalik yoki tezkor ma’lumotlar uchun;
  • Relational database doimiy, tartibli va bog‘langan ma’lumotlar uchun;
  • Redis key-value va boshqa data typelar bilan ishlaydi;
  • SQL database jadval va SQL querylarga asoslanadi.

Ko‘p loyihalarda Redis asosiy database o‘rnini emas, balki uni tezlashtiruvchi qo‘shimcha qatlam vazifasini bajaradi.

Redis va backend

Backend ilovalarda Redis tez-tez ishlatiladi. Django, FastAPI, Laravel, Express.js, NestJS va boshqa backend frameworklar Redis bilan ishlay oladi.

Backend’da Redis quyidagi joylarda uchraydi:

Masalan, Django loyihasida Redis cache backend yoki Celery broker sifatida ishlatilishi mumkin.

Redis va Docker

Redis Docker container ichida ishlatilishi mumkin. Development va production muhitlarda Redis ko‘pincha alohida service sifatida ko‘tariladi.

Docker Compose’da Redis uchun odatda quyidagilar sozlanadi:

Backend ilova Redis containerga service nomi orqali ulanishi mumkin. Masalan, redis:6379.

Bog‘liq tushunchalar

Cache, Database, Backend, Session, Queue, Celery, Docker, API, Rate limiting, Pub/Sub, RAM, Server