【问题标题】:how to use Memcache with symfony如何在 symfony 中使用 Memcache
【发布时间】:2017-08-18 07:18:34
【问题描述】:

我使用 symfony 2,我想使用 Memcache,但问题是我找不到任何关于 Memcache 的解释,我刚刚为 memcached 找到了,所以它们的设置步骤相同吗?我添加了这一行来在 symfony 上安装 Memcache?

config.yml

framework:
  session:
    handler_id: session.handler.memcached

对于parameters.yml

parameters:   
  memcached_host: 127.0.0.1
  memcached_port: 11211
  memcached_prefix: custom_key_
  memcached_expire: 14400

services.yml

services:
  session.handler.memcached:
    class: Symfony\Component\HttpFoundation\Session\Storage\Handler\MemcachedSessionHandler
    arguments: [ "@session.memcached", { prefix: '%memcached_prefix%', expiretime: '%memcached_expire%' } ]


services:
  session.memcached:
    class: Memcached
    arguments:
      persistent_id: %memcached_prefix%
    calls:
      - [ addServer, [ %memcached_host%, %memcached_port% ]]



services:
  session.memcached:
    class: Madisoft\AppBundle\Utils\MemcachedWrapper
    arguments:
      persistent_id: '%memcached_prefix%'
    calls:
      - [ addServer, [ '%memcached_host%', '%memcached_port%' ] ]

【问题讨论】:

    标签: php symfony session memcached


    【解决方案1】:

    只有一个Memcached 软件,它是https://memcached.org/ 提供的那个。

    Memcached 有两个著名的 PHP 库,分别称为 memcache (http://php.net/manual/en/book.memcache.php) 和 memcached (http://php.net/manual/en/book.memcached.php),所以这可能是您的困惑所在。

    要将Memcached 与 Symfony 2 一起使用,我建议使用 LeaseWeb 提供的外部包,它提供了所有必需的文档:https://github.com/LeaseWeb/LswMemcacheBundle

    从 Symfony 3.3 开始会有一个原生的Memcached 适配器:参见http://symfony.com/blog/new-in-symfony-3-3-memcached-cache-adapter

    【讨论】:

      【解决方案2】:

      我使用的是 Symfony 3.4,这是我的 config.yml:

      parameters:
          session_memcached_host: localhost
          session_memcached_port: 11211
          session_memcached_prefix: sess
          session_memcached_expire: 100 # this is in seconds
      
      framework:
          session:
              handler_id: session.handler.memcached
      

      和 services.yml:

      services:
          session.memcached:
              class: Memcached
              arguments:
                  # Just remember to comment out below line or even remove whole arguments section
                  # persistent_id: %session_memcached_prefix%
              calls:
                  - [ addServer, [ %session_memcached_host%, %session_memcached_port% ]]
      
          session.handler.memcached:
              class:     Symfony\Component\HttpFoundation\Session\Storage\Handler\MemcachedSessionHandler
              arguments: ["@session.memcached", { prefix: %session_memcached_prefix%, expiretime: %session_memcached_expire% }]
      

      通过上述配置,我将会话存储在 Memcached 服务器中(准确地说是 AWS ElasticCache Memcached)。

      如果你想玩 Memcached,这里是我用来存储我的自定义数据的:

      use Symfony\Component\Cache\Adapter\MemcachedAdapter;
      
      $client = MemcachedAdapter::createConnection('memcached://localhost');
      $cache  = new MemcachedAdapter($client, $namespace = '', $defaultLifetime = 0);
      $item   = $cache->getItem('itemName');
      
      if (!$item->isHit()) {
          // Item does not exist
          $item
              ->set($data)
              ->expiresAfter(10) // in seconds
          ;
          $cache->save($item);
      } else {
          // Item exists
          $cachedItem = $item->get();
      }
      

      我希望这会有所帮助。

      【讨论】:

      • 如果我想在每个会话中存储一些东西怎么办?您的最后一个示例存储了每个用户都可以获得的数据。如果我想为每个用户存储数据(就像本机会话所做的那样)怎么办?如果用户不发送 PHPSESSID 会怎样?
      猜你喜欢
      • 2015-05-01
      • 2011-06-14
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 2012-09-24
      相关资源
      最近更新 更多