我尝试根据一些繁重的查询结果设置一些redis缓存
因此,我配置了redis,并阅读了文档,我使用useResultCache方法(请参见下文),并且我发现它可以根据需要将其保存到redis,所以我认为一切都很好,但是当我检查sql时所谓的我发现,即使存在缓存,该学说也会运行查询!
我尝试了很多次,似乎没有任何修改。
所以我认为,顺便说一句,我可以手动将实体保存在Redis中,所以我做到了:似乎工作正常,但是延迟加载不起作用!糟糕,我进行搜索后发现,这仅仅是因为实体未附加到ORM,所以我对每个结果进行了合并,而且看起来效果更好,但是...在某些地方,学说中称呼他应该已经拥有的外国实体内存,并且不会加载结果。我不知道,也许他不合并子实体。
第一次尝试
$query = $this->repository->findSomethingQuery()
>getQuery();
$result = $query->useResultCache(true, $this->cacheTTL, $key);
$result = $query->getResult();
其他尝试
$contains = $this->predisCache->contains($key);
if ($contains) {
$result = $this->predisCache->fetch($key);
//attach entities to orm
$this->mergeResult($result);
return $result;
}
$result = $this->repository->findSomethingQuery()
->getQuery()
->getResult();
$this->predisCache->save($key, $result, $this->customerCacheTTL);
return $result;
我认为最好的还是使用教义法,但是我仍然不明白所缺少的是什么。