2012-06-27 17 views
6

Từ wiki memcached:Dữ liệu được thay thế bằng memcached khi nào đầy và hiệu suất memcache?

Khi bảng là đầy đủ, chèn tiếp theo gây ra dữ liệu cũ để được thanh lọc trong thời gian gần đây nhất được sử dụng (LRU) theo thứ tự.

Tôi có câu hỏi sau:

  1. Những dữ liệu này sẽ được thanh lọc? Cái nào cũ hơn bằng cách chèn, hoặc cái được sử dụng gần đây nhất? Ý tôi là nếu dữ liệu được truy cập gần đây là d1, đây là tệp cũ nhất bằng cách chèn và bộ nhớ cache đầy trong khi thay thế dữ liệu, nó sẽ thay thế d1?

  2. Tôi đang sử dụng PHP để tương tác với memcached. Tôi có thể kiểm soát dữ liệu được thay thế bằng memcached không? Giống như tôi không muốn một số dữ liệu của tôi được thay thế cho đến khi hết hạn ngay cả khi bộ nhớ cache đã đầy. Không nên thay thế dữ liệu này thay vì dữ liệu khác có thể được xóa để chèn.

  3. Khi dữ liệu hết hạn, dữ liệu sẽ bị xóa ngay lập tức?

  4. Tác động của số lượng khóa được lưu trữ trên hiệu suất ghi nhớ là gì?

  5. Ý nghĩa của tùy chọn -k trong memcached.conf là gì? Tôi không thể hiểu được "khóa tất cả bộ nhớ phân trang" nghĩa là gì. Ngoài ra, mô tả trong README là không đủ.

+2

LRU là viết tắt của Ít nhất gần đây ... nếu wiki memcache nói rằng, sau đó tôi giả định rằng đó là trường hợp, trừ khi bạn có bằng chứng để đề nghị khác –

+1

Thành thật mà nói, có vẻ như bạn đang suy nghĩ quá nhiều hoặc giống như memcached không phải là những gì bạn muốn. memchached là một * bộ nhớ cache * với mục đích làm cho dữ liệu thường được sử dụng có sẵn một cách nhanh chóng mà có thể mất một thời gian để tải. Nó hoàn toàn không đảm bảo rằng dữ liệu này sẽ có sẵn mỗi lần, hoặc trong bao lâu, hoặc ở tất cả. Nó không phải là một kho dữ liệu chính. Tất cả nó là * có thể * tăng tốc độ truy xuất dữ liệu đôi khi, thời gian. Bạn không bao giờ có thể giả định rằng một số dữ liệu nhất định sẽ nằm trong bộ nhớ cache. Đó là bản chất của bộ nhớ đệm. – deceze

+0

http://en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used - bạn đã đọc nó chưa? –

Trả lời

16

Khi memcached cần để lưu trữ dữ liệu mới trong bộ nhớ, và nhớ là đã đầy đủ, những gì xảy ra là thế này:

  • tìm kiếm memcached cho aa * entry hết hạn phù hợp, và nếu ai tìm thấy, nó thay thế dữ liệu trong mục nhập đó. Những câu trả lời điểm 3) dữ liệu không được lấy ra ngay lập tức, nhưng khi dữ liệu mới sẽ được thiết lập, không gian được phân bổ lại
  • nếu không có mục nhập đã hết hạn được tìm thấy, một trong đó gần đây nhất được sử dụng được thay thế

* Hãy tâm trí memcached đề với bộ nhớ: nó phân bổ khối kích thước khác nhau, do đó, kích thước của dữ liệu bạn sẽ đặt trong vai trò bộ nhớ cache đóng trong việc quyết định mục nào bị xóa. Các mục nhập là 2K, 4K, 8K, 16K ... v.v. với kích thước tối đa là 1 triệu.

Tất cả thông tin này có thể được tìm thấy in the documentation, vì vậy chỉ cần đọc kỹ. Như @deceze nói, memcached không đảm bảo rằng dữ liệu sẽ có sẵn trong bộ nhớ và bạn phải chuẩn bị cho một cơn bão nhớ cache. Một cách tiếp cận thú vị để tránh bão lỡ là đặt thời gian hết hạn với một số bù trừ ngẫu nhiên, giả sử 10 + [0,10] phút, nghĩa là một số mục sẽ được lưu trữ trong 10 phút và khác trong 20 phút (mục tiêu là không phải tất cả các mục đều hết hạn cùng một lúc).

Và nếu bạn muốn giữ một cái gì đó trong bộ nhớ cache, bạn phải làm hai việc:

  • một kịch bản khởi động, mà yêu cầu bộ nhớ cache để tải dữ liệu.Vì vậy, nó luôn được sử dụng gần đây
  • 2 thời gian hết hạn cho mặt hàng: một thời gian hết hạn thực, giả sử sau 30 phút; một tệp khác - được lưu trong bộ nhớ cache cùng với mục - thời gian hết hạn hợp lý, giả sử trong 10 phút. Khi bạn lấy dữ liệu từ bộ nhớ cache, bạn kiểm tra thời gian hết hạn hợp lý và nếu nó hết hạn - hãy tải lại dữ liệu và đặt nó trong bộ nhớ cache thêm 30 phút nữa. Bằng cách này, bạn sẽ không bao giờ đạt được thời gian hết hạn bộ nhớ cache thực, và dữ liệu sẽ được làm mới định kỳ.

5) Ý nghĩa của tùy chọn -k trong "memcached.conf" là gì. Tôi không phải là có thể hiểu "Khóa tất cả bộ nhớ được phân trang" nghĩa là gì. Ngoài ra mô tả trong README cũng không đủ.

Bất kể bạn sẽ phân bổ bao nhiêu bộ nhớ cho memcached, nó sẽ chỉ sử dụng số tiền cần thiết, ví dụ: nó chỉ cấp phát bộ nhớ thực sự được sử dụng. Tuy nhiên, với tùy chọn -k, toàn bộ bộ nhớ được dành riêng khi memcached được bắt đầu, do đó, nó luôn phân bổ toàn bộ bộ nhớ, bất kể nó cần hay không

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