Caching (ক্যাশিং)
- ●Cache হলো একটা দ্রুত কিন্তু ছোট storage, যেখানে বারবার লাগে এমন ডেটার copy রাখা হয়।
- ●ডেটা cache-এ পাওয়া গেলে 'hit' (দ্রুত), না পেলে 'miss' (মূল উৎস থেকে আনতে হয়)।
- ●Cache ভরে গেলে কোন ডেটা বাদ যাবে তা eviction policy (LRU, LFU, FIFO, TTL) ঠিক করে।
সমস্যাটা কী?
প্রতিবার ডেটা চাইলেই যদি দূরের database-এ গিয়ে খুঁজে আনতে হয়, সেটা ধীর। বিশেষত যে ডেটা বারবার একই — যেমন কোনো জনপ্রিয় ভিডিওর তথ্য — সেটা প্রতিবার নতুন করে আনা অপচয়।
সমাধান: একবার এনে কাছেই রেখে দাও। পরেরবার সরাসরি সেখান থেকে দাও। এটাই Caching।
Cache হলো একটা দ্রুতগতির (কিন্তু আকারে ছোট) storage, যেখানে বারবার লাগে এমন ডেটার copy রাখা হয় — যাতে দ্রুত পাওয়া যায়।
রাঁধুনি প্রতিবার আলু আনতে বাজারে যান না। বেশি লাগে এমন জিনিস (নুন, তেল, পেঁয়াজ) হাতের কাছেই তাকে রাখেন (cache)। দরকার হলে সেকেন্ডে হাত বাড়ান। শুধু যা হাতের কাছে নেই, তার জন্যই বাজারে (database) যান।
Cache Hit আর Miss
- Cache Hit ✅ — চাওয়া ডেটা cache-এ আছে → দ্রুত পাওয়া গেল।
- Cache Miss ❌ — cache-এ নেই → মূল database থেকে আনতে হলো (ধীর), তারপর cache-এ রেখে দেওয়া হলো।
একটা cache কতটা কার্যকর তা মাপা হয় hit rate দিয়ে — মোট request-এর কত শতাংশ hit হলো। যত বেশি, তত ভালো।
নিজে চালিয়ে দেখো
key-গুলোতে ক্লিক করে request পাঠাও। দেখো কোনটা hit, কোনটা miss। আর cache ভরে গেলে কীভাবে পুরোনো ডেটা বাদ যায়:
Eviction Policy — কাকে বাদ দেব?
Cache ছোট, তাই ভরে গেলে নতুন কিছু রাখতে পুরোনো কিছু বাদ দিতে হয়। কীভাবে বাছাই হবে?
- LRU (Least Recently Used) — যে ডেটা সবচেয়ে বেশিদিন ছোঁয়া হয়নি, সেটা বাদ। (সবচেয়ে জনপ্রিয়)
- LFU (Least Frequently Used) — যে ডেটা সবচেয়ে কমবার ব্যবহার হয়েছে, সেটা বাদ।
- FIFO (First In, First Out) — যেটা সবার আগে ঢুকেছিল, সেটাই আগে বাদ।
- TTL (Time To Live) — প্রতিটা ডেটার একটা মেয়াদ থাকে; সময় শেষ হলে নিজে নিজেই বাদ।
Caching Strategy — কীভাবে লিখব/পড়ব?
- Cache-Aside — অ্যাপ নিজে আগে cache দেখে, না পেলে database থেকে এনে cache-এ রাখে। (সবচেয়ে প্রচলিত)
- Read-Through — cache নিজেই অনুপস্থিত ডেটা database থেকে এনে দেয়।
- Write-Through — লেখার সময় cache আর database — দুটোতেই একসাথে লেখা হয় (নিরাপদ, কিন্তু একটু ধীর)।
- Write-Back — আগে শুধু cache-এ লেখা হয়, পরে database-এ। (দ্রুত, কিন্তু cache নষ্ট হলে ডেটা হারানোর ঝুঁকি)।
Cache-এ রাখা ডেটা মূল database-এ বদলে গেলে cache-এর copy হয়ে যায় বাসি (stale)। এই "cache invalidation" সফটওয়্যারের অন্যতম কঠিন সমস্যা হিসেবে পরিচিত। TTL বা write-through এর সমাধানে সাহায্য করে।
কোথায় cache থাকে?
- Browser cache — তোমার ব্রাউজারেই।
- CDN — তোমার কাছাকাছি কোনো server-এ (ছবি, ভিডিও)।
- Application cache — যেমন Redis, Memcached — server আর database-এর মাঝে।
বাস্তব উদাহরণ
YouTube-এ একটা ভাইরাল ভিডিওর thumbnail কোটি মানুষ দেখে। প্রতিবার database থেকে আনলে সর্বনাশ! তাই সেটা cache (ও CDN)-এ রাখা থাকে, আর প্রায় সবাই সেই দ্রুত copy থেকেই পায়।
মূল শব্দ (Key Terms)
মিনি কুইজ
1. Cache hit মানে কী?
2. LRU eviction policy কোন ডেটা বাদ দেয়?