2012-06-23 13 views
6
Ben bir kullanıcının yeni mesajlar (mesajlaşma uygulaması) sayısı alınırken bir sorguyu Doktrini 2'nin sonuç önbellek kullanıyorum

:Doktrini 2 sonuç önbellekte geçersiz kılma

$query->useResultCache(true, 500, 'messaging.nb_new_messages.'.$userId); 

böyle bu önbelleği geçersiz çalıştı (benim varlık depoda):

public function clearNbNewMessagesOfUserCache($userId) { 
    $cacheDriver = $this->getEntityManager()->getConfiguration()->getResultCacheImpl(); 
    $result = $cacheDriver->delete('skepin_messaging.nbNewMessages.'.$userId); 

    if (!$result) { 
     return false; 
    } 

    return $cacheDriver->flushAll(); 
} 

web sitemin her sayfada bir işe yaramaz sorgusu yapmak gerekmez Böylece

.

Sorularım: önerilen bir uygulamadır? Eninde sonunda problemlerle karşılaşacak mıyım?

cevap

2

OnFlush kancası oluşturma fikri vardı. Burada, ekleme, güncelleştirme ve silme işlemleri için sıraya alınan tüm varlıklar var, dolayısıyla varlık adı ve tanımlayıcıya bağlı olarak önbellekleri geçersiz kılabilirsiniz.

Maalesef henüz herhangi bir olay dinleyicisi oluşturmadım ancak kesinlikle böyle bir şey yapmayı planlıyorum projem için.

Here onFlush olay için doktrin belgelerine bir bağlantı

Düzenleme: olaylara uygulayabilmek bile daha kolay bir yolu yoktur . Bir varlık sınıfında, ek açıklamalara @HasLifecycleCallbacks ekleyebilir ve @PreUpdate veya @PrePersist ek açıklamalarıyla bir işlev tanımlayabilirsiniz. Bu model her güncellendiğinde ya da güncellendiğinde, bu işlev çağrılır.

/** 
* @Entity 
* @Table(name="SomeEntity") 
* @HasLifecycleCallbacks 
*/ 
class SomeEntity 
{ 
    ... 

    /** 
    * @PreUpdate 
    * @PrePersist 
    */ 
    public function preUpdate() 
    { 
     // This function is called every time this model gets updated 
     // or a new instance of this model gets persisted 

     // Somethink like this maybe... 
     // I have not yet completely thought through all this. 
     $cache->save(get_class($this) . '#' . $this->getId(), $this); 
    } 
} 

Bu, bir varlığın her bir örneğini geçersiz kılmak için kullanılabilir mi?

+0

Soruma cevap vermediniz ... – Nanocom