Defective Code Logo

Total Downloads Latest Stable Version Latest Stable Version

English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文

مقدمہ

Recall لاراول کے لئے ایک ہائی پرفارمنس Redis کلائنٹ سائیڈ کیشنگ پیکیج ہے۔ یہ Redis 6 کی کلائنٹ سائیڈ کیشنگ فیچر کا استعمال کرتا ہے جس کے ساتھ خودکار ناکارہ کرنا شامل ہے، تاکہ Redis کے گرد دوروں اور لیٹنسی کو نمایاں طور پر کم کیا جا سکے۔ خاص طور پر لاراول اوکٹیان کے ماحول کے لئے بنایا گیا، یہ APCu یا Swoole Table کو مقامی کیش کی پرت کے طور پر استعمال کرتا ہے جو ناکارہ کرنے کے پیغامات کے ذریعے Redis کے ساتھ ہم آہنگ رہتا ہے۔

جب آپ کسی قدر کو Redis سے حاصل کرتے ہیں، تو Recall اسے مقامی طور پر محفوظ کرتا ہے۔ جب وہ قدر Redis میں تبدیلی کرتی ہے (کسی بھی کلائنٹ کی طرف سے)، Redis خود بخود Recall کو مقامی کاپی کو ناکارہ کرنے کے لئے مطلع کرتا ہے۔ یہ آپ کو ان-میموری کیشنگ کی رفتار فراہم کرتا ہے جس کے ساتھ Redis کی مستقل مزاجی کی ضمانتیں ہیں۔

اہم خصوصیات

مثال

// Recall کو اپنے کیش ڈرائیور کے طور پر ترتیب دیں
// config/cache.php
'stores' => [
'recall' => [
'driver' => 'recall',
],
],
 
// اس کا استعمال کریں جیسے کسی بھی لاراول کیش
use Illuminate\Support\Facades\Cache;
 
// پہلی کال: Redis سے حاصل کرتا ہے، مقامی طور پر محفوظ کرتا ہے
$user = Cache::store('recall')->get('user:1');
 
// بعد کی کالیں: مقامی APCu/Swoole Table سے فراہم کی جاتی ہیں (مائکرو سیکنڈز)
$user = Cache::store('recall')->get('user:1');
 
// جب user:1 کو کہیں بھی اپ ڈیٹ کیا جاتا ہے، Redis Recall کو ناکارہ کرنے کے لئے مطلع کرتا ہے
Cache::store('recall')->put('user:1', $newUserData, 3600);
// مقامی کیش تمام ملازمین پر خود بخود ناکارہ ہو جاتی ہے

تنصیب

Composer کے ذریعے پیکیج انسٹال کریں:

composer require defectivecode/laravel-recall

ضروریات

استعمال

بنیادی ترتیب

  1. اپنے config/cache.php میں Recall کیش اسٹور شامل کریں:
'stores' => [
// ... دیگر اسٹورز
 
'recall' => [
'driver' => 'recall',
],
],
  1. اپنی ایپلیکیشن میں کیش اسٹور کا استعمال کریں:
use Illuminate\Support\Facades\Cache;
 
// ایک قدر محفوظ کریں (Redis میں لکھتا ہے)
Cache::store('recall')->put('key', 'value', 3600);
 
// ایک قدر حاصل کریں (پہلی کال Redis میں جاتی ہے، بعد کی کالیں مقامی کیش کا استعمال کرتی ہیں)
$value = Cache::store('recall')->get('key');
 
// ایک قدر حذف کریں
Cache::store('recall')->forget('key');

یہ کیسے کام کرتا ہے

  1. پہلا پڑھنا: قدر Redis سے حاصل کی جاتی ہے اور مقامی APCu/Swoole Table کیش میں محفوظ کی جاتی ہے
  2. بعد کے پڑھنا: قدر براہ راست مقامی میموری سے فراہم کی جاتی ہے (ذیلی ملی سیکنڈ)
  3. کہیں بھی لکھیں: جب کوئی بھی کلائنٹ Redis میں کلید میں ترمیم کرتا ہے، Redis ایک ناکارہ کرنے کا پیغام بھیجتا ہے
  4. خودکار ناکارہ کرنا: Recall پیغام وصول کرتا ہے اور مقامی کیش سے کلید کو ہٹا دیتا ہے
  5. اگلا پڑھنا: تازہ قدر Redis سے حاصل کی گئی اور دوبارہ مقامی طور پر کیش کی گئی

