Darslik · 2026-02-08 · ~2 daqiqa o‘qiladi · o'rta
Redis bilan keshlash strategiyalari
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.