it-swarm-id.com

Apakah ada cara untuk membatalkan semua entri memcache yang dimulai dengan "Pengguna *"?

Saya baru-baru ini membuat perubahan ke kelas Pengguna saya (yang memcached); apakah ada cara saya dapat membatalkan semua entri yang kuncinya dimulai dengan User tanpa membatalkan seluruh cache?

Jika tidak, apakah ada solusi? Saya lebih suka tidak menghapus semuanya.

2
Thomas Bonini

Dalam FAQ memcached , Menghapus oleh Namespace :

Meskipun memcached tidak mendukung segala jenis penghapusan atau penghapusan wildcard menurut namespace (karena tidak ada ruang nama), ada beberapa trik yang dapat digunakan untuk mensimulasikan ini. Mereka memang membutuhkan perjalanan ekstra ke server memcached.

Contoh, dalam PHP, untuk menggunakan namespace bernama 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");

Jika Anda berencana melakukan blanket clear hanya sebagian dari cache, Anda dapat mempertimbangkan untuk mengatur masa kedaluwarsa ke periode waktu yang lebih singkat.

3
artlung

Karena memcached tidak memiliki namespace atau sesuatu seperti delete/query oleh wildcard, Anda dapat melakukan trik ini: simpan semua kunci dimulai dengan namespace "user_" di dalam kunci.

Sebagai contoh

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

Sekarang ketika Anda ingin menghapus semua kunci dimulai dengan "user_", dapatkan kunci "user_" terlebih dahulu. Dengan melakukan itu, Anda memiliki semua kunci yang ingin Anda hapus

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