Sadece Memcached'i kurdum ve bunu Doctrine ORM (Doctrine 2.4.8+, Symfony 2.8+) ile yapılan çeşitli sorguların sonuçlarını önbelleğe almak için kullanmaya çalışıyorum.
Benim app/config/config_prod.yml
bu var:Doctrine Sonuç Memcached ile önbelleğe alma
doctrine:
orm:
metadata_cache_driver: memcached
result_cache_driver: memcached
query_cache_driver: memcached
Ve böyle 2 sorguları (ben sadece örneğin burada önbellek id yerini) üzerinde useResultCache()
çalıştı: return $query->useResultCache(true, 300, "my_cache_id")->getArrayResult();
. Buradaki özel sorgular, çünkü onların karmaşıklığı nedeniyle yerel sorgular (SQL), ancak herhangi bir sorgu (class AbstractQuery) için kullanılabilir, bu yüzden çalışması gerektiğini varsayalım.
Ne yazık ki, öyle değil. Sayfayı yenilediğimde, veritabanında bir değişiklik yapsaydım, değişiklik görüntülenir. Memcached istatistiklerini kontrol ettim ve hala bazı önbellek isabetleri var gibi görünüyor ama gerçekten bilmiyorum, cf. az önce ne dedim
Önbelleğe alınan sonuçları almak için önbelleğin neden burada kullanılmadığı konusunda bir fikri olan var mı? Bir şeyi yanlış anladım ve TTL bir şekilde göz ardı edildi mi?
Hata oluşmadı, memcached günlüğü boş.
, burada 2 yerli sorgular oluşturmak için benim kod düzeni i üzerinde bir Memcached testi koymak geçerli: Yani
$rsm = new ResultSetMapping;
$rsm->addEntityResult('my_entity_user', 'u');
// some $rsm->addFieldResult('u', 'column', 'field');
// some $rsm->addScalarResult('column', 'alias');
$sqlQuery = 'SELECT
...
FROM ...
INNER JOIN ... ON ...
INNER JOIN ... ON ...
// some more join
WHERE condition1
AND condition2';
// some conditions added depending on params passed to this function
$sqlQuery .= '
AND (fieldX = (subrequest1))
AND (fieldY = (subrequest2))
AND condition3
AND condition4
GROUP BY ...
ORDER BY ...
LIMIT :nbPerPage
OFFSET :offset
';
$query =
$this->_em->createNativeQuery($sqlQuery, $rsm)
// some ->setParameter('param', value)
;
return $query->useResultCache(true, 300, "my_cache_id")->getArrayResult();
İlginç bir soru. Önbellek sürücüsü olarak apc'ye geçmek (geri) herhangi bir fark yaratır mı? – mblaettermann
@mblaettermann Varsayılan olarak apc ile belirtilmiştir. Ve beklediğim gibi apc i doğrudan belirlediysem: 'Symfony \ Component \ Debug \ Exception \ UndefinedFunctionException" Doctrine \ Common \ Cache "adında" apc_fetch "işlevini çağırmayı denediniz. – Harest
Ah, tamam. APCu PHP uzantısı eksik görünüyor. Size başka sonuçlar vereceğini merak ettim. Sistemi değiştirebilirseniz, 'apt-get install php5-apcu' ile kurabilirsiniz. Ancak bu, sorulan soruya gerçekten yardımcı olmuyor. – mblaettermann