it-swarm-tr.com

"Kullanıcı *" ile başlayan tüm memcache girişlerini geçersiz kılmanın bir yolu var mı?

Geçenlerde (benim memcached) Kullanıcı sınıfımda bir değişiklik yaptım; önbelleğin tamamını geçersiz kılmadan, anahtarı User ile başlayan tüm girdileri geçersiz kılmamın bir yolu var mı?

Herhangi bir geçici çözüm yoksa? Her şeyi silmeyi tercih ederim.

2
Thomas Bonini

memcached FAQ , ( Ad Alanına Göre Silme :

Memcached, herhangi bir joker karakteri ad alanına göre silmeyi veya silmeyi desteklemese de (ad alanları olmadığı için), bunu simüle etmek için kullanılabilecek bazı püf noktaları vardır. Bununla birlikte, memcached sunucularına ekstra yolculuklar gerektirir.

Örnek, PHP'de foo adlı bir ad alanını kullanmak için:

$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");

Önbelleğin yalnızca bir bölümünden arınmış bir battaniye yapmayı planlıyorsanız, sona ermeyi daha kısa bir süreye ayarlamayı düşünebilirsiniz.

3
artlung

Memcached ad alanına sahip olmadığından veya joker karakterlerle silme/sorgulama gibi bir şey olmadığından, bu hileyi yapabilirsiniz: tüm tuşları bir tuştaki "user_" ad alanıyla başlar.

Örneğin

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

Şimdi tüm anahtarları silmek istediğinizde "user_" ile başladığınızda, önce "user_" anahtarını almanız yeterlidir. Bunu yaparak, silmek istediğiniz tüm anahtarlara sahip olursunuz.

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