我有一个任务,需要使用Redis使用自定义键来缓存理论结果。这是存储库类:
<?php
namespace AppBundle\Repository;
class JobRepository extends EntityRepository implements JobRepositoryInterface
{
/**
* @return Job[]
*/
public function getActiveWithCategory()
{
$qb = $this->createQueryBuilder('j');
return $qb
->addSelect('c')
->leftJoin('j.category', 'c')
->addCriteria(JobCriteria::active())
->getQuery()
->getResult();
}
}
接口:
<?php
namespace AppBundle\Repository;
interface JobRepositoryInterface
{
/**
* @return Job[]
*/
public function getActiveWithCategory();
}
是否可以为此存储库创建Decorator并以某种方式说教以返回所需的实现?
或者我必须创建实现接口的服务JobRepositoryService
。在这里,我称之为存储库方法。然后创建另一个JobCachedRepositoryService
的装饰器JobRepositoryService
。而且不要在整个项目中使用$this->getDoctrine()->getRepository('Job')
。
这是正确的解决方案吗?您将如何解决这个问题?
预先感谢
答案 0 :(得分:0)
如果您需要使用redis自定义键来缓存学说的结果,可以这样:
<?php
namespace AppBundle\Repository;
class JobRepository extends EntityRepository implements JobRepositoryInterface
{
/**
* @return Job[]
*/
public function getActiveWithCategory()
{
$qb = $this->createQueryBuilder('j');
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$cacheDriver = new Doctrine\Common\Cache\RedisCache();
$cacheDriver->setRedis($redis);
$cacheDriver->setNamespace('some_namespace_');
$query->setResultCacheDriver($cacheDriver);
$query->useResultCache(true, 3600, 'result_key_in_redis');
$query = $qb->addSelect('c')
->leftJoin('j.category', 'c')
->addCriteria(JobCriteria::active())
->getQuery();
return $query->getResult();
}
}
您可以通过pecl
安装redis lib。