我在Symfony2应用程序上测试Memcached 我将其设置为缓存doctrine的查询,结果和元数据:
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]]
到现在为止,一切正常。
我想知道如果Memcached服务器发生故障,学说会如何表现。据我所知,应用程序中断了。在开发模式下,我收到以下消息:
注意:MemcachePool :: get():服务器localhost(tcp 11211,udp 0)失败:连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接主机已经建立连接失败未能回应。 (10060) 500内部服务器错误 - ContextErrorException
在制作模式中,我也会看到一个http 500。
有没有办法告诉学说绕过/忽略Memcached服务器并直接转到数据库,而不是返回500?
答案 0 :(得分:0)
您可以使用doctrine / orm 2.5
中提供的The Second Level Cache
保持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
启用后,将首先在缓存中搜索实体,如果找不到实体,则会触发数据库查询,然后实体结果将存储在缓存提供程序中。