【发布时间】:2015-05-18 20:46:29
【问题描述】:
是否可以使用通配符清除 apcu 缓存?
例如,我可能有一堆缓存键:
products_fooandbars product_1_foo
users_fooandbars user_1_foo user_1_bar
user_2_foo user_2_bar
有没有办法像这样清除用户1拥有的所有东西 user_1_* 或者清除所有喜欢这个user_*的用户
我将 Symfony 与学说 apc 缓存类一起使用
【问题讨论】:
是否可以使用通配符清除 apcu 缓存?
例如,我可能有一堆缓存键:
products_fooandbars product_1_foo
users_fooandbars user_1_foo user_1_bar
user_2_foo user_2_bar
有没有办法像这样清除用户1拥有的所有东西 user_1_* 或者清除所有喜欢这个user_*的用户
我将 Symfony 与学说 apc 缓存类一起使用
【问题讨论】:
我相信你应该按照http://php.net/manual/en/function.apc-delete.php#101794的描述尝试一下
// delete all keys beginning with a regex match on MY_APC_TESTA
$toDelete = new APCIterator('user', '/^MY_KEY/', APC_ITER_VALUE);
var_dump( apc_delete($toDelete) );
【讨论】:
OP 指的是APCu 而不是APC。
函数名称等没有太大区别,但最好让大家明确APC是旧版本,APCu是新版本,带有更好的实施。
旧 APC 实现了操作码缓存和用户对象缓存。 APCu 只实现用户对象缓存。对于操作码缓存,您可以使用其他东西,例如 Zend OPcache。 也就是说,这是来自@Evgenly 的更新版本:
// delete all keys beginning with a regex match
foreach(new APCUIterator('/^MY_KEY/') as $apcu_cache){
echo 'key: ' . $apcu_cache['key'] . PHP_EOL;
echo 'val: ' . $apcu_cache['value'];
apcu_delete($apcu_cache['key']);
}
foreach 是说明性的,你也可以这样做:
apcu_delete(new APCUIterator('/^MY_KEY/'));
【讨论】: