Php 使rabbitmq使用者| Symfony2中的ORM缓存无效
我在symfony2应用程序中使用 该应用程序一次消耗10条消息,并使用doctrine querybuilder(消息数据中提供了过滤器)从mysql数据库收集数据。 Cachingsystem是APC。 考虑查询的剥离代码。Php 使rabbitmq使用者| Symfony2中的ORM缓存无效,php,mysql,symfony,doctrine-orm,rabbitmq,Php,Mysql,Symfony,Doctrine Orm,Rabbitmq,我在symfony2应用程序中使用 该应用程序一次消耗10条消息,并使用doctrine querybuilder(消息数据中提供了过滤器)从mysql数据库收集数据。 Cachingsystem是APC。 考虑查询的剥离代码。 $qb = $this->entityManager ->getRepository('My\Entity') ->createQueryBuilder(); $qb ->select('sum(this) as this
$qb = $this->entityManager
->getRepository('My\Entity')
->createQueryBuilder();
$qb
->select('sum(this) as this, sum(that) as that')
->andWhere('field in (:values)')
->setParameter('values', $filterValues);
$result = $qb
->getQuery()
->setSingleResult();
此查询为不同的筛选器值返回10倍相同的数据。当消费者重新启动并使用接下来的10条消息时,我再次得到10次不同的结果。
我认为条令缓存对此负责,并尝试如下方式使缓存无效:
$qb = $this->entityManager
->getRepository('My\Entity')
->createQueryBuilder();
$qb
->select('sum(this) as this, sum(that) as that')
->andWhere('field in (:values)')
->setParameter('values', $filterValues);
$result = $qb
->getQuery()
->setResultCacheLifetime(0)
->setSingleResult();
但没有效果。
我可以通过一次只消耗一条消息来解决这个问题,但这会使我的应用程序速度降低到一个不可接受的程度
谁能给我指一下正确的方向吗
谢谢,
jojo这归结为我的代码中的一个错误。 我不知何故认为,消费者在每次消费信息后都会重新关联。那不是真的!在我的查询服务中,我将一些查询的结果保存在类属性中。然后,代码是这样的:
<?php
if (null === $this->queryResult) {
$this->doQuery();
} else {
return $this->queryResult
}
我们也在使用oldsound,您能否尝试启动10个消费者,每个消费者一次只消费1条消息?我认为您可以在查询中使用这些信息:setCacheable(bool)、useResultCache(bool)