2012-04-12 21 views
12

Khi trong memcache bộ nhớ có sẵn đầy, memcache sử dụng thuật toán LRU (được sử dụng gần đây nhất) để giải phóng bộ nhớ. Câu hỏi của tôi là thuật toán LRU thay vì xóa các mục đã không được sử dụng trong một khoảng thời gian nào đó (sử dụng gần đây nhất) so với các mục đã hết hạn? Các mục nhập hết hạn sẽ không bị xóa vào thời điểm chính xác đó nhưng khi lần tiếp theo ai đó cố gắng truy cập vào nó (AFAIR). Vậy thuật toán LRU (cũng) sẽ hết hạn cho các khóa?Liệu LRU có xóa các mục đã không được sử dụng trong một khoảng thời gian không?

Trả lời

35

Để hiểu cách ghi nhớ LRU, bạn phải đi sâu hơn và hiểu cách lưu trữ các mục lưu trữ. Các mục được lưu trữ tùy thuộc vào kích thước của chúng, chỉ cần đặt tất cả các mục của bạn cho phép nói 100k được lưu trữ trong cùng một bản, trong khi các mục khác 200k được lưu trữ trong một bản khác nhau.

Khi bộ nhớ đầy và bạn cố gắng lưu trữ một mục 100k, memcached sẽ áp dụng LRU trên tấm đó. Nếu có các khóa hết hạn hoặc không được sử dụng trong bản 200k, chúng vẫn ở đó, trong khi bản 100k chỉ có các phím nóng, một trong số các khóa đó dựa trên thuật toán sẽ bị loại bỏ.

Quay lại câu hỏi của bạn, khi bộ nhớ đầy và bạn cố gắng lưu trữ một mục, memcached sẽ tìm kiếm đầu tiên cho các mục đã hết hạn trong bản bạn đang cố viết, sau đó tìm các mục được sử dụng ít nhất. Vì vậy, có, nó sẽ đưa vào tài khoản hết hạn của các phím, hoặc tốt hơn, hết hạn các phím đi trước khi LRU.

Ngoài ra, khi bạn cố gắng nhận một món hàng đã quá ngày hết hạn, mục đó sẽ bị gỡ bỏ và bộ nhớ được khai hoang.

tin chi tiết về (rất nhiều trên google để phân bổ bộ nhớ memcached điều này giải thích LRU là tốt, rất nhiều chuyện để đọc về vấn đề này):

http://returnfoo.com/2012/02/memcached-memory-allocation-and-optimization-2/

http://www.adayinthelifeof.nl/2011/02/06/memcache-internals/

Và một công cụ thực sự tốt đẹp mà tôi giới thiệu về mọi chủ đề được ghi nhớ:

http://code.google.com/p/phpmemcacheadmin/

Hy vọng nó sẽ giúp!

+0

cảm ơn bạn rất nhiều, đó thực sự là câu trả lời tôi đang tìm kiếm! cảm ơn vì các tài nguyên bổ sung! – zaphod1984

+0

Oh người đàn ông, cảm ơn cho công cụ đó !! – ahskaus

0

Từ những gì tôi biết tuyên bố này là không đúng sự thật.

"Quay lại câu hỏi của bạn, khi bộ nhớ đầy và bạn cố gắng lưu trữ một mục, memcached sẽ nhìn đầu tiên cho các mục đã hết hạn trong bản bạn đang cố viết, sau đó tìm các mục được sử dụng ít nhất. vâng, nó có tính đến thời điểm hết hạn của các phím, hoặc tốt hơn, các khóa hết hạn sẽ đi trước trước LRU. "

Memcache sẽ loại bỏ mục theo LRU (nó không quan trọng nếu nó có bất kỳ mục hết hạn miễn là chúng được sử dụng gần đây hơn một khóa khác (thậm chí hợp lệ)).

Đã thử nghiệm một thời gian trước trên Memcache 1.4.4.

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