ohv*_*ino 5 php memcached doctrine symfony doctrine-orm
我正在我的 Symfony2 应用程序上测试 Memcached 我将它设置为缓存学说的查询、结果和元数据:
orm:
entity_managers:
default:
metadata_cache_driver:
type: service
id: doctrine.cache.memcache2
query_cache_driver:
type: service
id: doctrine.cache.memcache2
result_cache_driver:
type: service
id: doctrine.cache.memcache2
services:
memcache:
class: Memcache
calls:
- [ addserver, [ 'localhost', 11211 ]]
doctrine.cache.memcache2:
class: Doctrine\Common\Cache\MemcacheCache
calls:
- [setMemcache, [@memcache]]
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切正常。
我想知道如果 Memcached 服务器出现故障,学说会如何表现。据我所知,应用程序中断了。在开发模式下,我收到以下消息:
注意: MemcachePool::get(): Server localhost (tcp 11211, udp 0) failed with: 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应. (10060) 500 内部服务器错误 - ContextErrorException
在生产模式下,我还会看到一个 http 500。
有没有办法告诉教义绕过/忽略 Memcached 服务器并直接进入数据库,而不是返回 500s?
您可以使用The Second Level Cache在doctrine/orm 2.5中可用的
保留 orm 的默认选项并添加 memcache 作为二级缓存的想法:
orm:
entity_managers:
default:
auto_mapping: true
second_level_cache:
region_cache_driver:
type: service
id: doctrine.cache.memcache2
enabled: true
regions:
region_name:
cache_driver:
type: service
id: doctrine.cache.memcache2
Run Code Online (Sandbox Code Playgroud)
启用后,将首先在缓存中搜索实体,如果未找到,将触发数据库查询,然后将实体结果存储在缓存提供程序中。