2012-07-17 69 views
5

是否可以使用一种方法使您能够使用正则表达式删除存储的apc条目?使用正则表达式删除存储的apc密钥

例如,当新数据输入到数据库中时,某些用户查询要从缓存中删除,以便在下次运行查询时显示新数据。

说你有哪些缓存好友列表查询,但是,当一个新的朋友加入缓存的所有朋友查询该用户将被删除...

如果我有这样的用户好友列表键:

$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开始运行添加新的朋友查询,以确保在朋友列表显示在旁边观看的新用户后的所有项:

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

由于朋友列表sql和添加朋友sql在不同的文档中,这似乎是最简单的方法去做,而不重写和键入sql,但我不认为正则表达式支持?

+0

可能重复:http://stackoverflow.com/questions/4785153/delete-cache-by-name-in-apc-memcache-eaccelerator – 2012-07-17 03:25:53

回答

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