it-swarm.asia

هل هناك أي طريقة لإبطال جميع إدخالات memcache التي تبدأ بـ "المستخدم *"؟

لقد قمت مؤخرًا بإجراء تغيير على فئة المستخدم الخاصة بي (والتي يتم حفظها) ؛ هل هناك أي طريقة لإبطال جميع الإدخالات التي يبدأ مفتاحها بـ User دون إبطال ذاكرة التخزين المؤقت بالكامل؟

إذا لم يكن هناك أي حلول؟ أفضل عدم حذف كل شيء.

2
Thomas Bonini

في memcached FAQ ، الحذف من خلال مساحة الاسم :

بينما لا يدعم memcached أي نوع من حذف أحرف البدل أو الحذف بواسطة مساحة الاسم (حيث لا توجد مساحات أسماء) ، فهناك بعض الحيل التي يمكن استخدامها لمحاكاة ذلك. أنها تتطلب رحلات إضافية إلى خوادم memcached ولكن.

مثال ، في PHP ، لاستخدام مساحة اسم تسمى foo:

$ns_key = $memcache->get("foo_namespace_key");
// if not set, initialize it
if($ns_key===false) $memcache->set("foo_namespace_key", Rand(1, 10000));
// cleverly use the ns_key
$my_key = "foo_".$ns_key."_12345";
$my_val = $memcache->get($my_key);

//To clear the namespace do:
$memcache->increment("foo_namespace_key");

إذا كنت تخطط لإجراء بطانية خالية من جزء فقط من ذاكرة التخزين المؤقت ، فقد تفكر في تعيين انتهاء الصلاحية لفترة زمنية أقصر.

3
artlung

نظرًا لأن memcached لا يحتوي على مساحة اسم أو شيء مثل الحذف/الاستعلام بواسطة أحرف البدل ، فيمكنك القيام بهذه الخدعة: حفظ جميع المفاتيح يبدأ بمساحة "user_" في مفتاح ما.

فمثلا

$keys = array('user_1', 'user_2', 'user_3');
$memcache->set('user_', $keys);

الآن عندما تريد حذف جميع المفاتيح تبدأ بـ "user_" ، ما عليك سوى الحصول على المفتاح "user_" أولاً. من خلال القيام بذلك ، لديك كل المفاتيح التي تريد حذفها

$all_keys = $memcache->get('user_');
if($all_keys){
    foreach($all_keys as $key){
        $memcache->delete($key);
    }
}
2
Ha Doan Ngoc