یہ پیٹرن خاص طور پر لاراول اوکٹیان کے ماحول میں طاقتور ہوتا ہے جہاں ملازمین درخواستوں کے درمیان برقرار رہتے ہیں، جس سے مقامی کیش بننے اور میموری سے متعدد درخواستوں کی خدمت کرنے کی اجازت ملتی ہے۔

اوکٹیان انضمام

Recall خود بخود لاراول اوکٹیان کے ساتھ ضم ہو جاتا ہے جب یہ دستیاب ہوتا ہے:

کوئی اضافی ترتیب کی ضرورت نہیں ہے۔ انضمام خود بخود ہوتا ہے جب اوکٹیان انسٹال ہو۔

کنفیگریشن

ترتیب فائل شائع کریں:

php artisan vendor:publish --tag=recall-config

یہ config/recall.php تیار کرتا ہے جس میں درج ذیل اختیارات شامل ہیں:

فعال/غیر فعال کریں

'enabled' => env('RECALL_ENABLED', true),

جب غیر فعال کیا جاتا ہے، Recall براہ راست Redis کی طرف گزرتا ہے بغیر مقامی کیش کی پرت کا استعمال کئے۔ غلطی کی تلاش یا تدریجی رول آؤٹ کے لئے مفید۔

Redis اسٹور

'redis_store' => env('RECALL_REDIS_STORE', 'redis'),

Redis کارروائیوں کے لئے استعمال ہونے والا لاراول کیش اسٹور۔ یہ آپ کے config/cache.php میں تشکیل شدہ Redis اسٹور کی طرف اشارہ کرنا چاہئے۔

کیش کے پیشگی

'cache_prefixes' => [],

صرف ان کیش کی چابیاں جو ان پیشگی کے ساتھ مطابقت رکھتی ہیں مقامی طور پر کیش کریں۔ تمام چابیوں کو کیش کرنے کے لئے خالی چھوڑیں۔

// صرف صارف اور ترتیبات کی کیش مقامی طور پر کریں
'cache_prefixes' => ['users:', 'settings:', 'config:'],

یہ اس وقت مفید ہے جب آپ کے پاس ہائی والیم کی چابیاں ہوں جو اکثر تبدیل ہوتی ہیں اور انہیں مقامی طور پر کیش نہیں کرنا چاہئے۔

مقامی کیش کی ترتیب

'local_cache' => [
// ڈرائیور: "apcu" یا "swoole"
'driver' => env('RECALL_LOCAL_DRIVER', 'apcu'),
 
// مقامی کیش کی چابیوں کے لئے پیشگی
'key_prefix' => env('RECALL_LOCAL_PREFIX', 'recall:'),
 
// نان منسوخی کی صورت میں سیکنڈز میں ڈیفالٹ TTL (حفاظتی نیٹ)
'default_ttl' => (int) env('RECALL_LOCAL_TTL', 3600),
 
// Swoole Table کا سائز (2 کی طاقت، صرف swoole ڈرائیور کے لئے)
'table_size' => (int) env('RECALL_SWOOLE_TABLE_SIZE', 65536),
 
// Swoole Table میں زیادہ سے زیادہ بائٹس (صرف swoole ڈرائیور کے لئے)
'value_size' => (int) env('RECALL_SWOOLE_VALUE_SIZE', 8192),
],

APCu ڈرائیور (ڈیفالٹ)

APCu ڈرائیور تمام PHP ماحول اور اوکٹیان سرورز (Swoole، RoadRunner، FrankenPHP) کے ساتھ کام کرتا ہے۔ یہ مشترکہ میموری میں کیش کی قیمتوں کو محفوظ کرتا ہے جو تمام PHP پروسیسز کے لئے دستیاب ہوتی ہیں۔

ضروریات:

Swoole Table ڈرائیور

Swoole Table ڈرائیور Swoole کی مشترکہ میموری ٹیبل کا استعمال کرتا ہے، جو ایک ہی ملازم کے اندر ہم وقت سازیوں کے درمیان مستقل رسائی فراہم کرتا ہے۔ Swoole/OpenSwoole کے ماحول کے لئے بہترین۔

ترتیب کے نکات:

اوکٹیان سنے والے

'listeners' => [
// ملازم کے شروع ہوتے ہی کنکشن کو گرم کریں (پہلی درخواست کی لیٹنسی میں کمی)
'warm' => env('RECALL_LISTEN_WARM', true),
 
// ٹک ایونٹس پر ناکاریوں کی پروسیسنگ کریں (زیادہ جوابدہ، معمولی اوور ہیڈ)
'tick' => env('RECALL_LISTEN_TICK', false),
],

