Cache Expiry এবং Refresh Techniques

Caching এবং Performance Tuning - টাইনিডিবি (TinyDB) - Database Tutorials

294

Cache Expiry এবং Cache Refresh হল দুইটি গুরুত্বপূর্ণ কৌশল যা ক্যাশ ব্যবস্থাপনার ক্ষেত্রে ব্যবহৃত হয়, বিশেষত যখন ডেটা দ্রুত পরিবর্তনশীল এবং ক্যাশের মধ্যে রাখা ডেটার আপডেট প্রয়োজন।

Cache Expiry ক্যাশে রাখা ডেটার "জীবনকাল" নির্ধারণ করে, যেখানে ডেটা নির্দিষ্ট সময় পর পুরনো হয়ে যায় এবং ক্যাশ থেকে স্বয়ংক্রিয়ভাবে মুছে যায়। অন্যদিকে, Cache Refresh হল একটি প্রক্রিয়া যার মাধ্যমে পুরানো বা এক্সপায়ার হওয়া ডেটা নতুন ডেটা দিয়ে আপডেট করা হয়।

নিচে ক্যাশ এক্সপায়ারি এবং রিফ্রেশের কিছু সাধারণ কৌশল এবং তাদের ব্যবহার নিয়ে আলোচনা করা হয়েছে।


১. Cache Expiry Techniques

Cache Expiry হল একটি পদ্ধতি যেখানে ক্যাশে রাখা ডেটা একটি নির্দিষ্ট সময় পর অপ্রয়োজনীয় বা পুরনো হয়ে যায় এবং ক্যাশ সিস্টেম স্বয়ংক্রিয়ভাবে তা মুছে ফেলে। সাধারণভাবে, ক্যাশের ডেটার বৈধতা সময়কাল (TTL, Time-To-Live) নির্ধারণ করে, এবং এটি ক্যাশে রাখার সময়কাল শেষ হলে ডেটা মুছে ফেলা হয়।

১.১ Time-to-Live (TTL)

TTL একটি সময়সীমা নির্ধারণ করে, যার মধ্যে ক্যাশের ডেটা বৈধ থাকে। যখন TTL শেষ হয়ে যায়, ক্যাশে থাকা ডেটা অপ্রচলিত হয়ে পড়ে এবং মুছে ফেলা হয়। এই সময়কাল নির্ধারণ করা হয় যে ডেটার আপডেট কত দ্রুত হওয়া দরকার বা ডেটার পরিবর্তন কতটা সাধারণ।

উদাহরণ:

import time

class Cache:
    def __init__(self):
        self.cache = {}
        
    def set(self, key, value, ttl):
        expiry_time = time.time() + ttl
        self.cache[key] = {'value': value, 'expiry': expiry_time}
    
    def get(self, key):
        if key in self.cache:
            data = self.cache[key]
            if data['expiry'] > time.time():  # Check if data is still valid
                return data['value']
            else:
                del self.cache[key]  # Remove expired data
        return None

এখানে, set() ফাংশনে TTL (যেমন 300 সেকেন্ড) পাস করা হয়, যা ডেটার বৈধতা সময় নির্ধারণ করে।


১.২ Sliding Expiry

এটি একটি কৌশল যেখানে ক্যাশে থাকা ডেটার TTL শেষ না হওয়া পর্যন্ত ডেটা এক্সেস হলে তার TTL পুনরায় সেট হয়ে যায়। একে "sliding window" TTL বলা হয়।

উদাহরণ:

class Cache:
    def __init__(self):
        self.cache = {}

    def set(self, key, value, ttl):
        self.cache[key] = {'value': value, 'expiry': time.time() + ttl}
    
    def get(self, key, ttl):
        if key in self.cache:
            data = self.cache[key]
            if data['expiry'] > time.time():
                # Sliding expiry: reset the TTL on every access
                data['expiry'] = time.time() + ttl
                return data['value']
            else:
                del self.cache[key]
        return None

এখানে, প্রতি বার ডেটা এক্সেস করার সময় TTL রিসেট হয়ে যায়, এবং ডেটা নির্দিষ্ট সময় পরে এক্সপায়ার হয় না।


২. Cache Refresh Techniques

