Skip to content

Instantly share code, notes, and snippets.

@cedricziel
Created April 7, 2016 08:28
Show Gist options
  • Save cedricziel/cc599be67f816540c608b7658ccd3cf6 to your computer and use it in GitHub Desktop.
Save cedricziel/cc599be67f816540c608b7658ccd3cf6 to your computer and use it in GitHub Desktop.
AppEngine flexible environment memcached handling for sessions and doctrine cache
# .....
framework:
validation:
cache: validator.mapping.cache.doctrine.apc
serializer:
cache: serializer.mapping.cache.doctrine.apc
session:
handler_id: session.handler.memcached
# Doctrine Configuration
doctrine:
dbal:
driver: pdo_mysql
charset: UTF8
orm:
metadata_cache_driver:
type: service
id: doctrine.cache.memcached
result_cache_driver:
type: service
id: doctrine.cache.memcached
query_cache_driver:
type: service
id: doctrine.cache.memcached
monolog:
handlers:
main:
type: service
id: vendor_infra.logging.handler.appengine
<?php
namespace Vendor\InfraBundle\Cache;
use Memcached;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* @package Vendor\InfraBundle\Cache
*/
class MemcachedFactory implements ContainerAwareInterface
{
/**
* @var ContainerInterface
*/
protected $container;
/**
* @return Memcached
*/
public function getInstance()
{
$host = getenv('MEMCACHE_PORT_11211_TCP_ADDR');
$port = getenv('MEMCACHE_PORT_11211_TCP_PORT');
$cache = new Memcached($this->container->getParameter('session_memcached_prefix'));
$cache->addServer($host, $port);
return $cache;
}
/**
* @param ContainerInterface|null $container A ContainerInterface instance or null
*/
public function setContainer(ContainerInterface $container = null)
{
$this->container = $container;
}
}
parameters:
doctrine.cache.memcached.prefix: dqc
services:
##
# Memcached factory
##
vendor_infra.cache.memcached_factory:
class: Vendor\InfraBundle\Cache\MemcachedFactory
calls:
- [ setContainer, [ '@service_container' ]]
##
# Memcached Session
##
session.memcached:
class: Memcached
factory: ['@vendor_infra.cache.memcached_factory', getInstance]
arguments:
persistent_id: '%session_memcached_prefix%'
##
# Memcached Session Handler
##
session.handler.memcached:
class: Symfony\Component\HttpFoundation\Session\Storage\Handler\MemcachedSessionHandler
arguments: ['@session.memcached', { prefix: '%session_memcached_prefix%', expiretime: '%session_memcached_expire%' }]
##
# Memcached Doctrine cache instance
##
doctrine.cache.query.memcached:
class: Memcached
factory: ['@vendor_infra.cache.memcached_factory', getInstance]
arguments:
persistent_id: '%doctrine.cache.memcached.prefix%'
##
# Memcached Doctrine cache
##
doctrine.cache.memcached:
class: Doctrine\Common\Cache\MemcachedCache
calls:
- [ setMemcached, [ '@doctrine.cache.query.memcached' ] ]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment