【问题标题】:Clearing apcu with a wild card用通配符清除 apcu
【发布时间】: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 缓存类一起使用

【问题讨论】:

    标签: php symfony apc


    【解决方案1】:

    我相信你应该按照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) ); 
    

    【讨论】:

    • 谢谢。这正是我所需要的
    【解决方案2】:

    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/'));
    

    【讨论】:

    • 是的,这就是我需要的。对 APC 采用同样的方法。谢谢
    猜你喜欢
    • 2018-06-01
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    相关资源
    最近更新 更多