Cache Refresh হল সেই প্রক্রিয়া যার মাধ্যমে ক্যাশে থাকা পুরনো বা এক্সপায়ার হওয়া ডেটা আবার আপডেট করা হয়। ক্যাশের মধ্যে থাকা ডেটা যে সময়ে পুরনো হয়ে যাবে বা নতুন ডেটা প্রয়োজন, তখন ক্যাশে রিফ্রেশ করার জন্য কয়েকটি কৌশল ব্যবহার করা যেতে পারে।

২.১ Lazy Loading (Lazy Refresh)

Lazy loading একটি কৌশল যেখানে ক্যাশে ডেটা শুধুমাত্র তখনই রিফ্রেশ করা হয় যখন ডেটার জন্য অনুরোধ করা হয় এবং সেটি ক্যাশে উপলব্ধ না থাকে (অথবা এক্সপায়ার হয়ে যায়)। অর্থাৎ, যদি ক্যাশে ডেটা পাওয়া না যায়, তখনই সার্ভার থেকে নতুন ডেটা সংগ্রহ করে ক্যাশে রাখা হয়।

উদাহরণ:

class Cache:
    def __init__(self):
        self.cache = {}

    def get(self, key, data_loader):
        if key in self.cache:
            return self.cache[key]
        else:
            value = data_loader(key)  # Fetch from external source
            self.cache[key] = value
            return value

এখানে get() ফাংশনে ডেটা রিফ্রেশ করা হয় যখন ক্যাশে ডেটা পাওয়া যায় না, এবং তখনই data_loader() ফাংশন ব্যবহার করে নতুন ডেটা সংগ্রহ করা হয়।


২.২ Cache Pre-Fetching (Eager Refresh)

Eager Refresh হল একটি কৌশল যেখানে ক্যাশে থাকা ডেটা নির্দিষ্ট সময় পর বা সময়সূচী অনুযায়ী আপডেট বা রিফ্রেশ করা হয়, এমনকি তখনও যদি ডেটার জন্য কোনও অনুরোধ না আসে। এটি সাধারণত ডেটা বড় বা গুরুত্বপূর্ণ হলে ব্যবহৃত হয়।

উদাহরণ:

import threading
import time

class Cache:
    def __init__(self):
        self.cache = {}

    def set(self, key, value):
        self.cache[key] = value

    def refresh(self, key, data_loader, ttl):
        threading.Timer(ttl, self.refresh, [key, data_loader, ttl]).start()
        self.cache[key] = data_loader(key)  # Refresh data
    
    def get(self, key):
        return self.cache.get(key, None)

এখানে, refresh() ফাংশনে threading.Timer ব্যবহার করা হয়েছে, যা ডেটা নির্দিষ্ট সময় পর স্বয়ংক্রিয়ভাবে রিফ্রেশ করবে।


৩. Cache Expiry এবং Refresh এর একত্রিত ব্যবহার

Cache Expiry এবং Cache Refresh একসাথে ব্যবহার করলে ক্যাশের কার্যকারিতা এবং সঠিকতা বজায় রাখা যায়। উদাহরণস্বরূপ, একসাথে ব্যবহার করা যেতে পারে:

  • ক্যাশে ডেটার জন্য TTL নির্ধারণ
  • TTL শেষ হলে ডেটা রিফ্রেশ করতে সরাসরি ডেটাবেস বা API কল ব্যবহার করা

সারাংশ

  • Cache Expiry নির্ধারণ করে কখন ডেটা ক্যাশ থেকে সরিয়ে ফেলা হবে। সাধারণ কৌশল হল TTL এবং Sliding Expiry
  • Cache Refresh হল ডেটা আপডেট বা রিফ্রেশ করার প্রক্রিয়া, যা Lazy Loading বা Eager Refresh পদ্ধতির মাধ্যমে করা হয়।
  • ক্যাশ ব্যবস্থাপনার জন্য TTL এবং Refresh কৌশল একসাথে ব্যবহার করলে কার্যকারিতা বৃদ্ধি পায় এবং সিস্টেমের পারফরম্যান্স উন্নত হয়।
Content added By
Promotion

Are you sure to start over?

Loading...