相关疑难解决方法(0)

具有APC缓存的密钥组

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,它基本上是一个多维数组,包含缓存中所有其他条目的完整前缀键路径.当我请求或删除缓存时,我使用此数组作为参考,以快速找到我需要删除的密钥(或密钥组),因此我不必存储数组并通过所有密钥迭代...

php arrays caching apc

6
推荐指数
2
解决办法
2111
查看次数

使用正则表达式删除存储的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但我不认为正则表达式是支持的?

php caching apc

5
推荐指数
1
解决办法
894
查看次数

标签 统计

apc ×2

caching ×2

php ×2

arrays ×1