TTL: bu nima, keshning umr muddati va qanday ishlaydi

Muallif: IT Sectr Nashr etilgan: 2026-06-13 O'qish vaqti: 8 daq

TTL (Time To Live) — ma'lumotlar haqiqiy deb hisoblanadigan maksimal vaqtni belgilovchi parametr. TTL muddati tugagach, yozuv eskirgan (stale) deb belgilanadi va o'chirilishi yoki yangilanishi kerak. Mozilla Developer Network (2026) ma'lumotlariga ko'ra, TTL mexanizmi Cache-Control: max-age sarlavhasi orqali HTTP keshning asosini tashkil qiladi va tarmoq so'rovlarini optimallashtirish uchun barcha zamonaviy brauzerlar va mobil ilovalarda qo'llaniladi.

Asosiy

  • TTL (Time To Live) — yozuvning umr muddati, undan keyin ma'lumotlar eskirgan deb hisoblanadi va yangilash talab qiladi
  • Balans — qisqa TTL dolzarb ma'lumot beradi, lekin kesh samaradorligini pasaytiradi; uzoq TTL ishlashni oshiradi, lekin eskirish xavfini tug'diradi
  • HTTP keshlash — Cache-Control: max-age sarlavhasi server javoblari uchun TTLni soniyalarda belgilaydi
  • DNS yozuvlari — TTL rezolver domenning IP manzilini qancha vaqt keshda saqlashini belgilaydi (60 dan 86400 soniyagacha)
  • Mobil ilovalar — TTL API javoblarini, rasmlarni va sessiya ma'lumotlarini keshlash uchun ishlatiladi

TTL nima?

TTL (Time To Live) — muddati tugaganidan keyin ma'lumotlar haqiqiy emas deb hisoblanadigan vaqt belgisi yoki intervaldir. Keshlash kontekstida TTL yozuvni asl manbadan qayta so'rashdan oldin keshda qancha vaqt saqlash mumkinligini belgilaydi. Tarmoq protokollarida TTL paketning umr muddatini cheklab, cheksiz marshrutlashni oldini oladi.

TTL qiymati har doim vaqt birliklarida ifodalanadi: millisoniyalar, soniyalar, daqiqalar yoki soatlar. Belgilangan vaqt tugaganidan keyin yozuv keshdan o'chiriladi yoki stale (eskirgan) deb belgilanadi. Eskirgan yozuvga keyingi so'rovda tizim keyinchalik yangilash bilan eskirgan ma'lumotlarni qaytarishi (stale-while-revalidate) yoki yangi ma'lumot olinmaguncha so'rovni bloklashi mumkin.

TTL tanlash har doim ma'lumotlarning dolzarbligi va ishlash o'rtasidagi kelishuvdir. Juda qisqa TTL (1-5 soniya) ilovani tez-tez tarmoq so'rovlarini bajarishga majbur qilib, keshlashning foydasini kamaytiradi. Juda uzoq TTL (soatlar/kunlar) foydalanuvchiga eskirgan ma'lumotlarni ko'rsatish xavfini oshiradi. Optimal qiymat ma'lumot turiga bog'liq: valyuta kurslari — soniyalar, ob-havo — daqiqalar, API versiyasi — soatlar.

TTL va keshni bekor qilish

TTL passiv bekor qilishdir: ma'lumotlar vaqt tugagandan keyin avtomatik o'chiriladi. Muqobil — aktiv bekor qilish, bunda ma'lumot manbai keshni o'zgarishlar haqida xabardor qiladi (masalan, WebSocket xabarlari yoki push bildirishnomalari orqali). Passiv bekor qilish TTL orqali amalga oshirish osonroq, lekin bir zumda dolzarblikni kafolatlamaydi. Aktiv bekor qilish murakkabroq, lekin TTLga xos kechikishlarsiz ma'lumotlarni dolzarb holatda saqlashga imkon beradi.

TTL qanday ishlaydi

