【问题标题】:Set ttl and namespace using Memcached in Zend Framework 2在 Zend Framework 2 中使用 Memcached 设置 ttl 和命名空间
【发布时间】:2013-08-28 18:20:12
【问题描述】:

据我所知,这似乎是设置 Memcached 并设置 TTL 和命名空间的方法,但它们在缓存中没有效果。密钥没有以命名空间为前缀,并且过期时间是无限的。

    $MemcachedOptions = new \Zend\Cache\Storage\Adapter\MemcachedOptions();
    $MemcachedResourceManager = new \Zend\Cache\Storage\Adapter\MemcachedResourceManager(1, new \Zend\Cache\Storage\Adapter\Memcached());
    $MemcachedResourceManager->addServer(1, array('localhost', 11211));
    $MemcachedOptions->setResourceManager($MemcachedResourceManager);

    $MemcachedOptions->setNamespace('FooBar_');
    $MemcachedOptions->setTtl(10);

    $cache = $MemcachedOptions->getResourceManager()->getResource(1);
    $cache->set('foobar_key','I am in cache');

有没有人有任何提示,线索?任何帮助将不胜感激。

【问题讨论】:

    标签: memcached zend-framework2 installation ttl


    【解决方案1】:

    MemcachedResourceManager 在您尝试使用时会有所不同。

    你应该像下面这样初始化它:

    // init a memcached resource manager with one native memcached resource
    // using resource id "1"
    $MemcachedResourceManager = new \Zend\Cache\Storage\Adapter\MemcachedResourceManager();
    $MemcachedResourceManager->addServer('1', array('localhost', 11211));
    
    // init a memcached storage adapter
    // using the native memcached resource of id "1"
    // configure it with a ttl and a namespace
    $cache = \Zend\Cache\StorageFactory::adapterFactory('memcached', array(
        'resource_manager' => $MemcachedResourceManager,
        'resource_id'      => '1',
        'namespace'        => 'FooBar_',
        'ttl'              => 10,
    ));
    
    // or
    $memcachedAdapterOptions = new \Zend\Cache\Storage\Adapter\MemcachedOptions(array(
        'resource_manager' => $MemcachedResourceManager,
        'resource_id'      => '1',
        'namespace'        => 'FooBar_',
        'ttl'              => 10,
    ));
    $cache = new \Zend\Cache\Storage\Adapter\Memcached($memcachedAdapterOptions);
    

    这些类如何协同工作:

    最重要的类是Zend\Cache\Storage\Adapter\Memcached,它是Memcached 的本机实例的包装器,在Zend\Cache\StorageInterface 的上下文中使用。

    此存储适配器具有多个定义为Zend\Cache\Storage\Adapter\MemcachedOptions 的选项。

    因为 ZF2 中的缓存存储适配器旨在处理一种类型的项目来存储您需要不同类型的项目 Zend\Cache\Storage\Adapter\Memcached 的不同实例。但是你不会使用不同的连接到 memcached(本机 Memcached 类的不同实例)服务器 - 这是 Zend\Cache\Storage\Adapter\MemcachedResourceManager 来玩的。

    Zend\Cache\Storage\Adapter\MemcachedResourceManager 处理 Memcached 的本机实例,Zend\Cache\Storage\Adapter\Memcached 将使用这些实例。

    【讨论】:

    • 太棒了!这有效(将命名空间更改为命名空间)。感谢您帮助我理解的两种方式。
    • 试图了解“..\Memcached 用于不同类型项目的不同实例”。在这种情况下,什么是“项目”,您为什么想要另一个 Memcached 实例?上面的工厂将始终使用相同的实例(除非您另有说明)...不是吗?
    • different instances of ..\Memcached for different type of items: 一种类型的项目可以是用户,另一种类型可以是产品。他们每个人都希望配置不同的 ttl/命名空间等。如果您不喜欢在存储或读取项目之前更改配置,则需要不同的实例。 PS:Zend\Cache\StorageFactory 不共享实例 - 它在每次调用时创建一个新实例。
    • 知道了。再次感谢!
    猜你喜欢
    • 2012-06-07
    • 2013-06-10
    • 2023-03-25
    • 2013-03-25
    • 2012-07-26
    • 2012-08-26
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多