2012-07-17 9 views
5

保存されたapcエントリを正規表現で削除する方法を使用することはできますか?保存されたapcキーを正規表現で削除する

たとえば、新しいデータがデータベースに入力されたときにキャッシュから削除したいユーザーのクエリのうち、クエリが実行されたときに新しいデータが表示されるようなクエリ。

私はユーザーのために、このようなキーを持っている場合は

...あなたがキャッシュされているフレンドリストのクエリを持っていると言うが、新しい友人が追加されたときに、そのユーザーのすべてのキャッシュされた友人のクエリが削除されますがfriendlist:

apc_delete("~$userId-friend([a-f0-9]+)~"); 

$sql = "SELECT * FROM friends WHERE userId = :userId"; 

$sqlKey = str_replace(":userId", $userId, $sql);  
$key = $userId."-friend".md5('query'.$sqlKey); 

$data = friendsArray; 
apc_add($key, $data, 60 * 10); 

その後、望ましい結果は、次の表示で、新しいユーザーを表示フレンドリストを確実にするための新しい友人のクエリを追加し実行した後、現在のユーザーIDで始まったすべてのエントリを削除することです3210

友人リストのsqlとadd friend sqlが別のドキュメントにあるので、これはSQLを書き換えてキー入力せずに実行するのが最も簡単な方法ですが、正規表現はサポートされていないと思いますか?

+0

可能性の重複:http://stackoverflow.com/questions/4785153/delete-cache-by-name-in-apc-memcache-eaccelerator –

答えて

3

J Fox wrote on php.netと同様に、apc_deleteはキーまたはAPCIteratorオブジェクトの配列も受け入れます。また、APCIteratorは正規表現を受け入れます。だからあなたのコードはそのような程度になります。

// delete all keys beginning with a regex match 
$toDelete = new APCIterator('user', '/^' . $userId . '-friend([a-f0-9]+)/', APC_ITER_VALUE); 

var_dump(apc_delete($toDelete)); 
// returns boolean true|false on success or failure 
関連する問題