2011-11-14 26 views
6

Tôi hiện đang làm việc để thêm memcache vào một ứng dụng chạy trên GAE/J. Tôi có một câu hỏi về cách memcache sản xuất hoạt động như thế nào khi các giá trị hết hạn, nếu chúng cũng được loại bỏ.Các khóa có bị xóa khi dữ liệu memcache hết hạn không?

Gần nhất tôi có thể tìm thấy để trả lời câu hỏi này là ở đây: http://code.google.com/appengine/docs/java/memcache/overview.html#How_Cached_Data_Expires

Tôi biết tôi không thể dựa vào giá trị ở trong memcache; và tôi không, nhưng những gì tôi đang tự hỏi, là nếu các phím mà ánh xạ tới những giá trị đó cũng bị loại bỏ.

Nói cách khác, nếu tôi làm

mycache.contains("key")

Liệu điều này vẫn đúng sau khi một giá trị được đẩy ra khỏi bộ nhớ cache?

Lưu ý phụ: Đừng nghĩ rằng điều đó tạo nên sự khác biệt; nhưng chỉ trong trường hợp, tôi đang sử dụng memcache async từ dịch vụ memcache và được một tổ chức của nó như thế này:

MemcacheServiceFactory.getAsyncMemcacheService();

tôi yêu cầu này vì tôi không làm điển hình

if(cache.get("key") == null)

Tôi lưu trữ giá trị rỗng khi chúng quay trở lại từ kho dữ liệu vì vậy tôi không thường xuyên tìm kiếm giá trị null. Và tôi cẩn thận để đảm bảo loại bỏ khóa khi nó có thể thay đổi. Vì vậy, chỉ vì tra cứu memcache trả về null, tôi làm việc trên giả định rằng truy vấn thực tế là null; nhưng tôi đảm bảo rằng khi các truy vấn khác có thể thay đổi điều đó xảy ra, việc tra cứu null bị xóa. Đó là lý do tại sao tôi đang sử dụng cache.contains("key") như trái ngược với cache.get("key") == null

+0

Khóa và giá trị không thể tách rời; nó sẽ không có ý nghĩa gì nếu chúng được. –

Trả lời

11

Giả định của bạn là chính xác, mycache.contains("key") sẽ trả về false nếu giá trị đã bị xóa khỏi dịch vụ memcache. Hành vi này được ghi lại trong Javadoc của low-level Memcache API.

Các vấn đề liên quan