گرم کنکشن

جب فعال ہو تو Recall اوکٹیان کے ملازم کے شروع ہونے پر Redis ناکارہ کرنے کی سبسکرپشن قائم کرتا ہے۔ یہ پہلی درخواست پر کنکشن کی لیٹنسی کو ختم کرتا ہے۔

ٹک پروسیسنگ

جب فعال ہو تو Recall اوکٹیان ٹک ایونٹس پر ناکارہ کرنے کے پیغامات کی پروسیسنگ کرتا ہے اضافی درخواست ایونٹس کے ساتھ۔ یہ تھوڑی اضافی اوور ہیڈ کی قیمت پر زیادہ جوابدہ کیش ناکاری فراہم کرتا ہے۔

اعلی درجے کی استعمال

دستی ناکاری پروسیسنگ

اگر آپ کو ناکاریوں کو دستی طور پر پروسیس کرنے کی ضرورت ہو (مثلاً، لمبی مدت کے عمل میں):

use DefectiveCode\Recall\RecallManager;
 
$manager = app(RecallManager::class);
$manager->processInvalidations();

مقامی کیش کو صاف کرنا

صرف مقامی کیش کو صاف کرنے کے لئے بغیر Redis کو متاثر کئے:

use DefectiveCode\Recall\RecallManager;
 
$manager = app(RecallManager::class);
$manager->flushLocalCache();

کنکشن مینجمنٹ

use DefectiveCode\Recall\RecallManager;
 
$manager = app(RecallManager::class);
 
// چیک کریں کہ آیا ناکارہ کرنے کی سبسکرپشن جڑی ہوئی ہے
if ($manager->isConnected()) {
// ...
}
 
// دستی طور پر کنکشن ٹوٹیں
$manager->disconnect();

اصلاح

ملازم کی درخواست کی حدیں

لاراول اوکٹیان ملازمین کو کنفیگریشن کردہ درخواستوں کی تعداد کے بعد سائیکل کرتا ہے تاکہ میموری کی لیک کو روکا جا سکے۔ جب ایک ملازم سائیکل ہوتا ہے تو اس کی مقامی کیش صاف ہو جاتی ہے۔ اس حد میں اضافہ Recall کی مقامی کیش کو زیادہ دیر تک برقرار رکھنے کی اجازت دیتا ہے، کیش کی ہڑتال کی شرحوں کو بہتر بناتا ہے۔

آپ کے config/octane.php میں:

// ڈیفالٹ 500 درخواستیں سائیکل کرنے سے پہلے ہیں
'max_requests' => 10000,

زیادہ قیمتیں بہتر کیش کے استعمال کا مطلب ہیں لیکن اس بات پر اعتماد کرنے کی ضرورت ہے کہ آپ کی ایپلیکیشن میں میموری کی لیک نہیں ہے۔ اس قیمت کو ایڈجسٹ کرتے وقت اپنے ملازمین کی میموری کے استعمال کی نگرانی کریں۔

پیشگی کے ساتھ انتخابی کیشنگ

یہ کنٹرول کرنے کے لئے cache_prefixes کا استعمال کریں کہ کون سی چابیاں مقامی طور پر کیش کی جاتی ہیں۔ یہ اس وقت قیمتی ہے جب:

// config/recall.php
'cache_prefixes' => [
'users:', // مقامی طور پر صارف کے ڈیٹا کو کیش کریں
'settings:', // ایپلیکیشن کی ترتیبات کو کیش کریں
'products:', // پروڈکٹ کیٹلاگ کو کیش کریں
],

ان پیشگی کے ساتھ مطابقت رکھنے والے چابیاں اب بھی کام کرے گی لیکن مقامی کیشنگ کو بائی پاس کرکے براہ راست Redis پر جاتی ہیں۔

میموری کے اعتبار سے

APCu میموری

APCu تمام PHP پروسیسز کے درمیان مشترکہ میموری شیئر کرتا ہے۔ php.ini میں میموری کی حد کو ترتیب دیں:

; ڈیفالٹ 32MB ہے، بڑی کیش کی ضروریات کے لئے بڑھائیں
apc.shm_size = 128M

APCu کے استعمال کی نگرانی apcu_cache_info() کے ساتھ کریں:

$info = apcu_cache_info();
$memory = $info['mem_size']; // بائٹس میں موجودہ میموری کے استعمال

Swoole Table کی سائٹنگ

