کیش کو غیر فعال کرنا — ایپلیکیشن کو موصول ہونے والی معلومات کی مطابقت کو یقینی بنانے کے لیے کیش میں پرانے ڈیٹا کو حذف یا اپ ڈیٹ کرنے کا عمل۔ موبائل ڈویلپمنٹ میں، غیر فعال کرنا انتہائی اہم ہے: صارف مکمل ری لوڈ کے بغیر تازہ ڈیٹا کی توقع رکھتا ہے۔ Google Developers, 2025 کے مطابق، صحیح طریقے سے ترتیب دیا گیا غیر فعال کرنا نیٹ ورک کی درخواستوں کو 60% کم کرتا ہے اور انٹرفیس کی ردعمل کو بہتر بناتا ہے۔
اہم نکات
کیش کو غیر فعال کرنا کیش کی گئی اندراجات کو غیر موثر یا اپ ڈیٹ کرنے کا عمل ہے جو اب ڈیٹا کے ماخذ کی موجودہ حالت سے مطابقت نہیں رکھتیں۔ پوری کیش کو دستی طور پر صاف کرنے کے برعکس، غیر فعال کرنا انتخابی طور پر کام کرتا ہے: صرف وہ ڈیٹا جس کی مطابقت مشکوک ہو۔
کیش تیز رسائی کے لیے ڈیٹا کی کاپیاں ذخیرہ کرتی ہے۔ وقت کے ساتھ، ڈیٹا بیس یا سرور میں اصل ڈیٹا تبدیل ہو سکتا ہے — مثال کے طور پر، صارف نے اپنا پروفائل اپ ڈیٹ کیا یا فیڈ میں ایک نئی پوسٹ ظاہر ہوئی۔ اگر کیش کو غیر فعال نہ کیا جائے تو ایپ پرانی معلومات دکھائے گی، جو موبائل ایپس میں لین دین کی غلطیوں، غلط ڈسپلے اور اعتماد کے فقدان کا باعث بنتی ہے۔
کسی بھی غیر فعال کرنے کی سب سے بڑی مشکل مشہور کہاوت ہے: «There are only two hard things in Computer Science: cache invalidation and naming things»۔ پیچیدگی اس حقیقت میں ہے کہ کیش کو معلوم نہیں ہوتا کہ ماخذ کب تبدیل ہوا جب تک کہ اسے واضح طور پر مطلع نہ کیا جائے۔
Martin Kleppmann، «Designing Data-Intensive Applications» (O'Reilly, 2017) کے مصنف کے مطابق، صحیح غیر فعال کرنے کے لیے تبدیلیوں کی مرکزی اطلاع یا ہر پڑھنے پر مطابقت جانچنے کے لیے ایک میکانزم کی ضرورت ہوتی ہے — کارکردگی اور مستقل مزاجی کے درمیان ایک سمجھوتہ۔
data class CacheEntryT(
val data: T,
val expiresAt: Long,
val version: Int = 0
)
fun CacheT.isValid(key: String): Boolean =
get(key)?.let { it.expiresAt > currentTimeMillis() && it.version == currentVersion(key) } ?: false
یہ کوڈ ایک سادہ طریقہ دکھاتا ہے: کیش اندراج کو درست سمجھا جاتا ہے اگر TTL ختم نہ ہوا ہو اور ورژن ماخذ میں موجودہ ورژن سے مماثل ہو۔ ورژننگ میکانزم پرانے ڈیٹا کو ظاہر کرنے سے بچنے کے قابل اعتماد طریقوں میں سے ایک ہے۔
ڈیٹا کی تازگی زیادہ تر موبائل ایپلیکیشنز کے لیے ایک اہم ضرورت ہے: سوشل نیٹ ورکس، میسنجر، بینکنگ سروسز، ای کامرس پلیٹ فارم۔ ایک صارف جو غلط اکاؤنٹ بیلنس یا پرانے پیغامات دیکھتا ہے وہ ایپ پر اعتماد کھو دیتا ہے۔
صارف کے تجربے کے علاوہ، غیر فعال کرنا ٹریفک اور بیٹری بچاتا ہے۔ وقتاً فوقتاً تمام ڈیٹا کو دوبارہ لوڈ کرنے کے بجائے، ایک موبائل ایپ صرف تبدیل شدہ اندراجات کو غیر فعال کر سکتی ہے اور انہیں انتخابی طور پر لوڈ کر سکتی ہے۔ Meta Engineering (2024) کے مطابق، Facebook Lite میں تدریجی غیر فعال کرنے کے نفاذ نے مواد کی تازگی کھوئے بغیر ٹریفک کی کھپت کو 35% کم کر دیا۔
ایک اور اہم پہلو لین دین کی مستقل مزاجی ہے۔ شاپنگ کارٹ یا بکنگ سسٹم والی ایپس میں، پرانی کیش کا استعمال دوہرے چارجز یا ڈیٹا کے تصادم کا سبب بن سکتا ہے۔ اہم کارروائیوں کے بعد غیر فعال کرنا اس بات کی ضمانت دیتا ہے کہ اگلی درخواست تازہ ڈیٹا پڑھے گی۔
TTL سب سے آسان حکمت عملی ہے، جہاں ہر کیش اندراج کو ایک مقررہ زندگی ملتی ہے۔ TTL ختم ہونے پر، ڈیٹا پرانا سمجھا جاتا ہے اور اگلی پڑھائی پر ہٹا دیا جاتا ہے۔ TTL ان ڈیٹا کے لیے مثالی ہے جو شیڈول کے مطابق اپ ڈیٹ ہوتے ہیں — مثال کے طور پر، موسم یا زر مبادلہ کی شرح۔ نقصان: ڈیٹا TTL وقفے کے اندر غیر تازہ ہو سکتا ہے۔
Write-Through حکمت عملی میں، ڈیٹا کی ہر تبدیلی کیش سے گزرتی ہے: تحریر بیک وقت کیش اور ماخذ دونوں میں انجام دی جاتی ہے۔ یہ یقینی بناتا ہے کہ کیش میں ہمیشہ موجودہ ورژن موجود ہو۔ نقصان تحریر میں تاخیر کا بڑھنا ہے، کیونکہ ماخذ کی تصدیق تک آپریشن مکمل نہیں ہوتا۔ Write-Through مستقل مزاجی کے لیے اہم ڈیٹا کے لیے موزوں ہے: اکاؤنٹ بیلنس، آرڈر کی حیثیت۔
Write-Behind غیر متزامن تحریر ہے: ڈیٹا فوری طور پر کیش میں جاتا ہے اور بعد میں ایک علیحدہ عمل کے ذریعے ماخذ میں لکھا جاتا ہے۔ یہ اعلی تحریری کارکردگی فراہم کرتا ہے لیکن مطابقت پذیری سے پہلے ناکامی کی صورت میں ڈیٹا کے نقصان کا خطرہ رکھتا ہے۔ موبائل ایپس میں، Write-Behind اکثر تجزیات، لاگز اور غیر اہم صارف کی کارروائیوں کے لیے استعمال ہوتا ہے۔
Write-Invalidate — ڈیٹا تبدیل ہونے پر کیش کو اپ ڈیٹ کرنے کے بجائے، یہ متعلقہ اندراج کو ہٹا (غیر فعال) کر دیتا ہے۔ اگلی پڑھائی ایک کیش مس کا پتہ لگائے گی اور ماخذ سے تازہ ڈیٹا لوڈ کرے گی۔ یہ حکمت عملی نافذ کرنے میں آسان ہے اور اس وقت اچھی طرح کام کرتی ہے جب پڑھنے کی درخواستیں لکھنے کی درخواستوں سے نمایاں طور پر زیادہ ہوں۔
| حکمت عملی | پڑھنے کی کارکردگی | لکھنے کی کارکردگی | مستقل مزاجی |
|---|---|---|---|
| TTL | اعلی | اعلی | کمزور (پرانا ممکن) |
| Write-Through | اعلی | درمیانی | مضبوط |
| Write-Behind | اعلی | اعلی | کمزور (نقصان ممکن) |
| Write-Invalidate | درمیانی | اعلی | مضبوط (بعد کی پڑھائی پر) |
حکمت عملی کا انتخاب اس بات پر منحصر ہے کہ کسی خاص منظر نامے کے لیے کیا زیادہ اہم ہے: جواب کی رفتار، مستقل مزاجی یا وسائل کی بچت۔ ہائبرڈ طریقے — مثال کے طور پر، پش نوٹیفکیشن ملنے پر TTL کے ساتھ Write-Invalidate — ایک بہترین توازن فراہم کرتے ہیں۔
HTTP کیش کلائنٹ کی طرف پہلی سطح ہے۔ براؤزر یا موبائل ایپ Cache-Control اور ETag ہیڈرز کے ساتھ سرور کے جوابات کو ذخیرہ کرتی ہے۔ غیر فعال کرنا 304 Not Modified جواب ملنے پر یا max-age ختم ہونے پر ہوتا ہے۔ ETag کلائنٹ کو مکمل جواب ڈاؤن لوڈ کیے بغیر وسائل کی تازگی جانچنے کی اجازت دیتا ہے۔
ایپ کیش دوسری سطح ہے، جو کوڈ کے ذریعے منظم ہوتی ہے: میموری میں کیش (LRU، Android میں LruCache) یا ڈسک کیش (SQLite، Room, Realm)۔ یہاں غیر فعال کرنا ڈویلپر کے ذریعے کنٹرول کیا جاتا ہے۔ Android Developers (2025) کے مطابق، Flow اور ٹرگر پر مبنی غیر فعال کرنے کے ساتھ Room کا صحیح استعمال UI ری ڈرا کو 40% کم کرتا ہے۔
سرور کیش تیسری سطح ہے: Redis, Memcached, CDN۔ اس سطح پر، غیر فعال کرنا TTL، DEL/PURGE کمانڈز یا میسج بروکر (RabbitMQ, Kafka) کے ذریعے کیا جاتا ہے۔ CDN غیر فعال کرنا ایک علیحدہ چیلنج ہے: CDN کی تقسیم شدہ نوعیت کی وجہ سے، ایک صاف کرنے کا کمانڈ عالمی سطح پر پھیلنے میں منٹ لگ سکتا ہے۔ Cloudflare (2024) کے مطابق، Purge by URL کے ذریعے غیر فعال کرنا عالمی پھیلاو کے لیے اوسطاً 5–15 سیکنڈ لیتا ہے۔
تمام سطوح پر غیر فعال کرنے کو مربوط کرنے کے لیے، ایک مرکزی کیش سروس یا ایونٹ بروکر استعمال کیا جاتا ہے۔ جب ڈیٹا تبدیل ہوتا ہے، ماخذ ایک ایونٹ شائع کرتا ہے اور ہر سطح مخصوص کنجیوں کو غیر فعال کرنے کا حکم وصول کرتی ہے۔ یہ ایسی صورت حال کو روکتا ہے جہاں ایک سطح پہلے ہی ڈیٹا اپ ڈیٹ کر چکی ہو جبکہ دوسری پرانا ورژن پیش کرتی رہے۔
بہت لمبا TTL سب سے عام غلطی ہے۔ ڈویلپرز مارجن کے ساتھ TTL سیٹ کرتے ہیں، جس کے نتیجے میں صارف گھنٹوں یا دنوں تک پرانا ڈیٹا دیکھتے ہیں۔ حل: مختصر TTL (1–5 منٹ) سے شروع کریں اور حقیقی ضرورت کو ناپنے کے بعد ہی اسے بڑھائیں۔
ایک تبدیلی پر پوری کیش کو غیر فعال کرنا مائکرو سروس آرکیٹیکچر میں ایک عام مسئلہ ہے۔ ایک صارف اپنا اوتار اپ ڈیٹ کرتا ہے اور سب کے لیے کیش غیر فعال ہو جاتی ہے۔ بڑی تعداد میں صارفین کے ساتھ، یہ Cache Stampede کا سبب بنتا ہے — ماخذ پر درخواستوں کا سیلاب۔ حل: مشترکہ کیش کو نہیں، بلکہ صرف مخصوص صارف کی کنجی کو غیر فعال کریں۔
تحریری غلطیوں پر غیر فعال کرنے کی کمی — اگر ماخذ میں تحریر ناکام ہو جائے لیکن کیش پہلے ہی اپ ڈیٹ ہو چکی ہو، ایپ ایک غیر مستقل حالت میں پہنچ جاتی ہے۔ حل: دو مراحل پر غیر فعال کرنا — پہلے کیش صاف کریں، پھر ماخذ میں لکھیں اور غلطی پر غیر فعال کرنا واپس لیں۔
تقسیم شدہ نوعیت کو نظر انداز کرنا — کلسٹر ماحول میں، ایک نوڈ پر غیر فعال کرنے کا مطلب یہ نہیں کہ دوسرے نوڈس کو کمانڈ ملا۔ ایونٹ بروکر کے بغیر، کچھ سرورز پرانا ڈیٹا پیش کرتے رہیں گے۔ Redis Pub/Sub یا Apache Kafka غیر فعال کرنے کے ایونٹس نشر کرکے اس مسئلے کو حل کرتے ہیں۔
تازگی کی ضروریات کا تعین کریں — ڈیٹا کا “ابھی” تازہ ہونا کتنا اہم ہے۔ خبروں کی فیڈ کے لیے، 1–2 منٹ کی تاخیر قابل قبول ہے (TTL)۔ اکاؤنٹ بیلنس کے لیے، تاخیر ناقابل قبول ہے (Write-Through)۔
تبدیلی کی تعدد کا اندازہ لگائیں — جو ڈیٹا دن میں ایک بار اپ ڈیٹ ہوتا ہے (مصنوعات کی کیٹلاگ، شہروں کی ڈائرکٹری) TTL کے ساتھ اچھی طرح کام کرتا ہے۔ جو ڈیٹا سیکنڈ میں درجنوں بار تبدیل ہوتا ہے (آن لائن اسٹیٹس، زر مبادلہ کی شرح) WebSockets یا Firebase Cloud Messaging کے ذریعے پش غیر فعال کرنے کی ضرورت ہوتی ہے۔
ماخذ پڑھنے کی لاگت پر غور کریں — اگر ماخذ 10 ٹیبلز پر ایک مہنگا SQL سوال یا حدود والا بیرونی API ہے، لمبے TTL کے ساتھ جارحانہ کیشنگ استعمال کریں، لیکن پرانے ڈیٹا کو پش غیر فعال کرنے سے پورا کریں۔ اگر پڑھنا سستا ہے (میموری میں تلاش)، مختصر TTL اور Write-Invalidate استعمال کریں۔
Google I/O (2025) کے مطابق، موبائل ایپس کے لیے عام نمونہ Stale-While-Revalidate ہے: صارف فوری طور پر کیش شدہ ڈیٹا دیکھتا ہے جبکہ ایپ پس منظر میں اس کی تازگی جانچتی ہے اور اپ ڈیٹ کرتی ہے۔ یہ سمجھوتہ کیے بغیر جواب کی رفتار اور تازگی کو یکجا کرتا ہے۔ stale-while-revalidate ہدایت کے ساتھ Cache-Control HTTP ہیڈر Android 10 اور iOS 13 سے تعاون یافتہ ہے۔
اکثر پوچھے گئے سوالات
غیر فعال کرنا ایک مخصوص ریکارڈ کو پرانے کے طور پر نشان زد کرنا ہے، جس کے بعد یہ اگلی پڑھائی پر اپ ڈیٹ ہوتا ہے۔ کیش صاف کرنا تمام اندراجات کو مکمل طور پر حذف کرنا ہے، جو زیادہ مہنگا ہے اور عارضی طور پر ایپ کی کارکردگی کو کم کر سکتا ہے۔
ETag ایک وسائل کا ہیش یا ورژن ہے جسے سرور HTTP ہیڈر میں واپس کرتا ہے۔ بار بار درخواست پر، کلائنٹ موجودہ ETag کے ساتھ If-None-Match بھیجتا ہے۔ اگر وسائل تبدیل نہیں ہوا، سرور 304 Not Modified کے ساتھ جواب دیتا ہے اور کیش درست رہتی ہے۔
Write-Through ورژننگ کے ساتھ سب سے قابل اعتماد ہے، کیونکہ ڈیٹا ہمیشہ مستقل رہتا ہے۔ لیکن اس میں تحریر کی سب سے زیادہ تاخیر ہوتی ہے۔ عملی طور پر، کارکردگی اور تازگی کے توازن کے لیے TTL پش غیر فعال کرنے کے ساتھ زیادہ کثرت سے استعمال ہوتا ہے۔
Probabilistic Early Expiration استعمال کریں — ہر درخواست TTL ختم ہونے سے پہلے تصادفی طور پر کیش کی تازگی جانچتی ہے۔ XFetch الگورتھم (Vattani, 2015) فارمولے کا استعمال کرتے ہوئے دوبارہ گنتی کے امکان کا حساب لگاتا ہے: p = (ttl - age) / (ttl * beta)۔
نیٹ ورک ڈیبگنگ ٹولز استعمال کریں: Charles Proxy, Proxyman یا Android Studio اور Xcode میں بلٹ ان Network Inspector۔ تصدیق کریں کہ ڈیٹا میں ترمیم کرنے کے بعد، اگلی درخواست کیش شدہ ورژن واپس کرنے کے بجائے اصل میں نیا ورژن لوڈ کرتی ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں