APC允许您将数据存储在密钥内,但您无法对这些密钥进行分组.
因此,如果我想拥有一个名为"文章"的组,并且在这个组中,我将拥有采用文章ID形式的密钥,我不能轻易做到这一点.
articles -> 5 -> cached data
-> 10 -> cached data
-> 17 -> cached data
...
Run Code Online (Sandbox Code Playgroud)
我可以在密钥前面添加"group"名称,例如:
article_5 -> cached data
article_10 -> cached data
article_17 -> cached data
...
Run Code Online (Sandbox Code Playgroud)
但是这使得如果我想要删除整个组是不可能的:(
一个可行的解决方案是存储多维数组(这就是我现在正在做的),但我认为这不好,因为当我想访问/或删除缓存数据时,我需要先将整个组.因此,如果该组中有一篇文章,您可以想象我将迭代和搜索的数组
你对我怎样才能实现团队合作有更好的想法吗?
__paths,它基本上是一个多维数组,包含缓存中所有其他条目的完整前缀键路径.当我请求或删除缓存时,我使用此数组作为参考,以快速找到我需要删除的密钥(或密钥组),因此我不必存储数组并通过所有密钥迭代... 是否可以使用方法使您能够使用正则表达式删除存储的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但我不认为正则表达式是支持的?