Swoole Tables کو تخلیق کے وقت مقرر کردہ مقررہ صلاحیت ہوتی ہے۔ اپنے متوقع کیش کے سائز کے لئے منصوبہ بنائیں:

'local_cache' => [
// زیادہ سے زیادہ انٹریز (2 کی طاقت ہونی چاہئے)
'table_size' => 65536, // 64K انٹریز
 
// سلسلہ بند قیمت میں بائٹس کی زیادہ سے زیادہ سائز
'value_size' => 8192, // ہر قیمت پر 8KB
],

میموری کا استعمال: table_size × (value_size + overhead)۔ 65536 انٹریز اور 8KB کی قیمتوں کے ساتھ ایک جدول تقریباً 512MB استعمال کرتا ہے۔

عام پیٹرن

ایپلیکیشن کی کنفیگریشن

// کیش فیچر کے جھنڈے اور ترتیبات
$features = Cache::store('recall')->remember('config:features', 3600, function () {
return Feature::all()->pluck('enabled', 'name')->toArray();
});
 
// جب ترتیبات میں تبدیلی ہوتی ہے تو تمام ملازمین خود بخود اپ ڈیٹ حاصل کرتے ہیں

بار بار رسائی کی جانے والی حوالہ ڈیٹا

// پروڈکٹ زمروں کو کیش کریں
$categories = Cache::store('recall')->remember('categories:all', 3600, function () {
return Category::with('children')->whereNull('parent_id')->get();
});
 
// کرنسی کے تبادلے کی شرحیں کیش کریں
$rates = Cache::store('recall')->remember('rates:exchange', 300, function () {
return ExchangeRate::all()->pluck('rate', 'currency')->toArray();
});

کیش ٹیگ کا متبادل

Recall کیش ٹیگ کی حمایت نہیں کرتا، لیکن آپ پیشگی کے ساتھ ملتے جلتے فعل کو حاصل کر سکتے ہیں:

// ٹیگ کے بجائے، مستقل پیشگی کا استعمال کریں
Cache::store('recall')->put("blog:posts:{$id}", $post, 3600);
Cache::store('recall')->put("blog:comments:{$postId}", $comments, 3600);
 
// تمام بلاگ سے متعلقہ کیش کو واضح کریں پیشگی کی بنیاد پر (ہاتھ سے عملدرآمد کی ضرورت)
// یا جب ڈیٹا میں تبدیلی ہوتی ہے تو خود بخود ناکارہ کرنا پر انحصار کریں

پابندیاں

Redis کلسٹر موڈ

Recall Redis کلسٹر موڈ کی حمایت نہیں کرتا۔ CLIENT TRACKING کمانڈ کا REDIRECT آپشن دونوں ڈیٹا کنکشن اور ناکارہ سبسکرائبر کنکشن کو ایک ہی Redis نوڈ پر ہونا ضروری ہے۔ کلسٹر میں، چابیاں ہیش سلاٹس کی بنیاد پر مختلف نوڈز میں تقسیم کی جاتی ہیں، جو مختلف نوڈز پر محفوظ چابیوں کے لئے ناکارہ تعلقات کو حاصل کرنا ناممکن بناتی ہیں۔

کلسٹرڈ Redis انسٹالیشنز کے لئے، غور کریں:

سپورٹ کی رہنمائی

ہمارے اوپن سورس پیکیج کا انتخاب کرنے کے لیے شکریہ! براہ کرم ان سپورٹ رہنما خطوط پر ایک لمحہ صرف کریں۔ یہ آپ کو ہمارے پروجیکٹ سے زیادہ سے زیادہ فائدہ اٹھانے میں مدد کریں گے۔

کمیونٹی کی بنیاد پر مدد

ہمارا اوپن سورس پروجیکٹ ہماری شاندار کمیونٹی کی مدد سے چلتا ہے۔ اگر آپ کے پاس سوالات ہیں یا مدد کی ضرورت ہے تو، StackOverflow اور دیگر آن لائن وسائل آپ کے بہترین دوست ہیں۔

کیڑے اور فیچر کی ترجیحات

اوپن سورس پروجیکٹ کا انتظام کرنے کی حقیقت یہ ہے کہ ہم ہر رپورٹ شدہ کیڑے یا فیچر کی درخواست کو فوری طور پر نہیں حل کر سکتے۔ ہم مسائل کو درج ذیل ترتیب میں ترجیح دیتے ہیں:

1. ہماری ادائیگی شدہ مصنوعات پر اثر انداز ہونے والے کیڑے

