Bosh sahifa Wiki Cache invalidation

Cache invalidation

Cache invalidation — asosiy ma’lumot o‘zgarganda keshdagi eski nusxani yaroqsiz deb belgilash, yangilash yoki o‘chirish jarayonidir. Cache o‘qishni tezlashtiradi, biroq undagi qiymat source of truth bilan bir xil vaqtda avtomatik o‘zgarmasa, foydalanuvchi eskirgan natija ko‘radi. Invalidation siyosati tezlik, izchillik va murakkablik orasidagi muvozanatni belgilaydi.

Vaqtga asoslangan eskirish

Time to live qiymatga amal qilish muddatini beradi. TTL tugagach keyingi o‘qish ma’lumotni asosiy manbadan qayta oladi. Bu sodda va yozuv yo‘lini o‘zgartirmaydi, ammo ma’lumot TTL davomida eski bo‘lishi mumkin. Juda qisqa TTL hit rateni kamaytirib, database yukini oshiradi.

Expirationga tasodifiy jitter qo‘shish ko‘p keyning bir vaqtda tugashini kamaytiradi. Aks holda mashhur qiymatlar birdan bazaga murojaat qilib cache stampede keltirishi mumkin.

Yozuv strategiyalari

Cache-aside modelida ilova avval cachega qaraydi, miss bo‘lsa database’dan olib cachega yozadi. Update paytida database yozilib, tegishli key o‘chiriladi. O‘chirish ko‘pincha yangi qiymatni yozishdan xavfsizroq, chunki key formatining boshqa variantlari va transaction tartibi hisobga olinadi.

Write-throughda yozuv cache orqali asosiy storagega o‘tadi va ikkala qatlam yangilanadi. Write-behind cache o‘zgarishni keyinroq storagega uzatadi; tez, lekin cache nosozligida durability xavfi va murakkab replay talab qiladi.

Race condition

Bir process eski qiymatni database’dan o‘qiyotgan paytda boshqa process yangilab cache keyni o‘chirishi mumkin. Birinchi process keyin eski qiymatni cachega qayta yozsa, invalidation yo‘qqa chiqadi. Version token, qisqa TTL, transactiondan keyingi event yoki compare-and-set bunday poygani boshqarishga yordam beradi.

Database commitdan oldin cache o‘chirilsa, boshqa request hali eski database qiymatini o‘qib cachega joylaydi. Invalidation commitdan keyin bajariladi. Biroq commit muvaffaqiyatli, cache delete muvaffaqiyatsiz bo‘lsa, reliable event yoki outbox orqali qayta urinish kerak.

Kalit va bog‘liqliklar

Bitta obyekt turli cache keylarda ko‘rinishi mumkin: detail, ro‘yxat, qidiruv va agregat. Faqat detail keyni o‘chirish ro‘yxatdagi eski natijani qoldiradi. Dependency graph, tag-based invalidation yoki namespace version barcha bog‘liq qiymatlarni aniqlashga yordam beradi.

Namespace versiyada kalitga versiya prefiksi qo‘shiladi. Katta invalidationda versiya o‘zgartiriladi va eski keylar TTL bilan tabiiy yo‘qoladi. Bu bulk delete xarajatini kamaytiradi, lekin vaqtincha ikki nusxa xotira egallaydi.

Taqsimlangan kesh

CDN, browser va server cache bir xil resursning alohida nusxalarini saqlaydi. Origin keyni o‘chirish browser cache’ini o‘zgartirmaydi. HTTP Cache-Control, ETag, purge API va content-hash URLlar qatlamga mos ishlatiladi. Purge barcha edge nuqtaga yetib borishi vaqt olishi mumkin.

Stale-while-revalidate

Stale-while-revalidate siyosati muddati tugagan qiymatni qisqa davr foydalanuvchiga qaytarib, yangilashni fonda boshlaydi. Bu request latencyni barqaror saqlaydi va ko‘p clientning ayni qiymatni bir vaqtda qayta hisoblashini kamaytiradi. Faqat bitta worker refresh qilishi uchun distributed lock yoki request coalescing ishlatilishi mumkin. Lockning o‘zi muddatsiz qolmasligi kerak. Yangilash xato bersa stale-if-error eski qiymatni ma’lum limitgacha xizmatda saqlashi mumkin. Moliyaviy balans kabi kuchli izchillik talab qiladigan ma’lumotda stale javob maqbul emas; cache siyosati resurs semantikasiga bog‘liq.

Cache metrikalarida hit rate bilan birga miss latency, eviction, memory va stale javoblar kuzatiladi. Yuqori hit rate noto‘g‘ri eski qiymat qaytarilayotgan bo‘lsa sifat belgisi hisoblanmaydi. Invalidation hodisasi key, versiya va sabab bilan loglanishi diagnostikani yengillashtiradi.

Bog‘liq tushunchalar

cache, TTL, cache-aside, cache stampede, ETag, CDN, eventual consistency