TTL mexanizmi ikki usulda amalga oshirilishi mumkin: mutlaq tugash (absolute expiration) va nisbiy tugash (relative expiration). Mutlaq tugashda yozuv haqiqiy emas bo'ladigan aniq vaqtni saqlaydi. Nisbiy tugashda — yozuvning yaratilish vaqti va TTL interval sifatida qayd etiladi, tekshirish esa creationTime + TTL > currentTime hisoblanadi.

Keshga har bir so'rovda tizim har bir yozuvning TTLni tekshiradi. Agar TTL tugagan bo'lsa, ma'lumotlar o'chiriladi yoki stale deb belgilanadi va so'rov manbaga yo'naltiriladi. TTL tekshiruvini optimallashtirish uchun scheduled-cleanup (muddati o'tgan barcha yozuvlarni davriy o'chirish) yoki lazy-cleanup (faqat yozuvga murojaat qilinganda o'chirish) ishlatilishi mumkin. Lazy-cleanup xotira jihatdan samaraliroq, chunki butun keshni skanerlash uchun fon oqimini talab qilmaydi.

Tarqalgan tizimlarda TTL avtomatik nizolarni hal qilish uchun ham ishlatiladi. Masalan, ikki server bir vaqtning o'zida bir kalit uchun turli qiymatlarni yozgan bo'lsa, kechroq TTLga ega yozuv ustuvor hisoblanishi mumkin. Amazon DynamoDB jadvallarda eskirgan yozuvlarni avtomatik o'chirish uchun TTLdan foydalanadi — bu qo'lda boshqarishni talab qilmaydigan o'rnatilgan funksiyadir.

Eskirgan o'qish strategiyalari

TTL tugagandan keyin ishlashni oshirish uchun eskirgan o'qish strategiyalari qo'llaniladi. Stale-while-revalidate — darhol mijozga eskirgan ma'lumotlarni qaytar va bir vaqtda fon yangilanishini ishga tushir. Stale-if-error — manba vaqtincha mavjud bo'lmasa, eskirgan ma'lumotlarni qaytar. Cache-Aside (Lazy Loading) — kesh bo'sh bo'lganda ma'lumotlarni manbadan yukla, yangi TTL bilan keshda saqla va keyin mijozga qaytar. Har bir strategiya ma'lumotlar izchilligi talablariga asoslanib tanlanadi.

TTL ma'lumotlarni keshlashda

Mobil ilovalarda TTL kesh boshqaruvining asosiy mexanizmidir. TTL ilova xatti-harakati va foydalanuvchi tajribasini belgilaydigan asosiy stsenariylarni ko'rib chiqamiz.

HTTP javoblarini keshlash

HTTP protokoli Cache-Control sarlavhalari orqali o'rnatilgan TTL mexanizmini taqdim etadi. max-age direktivasi TTLni soniyalarda belgilaydi: Cache-Control: public, max-age=3600 javobni 1 soat keshlash mumkinligini anglatadi. Qo'shimcha direktivalar s-maxage (umumiy keshlar uchun, masalan, CDN) va stale-while-revalidate nozikroq boshqarishni ta'minlaydi. TTL expires sarlavhasi bilan mos kelganda, zamonaviyroq HTTP/1.1 standarti sifatida max-age ustunlikka ega.

Ma'lumot turiTavsiya etilgan TTLAsoslash
Ob-havo10-30 daqiqaPrognozlar tez-tez yangilanmaydi
Valyuta kurslari15-60 soniyaYuqori o'zgaruvchanlik
Yangiliklar lentasi2-5 daqiqaYangilik va ishlash muvozanati
Foydalanuvchi profili5-30 daqiqaSessiyada kam o'zgaradi
Mahsulotlar ro'yxati10-60 daqiqaNarxlar har soniya o'zgarmaydi
Statik resurslar1-24 soatURL yoki ETag orqali versiyalanadi

Rasmlarni keshlash

Rasmlar uchun TTL bir necha kunga yetishi mumkin, chunki mazmun kam o'zgaradi. Biroq mobil ilovalar ko'pincha gibrid yondashuvdan foydalanadi: kichik rasmlar uchun qisqa TTL (30 daqiqa — ramkalarning dolzarbligi) va to'liq o'lchamdagi rasmlar uchun uzoq TTL (7 kun). Rasmlar HTTP Cache-Control: immutable sarlavhasi bilan TTL tugaguncha umuman qayta so'ralmasligi kerak — bu RFC 8246 da taklif qilingan statik resurslar uchun optimallashtirishdir. Bunday rasmlar ilova ishtirokisiz OT darajasida (URLCache, OkHttp Cache) keshlanadi.

TTL tarmoq protokollarida

Tarmoqlarda TTL keshlash uchun emas, balki paketlarning umr muddatini cheklash uchun ishlatiladi. Har bir IP paketi TTL maydonini (8 bit) o'z ichiga oladi, har bir marshrutizator uni 1 ga kamaytiradi. TTL 0 ga yetganda paket tashlanadi va jo'natuvchiga ICMP Time Exceeded xabari qaytariladi. Bu tarmoqdagi halqalarda cheksiz marshrutlashni oldini oladi.

DNSda TTL

DNS yozuvlari rezolverning (masalan, ISP DNS keshi) vakolatli serverga so'rov bermasdan yozuvni qancha vaqt saqlashi mumkinligini belgilaydigan TTLga ega. Odatiy qiymatlar: tez-tez o'zgaradigan yozuvlar uchun 300 soniya (5 daqiqa), barqaror domenlar uchun 86400 soniya (24 soat). CDN xizmatlari nosozliklar paytida trafikni tez yo'naltirish uchun ko'pincha past TTL (60-300 soniya) o'rnatadi, statik domenlar esa 7 kungacha TTLga ega bo'lishi mumkin. Serverni ko'chirishda avval TTLni 60 soniyaga tushirish tavsiya etiladi (ko'chirishdan 48 soat oldin), o'zgarishlar tez tarqalishi uchun.