وہ کیڑے جو ہماری ادائیگی شدہ مصنوعات پر اثر انداز ہوتے ہیں ہمیشہ ہماری پہلی ترجیح ہوں گے۔ کچھ معاملات میں، ہم صرف ان کیڑوں کو حل کریں گے جو براہ راست ہمیں متاثر کرتے ہیں۔

2. کمیونٹی کی طرف سے پول ریگسٹس

اگر آپ نے کسی کیڑے کی نشاندہی کی ہے اور آپ کے پاس حل ہے، تو براہ کرم پول ریگسٹس جمع کرائیں۔ اپنی مصنوعات سے متعلق مسائل کے بعد، ہم ان کمیونٹی کی بنیاد پر درستگیوں کو اگلی سب سے بڑی ترجیح دیتے ہیں۔ جائزہ لینے اور منظور ہونے کے بعد، ہم آپ کے حل کو ضم کریں گے اور آپ کی شراکت کو تسلیم کریں گے۔

3. مالی مدد

ذکر کردہ زمرے سے باہر کے مسائل کے لیے، آپ ان کا حل کرنے کے لئے مالی امداد فراہم کرنے کا انتخاب کر سکتے ہیں۔ ہر اوپن مسئلہ ایک آرڈر فارم سے منسلک ہے جہاں آپ مالی طور پر تعاون کر سکتے ہیں۔ ہم ان مسائل کو فراہم کردہ فنڈنگ کی رقم کی بنیاد پر ترجیح دیتے ہیں۔

کمیونٹی کی شراکتیں

اوپن سورس اس وقت بڑھتا ہے جب اس کی کمیونٹی فعال ہو۔ چاہے آپ کیڑے حل نہیں کر رہے ہوں، کوڈ کی بہتریوں، دستاویز کے اپ ڈیٹس، سبقیں، یا کمیونٹی چینلز میں دوسروں کی مدد کے ذریعے شراکت دینے پر غور کریں۔ ہم بالعموم سب کو، ایک کمیونٹی کے طور پر، اوپن سورس کام کی مدد کرنے کی ترغیب دیتے ہیں۔

دوہرانے کے لیے، DefectiveCode کیڑے کو اس بنیاد پر ترجیح دے گا کہ وہ ہمارے ادائیگی شدہ پروڈکٹس، کمیونٹی کی پول ریگسٹس اور مسائل کے لئے موصولہ مالی مدد پر کس طرح اثر انداز ہوتے ہیں۔

لائسنس - MIT لائسنس

کاپی رائٹ © Defective Code, LLC. تمام حقوق محفوظ ہیں

یہاں پر کسی بھی شخص کو یہ سافٹ ویئر اور اس سے وابستہ دستاویزات کی کاپی حاصل کرنے کی اجازت دی جاتی ہے (جسے "سافٹ ویئر" کہا جاتا ہے)، تاکہ وہ سافٹ ویئر میں کسی بھی پابندی کے بغیر کام کر سکے، بشمول بغیر کسی حد کے، استعمال کرنے، کاپی کرنے، ترمیم کرنے، یکجا کرنے، شائع کرنے، تقسیم کرنے، ذیلی لائسنس دینے اور/یا سافٹ ویئر کی کاپیوں کو بیچنے کے حقوق حاصل کرنے، اور ان لوگوں کو اجازت دینے کا کہ جنہیں سافٹ ویئر فراہم کیا گیا ہے، کہ وہ ایسا کرسکیں، مندرجہ ذیل شرائط کے تابع:

اوپر کا کاپی رائٹ نوٹس اور یہ اجازت نامہ سافٹ ویئر کی تمام کاپیوں یا اہم حصوں میں شامل کیا جائے گا۔

یہ سافٹ ویئر "جیسا ہے" فراہم کیا جاتا ہے، بغیر کسی قسم کی وارنٹی، واضح یا مضمر، بشمول لیکن محدود نہیں، مارکیٹ ایبیلٹی، کسی خاص مقصد کے لئے موزونیت اور خلاف ورزی کے وارنٹیوں کے۔ کسی بھی صورت میں مصنفین یا کاپی رائٹ ہولڈرز کسی بھی دعوے، نقصانات یا دیگر ذمہ داریوں کے لئے ذمہ دار نہیں ہوں گے، چاہے وہ معاہدے کے ایکشن، غلطی یا کسی اور طریقے سے ہو، جو سافٹ ویئر یا سافٹ ویئر کے استعمال یا دیگر معاملات سے پیدا ہو، یا اس سے متعلق ہو۔