使用正则表达式删除存储的apc键

Dan*_*Dan 5 php caching 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);
Run Code Online (Sandbox Code Playgroud)

然后,期望的结果是在运行添加新朋友查询后删除以当前userId开头的所有条目,以确保朋友列表在下次查看时显示新用户:

apc_delete("~$userId-friend([a-f0-9]+)~");
Run Code Online (Sandbox Code Playgroud)

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

Moł*_*łot 3

正如J Fox 在 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
Run Code Online (Sandbox Code Playgroud)