Asosiy kontentga o‘tish

Maqolalar

Darslik · 2026-02-08 · ~2 daqiqa o‘qiladi · o'rta

Redis bilan keshlash strategiyalari

#backend #redis #performance

Mundarija

Ma'lumotlar bazasi so‘rovi qimmat. Agar bir xil ma'lumot qayta-qayta so‘ralsa, uni Redis'da keshlab, bazani tinch qoldirish mumkin. Lekin keshlashning o‘z qoidalari bor.

Cache-aside (eng ko‘p ishlatiladigan)#

Ilova avval keshdan qaraydi, bo‘lmasa bazadan oladi va keshga yozadi:

def get_user(user_id):
    key = f"user:{user_id}"
    cached = redis.get(key)
    if cached:
        return json.loads(cached)

    user = db.get_user(user_id)          # bazadan
    redis.setex(key, 300, json.dumps(user))  # 5 daqiqaga keshla
    return user

Sodda va ishonchli. Ko‘p holatlar uchun shu yetarli.

TTL — muddat qo‘yish#

setex dagi 300 — muddat (soniyada). Muddat tugagach, kesh o‘zi o‘chadi va keyingi so‘rov yangi ma'lumot oladi. Bu eskirgan ma'lumot muammosini avtomatik cheklaydi.

Qoida: qanchalik tez-tez o‘zgaradigan ma'lumot bo‘lsa, TTL shunchalik qisqa. Kamdan-kam o‘zgaradigan (masalan, kategoriyalar ro‘yxati) — uzoq TTL.

Kesh invalidatsiya — eng qiyin qism#

"Kompyuter fanidagi ikki qiyin narsa bor: kesh invalidatsiya va nomlash." Ma'lumot o‘zgarganda keshni yangilash kerak:

def update_user(user_id, data):
    db.update_user(user_id, data)
    redis.delete(f"user:{user_id}")  # keshni tozala

Ma'lumot o‘zgargach keshni o‘chirasiz — keyingi so‘rov yangisini oladi va qayta keshlaydi.

Nimani keshlamaslik kerak#

  • Tez-tez o‘zgaradigan va aniqlik muhim bo‘lgan ma'lumot (masalan, hisob balansi)
  • Har foydalanuvchi uchun noyob va bir marta ishlatiladigan ma'lumot
  • Xavfsizlikka oid tekshiruvlar (ruxsatlarni keshlash xavfli bo‘lishi mumkin)

Keshlash — kuchli, lekin murakkablik qo‘shadi. Avval o‘lchang: haqiqatan sekin joyni keshlang, "har ehtimolga qarshi" emas.