2012-06-23 26 views
6

Tôi đang sử dụng bộ nhớ cache kết quả thuyết 2 của trên một truy vấn lấy số lượng tin nhắn mới của người dùng (nhắn tin ứng dụng):thuyết 2 kết quả bộ nhớ cache huỷ bỏ hiệu lực

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

Tôi cố gắng để làm mất hiệu lực bộ nhớ cache này như thế này (trong kho lưu trữ thực thể của tôi):

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

    if (!$result) { 
     return false; 
    } 

    return $cacheDriver->flushAll(); 
} 

Vì vậy, tôi không cần thực hiện truy vấn vô dụng trên mỗi trang trong trang web của mình.

Câu hỏi của tôi: là phương pháp được khuyến nghị? Cuối cùng tôi sẽ gặp phải vấn đề?

Trả lời

2

Tôi có ý tưởng xây dựng móc nối onFlush. Ở đó bạn có tất cả các thực thể xếp hàng để chèn, cập nhật và xóa do đó bạn có thể làm mất hiệu lực bộ đệm tùy thuộc vào tên tổ chức và mã định danh, v.v.

Thật không may, tôi chưa xây dựng bất kỳ người nghe sự kiện nào. cho dự án của tôi.

Here là một liên kết đến tài liệu học thuyết cho sự kiện onFlush

Edit: Thậm chí còn có một cách dễ dàng hơn để triển khai sự kiện. Trong một lớp thực thể, bạn có thể thêm @HasLifecycleCallbacks vào các chú thích và bạn có thể định nghĩa một hàm bằng chú thích @PreUpdate hoặc @PrePersist. Hơn mỗi lần mô hình này được cập nhật hoặc duy trì chức năng này sẽ được gọi.

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

Vì vậy, điều này có thể được sử dụng để làm mất hiệu lực từng trường hợp của một thực thể?

+0

Bạn không trả lời câu hỏi của mình ... – Nanocom