it-gundan.com

"User *"로 시작하는 모든 memcache 항목을 무효화하는 방법이 있습니까?

최근에 User 클래스 (memcached)를 변경했습니다. 전체 캐시를 무효화하지 않고 키가 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