【问题标题】:Delete stored apc keys with a regular expression使用正则表达式删除存储的 apc 键
【发布时间】:2012-07-17 03:20:59
【问题描述】:

是否可以使用一种方法使您能够使用正则表达式删除存储的 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);

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

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

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

【问题讨论】:

标签: php caching apc


【解决方案1】:

作为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

【讨论】:

    猜你喜欢
    • 2014-02-24
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 2016-04-18
    • 1970-01-01
    • 2012-10-18
    相关资源
    最近更新 更多