如何在 symfony 中使用 Memcache
how to use Memcache with symfony
我使用 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%' ] ]
只有一个 Memcached
软件,它是 https://memcached.org/ 上可用的那个。
Memcached
有两个著名的 PHP
库,称为 memcache
(http://php.net/manual/en/book.memcache.php) and memcached
(http://php.net/manual/en/book.memcached.php),所以这可能就是您的困惑所在。
要在 Symfony 2 中使用 Memcached
我建议使用 LeaseWeb 提供的外部包,它提供了所有必需的文档:https://github.com/LeaseWeb/LswMemcacheBundle.
从 Symfony 3.3 开始,将有一个原生 Memcached
适配器:参见 http://symfony.com/blog/new-in-symfony-3-3-memcached-cache-adapter。
我使用的是 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();
}
希望对您有所帮助。
我使用 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%' ] ]
只有一个 Memcached
软件,它是 https://memcached.org/ 上可用的那个。
Memcached
有两个著名的 PHP
库,称为 memcache
(http://php.net/manual/en/book.memcache.php) and memcached
(http://php.net/manual/en/book.memcached.php),所以这可能就是您的困惑所在。
要在 Symfony 2 中使用 Memcached
我建议使用 LeaseWeb 提供的外部包,它提供了所有必需的文档:https://github.com/LeaseWeb/LswMemcacheBundle.
从 Symfony 3.3 开始,将有一个原生 Memcached
适配器:参见 http://symfony.com/blog/new-in-symfony-3-3-memcached-cache-adapter。
我使用的是 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();
}
希望对您有所帮助。