Sessiyalar va tokenlarda TTL

Mobil ilovalarda TTL sessiyalar va kirish tokenlarini boshqarish uchun ishlatiladi. JWT tokenlari (JSON Web Tokens) exp maydonini (tugash vaqti) o'z ichiga oladi, bu mutlaq Unix tugash vaqti. Tugagandan so'ng, yangilash tokeni (refresh token) qayta autentifikatsiyasiz yangi kirish tokenini olish uchun ishlatiladi. Kirish tokenining TTL odatda 1-24 soat, yangilash tokenining TTL esa 7-30 kun. Bu xavfsizlik (qisqa TTL sizish xavfini kamaytiradi) va foydalanuvchi tajribasi (uzoq TTL qayta kirishlar chastotasini kamaytiradi) o'rtasidagi muvozanatdir.

TTL tanlash strategiyalari

TTL tanlash ma'lumot turiga, dolzarblik SLAga va qayta so'rov narxiga bog'liq bo'lgan muhandislik qaroridir. Asosiy strategiyalarni ko'rib chiqamiz.

Ruxsat etilgan TTL

Eng oddiy yondashuv — barcha yozuvlar bir xil TTLga ega. Masalan, barcha API javoblarini 5 daqiqa keshlash. Afzallik: amalga oshirish soddaligi va bashorat qilinadigan xatti-harakat. Kamchilik: turli ma'lumot turlarining turli o'zgarish chastotasini hisobga olmaydi. Ruxsat etilgan TTL barcha yozuvlar bir xil yangilikka ega bo'lgan bir hil ma'lumotlar uchun asoslanadi — masalan, bir birjada kriptovalyuta kursi.

Adaptiv TTL

