2012-06-23 17 views
6

मैं एक उपयोगकर्ता के नए संदेशों (संदेश सेवा एप्लिकेशन) की संख्या को पुन: प्राप्त एक प्रश्न पर सिद्धांत 2 के परिणाम कैश का उपयोग कर रहा:सिद्धांत 2 परिणाम कैश अमान्यकरण

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

मैं इस तरह इस कैश को अमान्य करने की कोशिश की (मेरी इकाई भंडार में):

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

    if (!$result) { 
     return false; 
    } 

    return $cacheDriver->flushAll(); 
} 

इसलिए मुझे अपनी वेबसाइट के प्रत्येक पृष्ठ पर बेकार क्वेरी करने की आवश्यकता नहीं है।

मेरे प्रश्न: क्या यह एक अनुशंसित अभ्यास है? क्या मैं अंततः समस्याओं में भाग जाऊंगा?

उत्तर

2

मुझे ऑनफ्लश हुक बनाने का विचार था। वहाँ आप सभी संस्थाओं आवेषण, अद्यतन के लिए पंक्तिबद्ध और इसलिए हटा देता है आप इकाई नाम और पहचानकर्ता आदि

दुर्भाग्य से, मैं अभी तक किसी भी घटना श्रोताओं का निर्माण नहीं किया है, लेकिन मैं निश्चित रूप से ऐसी बात का निर्माण करने की योजना के आधार पर कैश को अमान्य कर सकते हैं मेरी परियोजना के लिए।

Here onFlush घटना के लिए सिद्धांत प्रलेखन के लिए एक लिंक है

संपादित करें: है घटनाओं को लागू करने की भी एक आसान तरीका। एक इकाई वर्ग में आप टिप्पणियों में @HasLifecycleCallbacks जोड़ सकते हैं और आप @PreUpdate या @PrePersist एनोटेशन के साथ फ़ंक्शन को परिभाषित कर सकते हैं। हर बार जब यह मॉडल अद्यतन या जारी रहता है, तो इस फ़ंक्शन को कॉल किया जाएगा।

/** 
* @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); 
    } 
} 

तो शायद इसका उपयोग किसी इकाई के प्रत्येक उदाहरण को अमान्य करने के लिए किया जा सकता है?

+0

आपने मेरे प्रश्न का उत्तर नहीं दिया ... – Nanocom

संबंधित मुद्दे