如果服务器脱机,如何告诉doctrine忽略Memcached?

I'm testing Memcached on my Symfony2 application I set it to cache doctrine's queries, results and metadata:

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]]

Until now, everything works fine.

I was wondering how does doctrine behaves if the Memcached server goes down. As far as I could see, the application breaks. In dev mode I get the following message:

Notice: MemcachePool::get(): Server localhost (tcp 11211, udp 0) failed with: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. (10060) 500 Internal Server Error - ContextErrorException

In production mode I'm also presented with an http 500.

Is there a way to tell doctrine to bypass/ignore the Memcached server and go directly to the database, instead of returning 500s?

You can use The Second Level Cache available in doctrine/orm 2.5

see: http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/second-level-cache.html

The idea to keep you default options for orm and add a memcache as second level cache:

  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

When turned on, entities will be first searched in cache and if they are not found, a database query will be fired and then the entity result will be stored in a cache provider.