1
나는 Bellow처럼 저장소를 가지고있다.Doctrine2 캐시 손상?
항목이 이미 테이블에 있으면 코드가 먼저 확인합니다.
그렇지 않으면 데이터를 다운로드 한 다음 테이블에 저장합니다.
이미 테이블에 있으면 레코드를 반환합니다.
그러나 때로는 테이블의 항목에 대한 검사 후 여전히 가서 키 충돌을 만들고, 다운로드하고이 이미 경우에도 항목을 저장하기 위해 노력하지만,이 그것 때문에 발생해서는 안됩니다 단지 수색하고 그것을 찾지 못했습니다.
유의할 것들 : 내가 $ 질의 -를 사용하지 않도록 설정하면
- > (참) useResultCache 내가 아무 문제가 없습니다.
- 테이블에서 작업하는 유일한 프로세스입니다.
- 이 코드는 항목이 테이블에 추가되는 유일한 장소입니다.
- 이 코드는 symfony2 콘솔 명령에서 호출됩니다.
- Memcache는 doctrine2에 설정된 캐시입니다.
- Memcached가 로컬로 실행 중입니다.
- arraycache를 사용할 때도 오류가 발생합니다.
- 이 쿼리는 1 초에 여러 번 실행됩니다. 새 항목을 추가 할 때 결과 캐시를 만료해야 할 수도 있습니다처럼
class ItemRepository extends EntityRepository { public function findOrFetch($id) { $item = $this->findItem($id); if($item != null) return $item; else { $itemData = $this->fetchItem($id); $item = new Item(); $item->setId($id); $item->setName($itemData['name']); $this->getEntityManager()->persist($item); $this->getEntityManager()->flush(); } } private function findItem($id) { $query = $this ->getEntityManager() ->createQuery('SELECT i from MonkeyWire\WowProfToolsBundle\Entity\Item i WHERE i.id = ?1'); $query->setParameter(1, $id); $query->useResultCache(true); return $query->getOneOrNullResult(); } private function fetchItem($id) { $api = new Client(); $api->setRequest(new Curl()); try { $itemData = $api->getItemsApi()->getItem($id); } catch (NotFoundException $e) { $itemData['name'] = "na"; } return $itemData; } }
, 나는 그러나 그 뒤에 생각을 이해하고, 여전히 오류가 발생합니다. OP에 몇 가지 더 많은 설명을 추가했습니다. – Roger