TTL ma'lumotlarning xatti-harakatiga qarab dinamik o'zgaradi. Masalan, yozuv serverda kamdan-kam yangilansa, TTL ortadi; tez-tez yangilansa — kamayadi. Amalga oshirish HTTP javob sarlavhalaridan foydalanishi mumkin: Age sarlavhasi (javob keshda necha soniya bo'lgan) va Date sarlavhasi qolgan umr vaqtini hisoblash imkonini beradi. Adaptiv TTL yaxshiroq hit-ratio beradi, lekin mijoz tomonda qo'shimcha mantiq talab qiladi.

Ehtimoliy tugash bilan TTL

Probabilistic Early Expiration (PEE) — TTL ma'lum diapazonda tasodifiy tanlanadigan texnikadir. Bu ko'plab so'rovlar bir vaqtda tugab, barcha mijozlar bir vaqtda manbaga murojaat qiladigan "poda effekti" (thundering herd) oldini oladi. PEE ayniqsa CDN va yuqori yuklamali keshlar uchun foydali: yagona 300 soniyalik TTL o'rniga 240 dan 360 soniyagacha tasodifiy qiymat ishlatiladi, bu manba yukini teng taqsimlaydi.

TTL kod misollari

Mutlaq tugashdan foydalanib Kotlin tilida TTL bilan keshni amalga oshirishni ko'rib chiqamiz. Har bir yozuv yaratilish vaqtini saqlaydi va o'qishda TTL tugaganligi tekshiriladi.

kotlin
class TtlCache<K, V>(
    private val defaultTtlMs: Long = 300000L
) {
    private data class Entry<V>(
        val value: V,
        val createdAt: Long = System.currentTimeMillis()
    )

    private val map = ConcurrentHashMap<K, Entry<V>>()

    fun get(key: K): V? {
        val entry = map[key] ?: return null
        if (isExpired(entry)) {
            map.remove(key)
            return null
        }
        return entry.value
    }

    fun put(key: K, value: V, ttlMs: Long = defaultTtlMs) {
        map[key] = Entry(value, createdAt = System.currentTimeMillis() + ttlMs)
    }

    private fun isExpired(entry: Entry<*>): Boolean {
        return System.currentTimeMillis() > entry.createdAt
    }

    fun cleanup() {
        map.entries.removeIf { isExpired(it.value) }
    }
}

Entry klassi qiymat va yaratilish vaqti + TTL (mutlaq tugash) saqlaydi. get metodi har bir murojaatda tugashni tekshiradi (lazy-cleanup) — muddati o'tgan yozuvlar faqat ularga kirishga urinilganda o'chiriladi. cleanup metodini barcha eskirgan yozuvlarni ommaviy o'chirish uchun fon oqimidan davriy chaqirish mumkin. ConcurrentHashMap butun keshni bloklamasdan oqim xavfsizligini ta'minlaydi.

Misol: iOSda API javoblarini keshlash uchun TTL

iOSda TTL bilan keshlash uchun URLCache dan memoryCapacity va diskCapacity sozlamalari bilan foydalanish qulay. Biroq URLCache turli so'rovlar uchun individual TTLni qo'llab-quvvatlamaydi. TTL qo'llab-quvvatlashi bilan NSCache ning maxsus o'ramini ko'rib chiqamiz.

swift
final class ApiResponseCache {
    private var cache = NSCache<NSString, CacheEntry>()

    func getResponse(for url: URL) -> Data? {
        guard let entry = cache.object(forKey: url.absoluteString as NSString)
            else { return nil }
        guard entry.expirationDate > Date() else {
            cache.removeObject(forKey: url.absoluteString as NSString)
            return nil
        }
        return entry.data
    }

    func storeResponse(data: Data, for url: URL, ttl: TimeInterval) {
        let entry = CacheEntry(data: data, expirationDate: Date().addingTimeInterval(ttl))
        cache.setObject(entry, forKey: url.absoluteString as NSString)
    }
}

final class CacheEntry: NSObject {
    let data: Data
    let expirationDate: Date
}

Ushbu amalga oshirishda NSCache oqim xavfsiz ombor sifatida ishlatiladi. CacheEntry Data va expirationDate ni o'z ichiga oladi. get paytida vaqt tugaganligi tekshiriladi; tugagan bo'lsa — yozuv o'chiriladi va nil qaytariladi. TTL TimeInterval orqali soniyalarda o'rnatiladi va har bir URL uchun farqli bo'lishi mumkin: API javoblari uchun odatiy qiymatlar dinamik mazmun uchun 120 soniya va statik ma'lumotlar uchun 3600 soniya.

Tez-tez beriladigan savollar

TTL ma'lumotlarning yaroqlilik muddatidan qanday farq qiladi?

Texnik jihatdan TTL va yaroqlilik muddati bir xil: muddati tugaganidan keyin ma'lumotlar haqiqiy emas deb hisoblanadigan vaqt oralig'i. Farq kontekstda: TTL atamasi ITda (keshlar, tarmoqlar, DNS) ishlatiladi, "yaroqlilik muddati" esa ko'pincha biznes mantiqida (promo kodlar, obunalar) qo'llaniladi. Amalga oshirishda ikkala mexanizm bir xil — joriy vaqtni tugash vaqti bilan solishtirish.

Optimal TTLni qanday tanlash mumkin?

Optimal TTL empirik tarzda tanlanadi. Metodika: konservativ qiymat bilan boshlang (30-60 soniya), eskirgan ma'lumotlar haqida shikoyatlar paydo bo'lguncha asta-sekin oshiring. Kesh hit-ratio sini kuzating: agar 70% dan past bo'lsa, TTL juda qisqa. SLA ni hisobga oling: moliyaviy ma'lumotlar uchun TTL 1 soniya, yangiliklar uchun — 5 daqiqa, profillar uchun — 30 daqiqa bo'lishi mumkin.

HTTPda TTL tugagandan keyin nima bo'ladi?

max-age tugagandan keyin brauzer yoki mobil ilova javobni stale (eskirgan) deb hisoblaydi. Xuddi shu URLga keyingi so'rovda mijoz If-None-Match (ETag) yoki If-Modified-Since sarlavhasi bilan so'rov yuboradi. Ma'lumotlar o'zgarmagan bo'lsa, server javob tanasisiz 304 Not Modified qaytaradi va TTL yangilanadi. O'zgargan bo'lsa — server yangi ma'lumotlar va yangi Cache-Control bilan 200 qaytaradi.

TTL cheksiz bo'lishi mumkinmi?

Texnik jihatdan TTL juda katta bo'lishi mumkin (max-age=31536000 — 1 yil), lekin bu kamdan-kam asoslanadi. Hatto statik resurslar o'zgarishi mumkin va mijoz TTL tugaguncha bu haqda bilmaydi. Versiyalangan URL lardan (style.css?v=2) uzoq TTL bilan foydalanish tavsiya etiladi: fayl o'zgarganda URL o'zgaradi va eski kesh avtomatik eskiradi.

TTL LRU va FIFO bilan qanday bog'liq?

TTL va siqib chiqarish strategiyalari (LRU, FIFO) turli vazifalarni hal qiladi. TTL ma'lumotlar qachon eskirishini belgilaydi — bu vaqt mezonidir. LRU va FIFO kesh to'lganda qaysi ma'lumotlarni o'chirishni belgilaydi — bu joy mezonidir. Ular birlashtirilishi mumkin: yozuv TTL tugagan YOKI kesh to'lgan bo'lsa (LRU/FIFO bo'yicha) o'chiriladi. Ishlab chiqarish tizimlarida ikkala mexanizm birgalikda ishlaydi.

Xulosa

  • TTL (Time To Live) — yozuvning umr muddati, undan keyin ma'lumotlar eskirgan deb hisoblanadi va yangilash talab qiladi
  • Mutlaq tugash — yozuv aniq tugash vaqtini saqlaydi; nisbiy — yaratilish vaqti + interval
  • Balans — qisqa TTL keshlash samaradorligini pasaytiradi, uzoq TTL eskirgan ma'lumotlar xavfini oshiradi
  • HTTP Cache-Control — max-age server javobining TTLni soniyalarda stale rejimlarini qo'llab-quvvatlab belgilaydi
  • DNS hal qilish — 60 dan 86400 soniyagacha TTL domen IP manzilining qancha keshlanishini belgilaydi
  • Strategiyalar — ruxsat etilgan, adaptiv va ehtimoliy TTL ma'lumot turiga qarab qo'llaniladi
  • Foydalaning TTLni LRU/FIFO bilan birgalikda keshning to'liq hayot aylanishini boshqarish uchun

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing