Memcached 預設 單筆資料儲存最大容量為 1M

Memcached 是業界非常常用到的 cache system, 儲存格式是 key-value.

官方網站: Memcached: Free & open source, high-performance, distributed memory object caching system.

註:查看設定可用:$ echo "stats settings" | nc localhost 11211 # 看目前在跑得設定值

但是 Memcached 要知道的兩點:

  1. Ram 要夠大, 因為 Memcached 的資料都塞在 Ram 裡面, Ram 不夠大, 新的資料就寫不進去.
  2. Memcached 預設 單筆 資料儲存最大容量是 1M byte, 詳見 FAQ. (下述轉載此問題的問答)

    Q: What is the maximum data size you can store? (1 megabyte)

    • The maximum size of a value you can store in memcached is 1 megabyte. If your data is larger, consider clientside compression or splitting the value up into multiple keys.

為何是 1M, 是否可以增加, FAQ 也有答案:

  • Memcached 最小值是 400 bytes, 最大值是 1M byte.
  • 如果要超過 1M 也可以, 只是需要重新 compile memcached, 並且去修改 POWER_BLOCK 的值 或 使用 inefficient malloc/free 當 backend.

下述轉載此問題的問答:

Q: Why are items limited to 1 megabyte in size?

  • Ahh, this is a popular question!
  • Short answer: Because of how the memory allocator's algorithm works.
  • Long answer: Memcached's memory storage engine (which will be pluggable/adjusted in the future...), uses a slabs approach to memory management. Memory is broken up into slabs chunks of varying sizes, starting at a minimum number and ascending by a factorial up to the largest possible value.
  • Say the minimum value is 400 bytes, and the maximum value is 1 megabyte, and the factorial is 1.20:
  • slab 1 - 400 bytes slab 2 - 480 bytes slab 3 - 576 bytes ... etc.
  • The larger the slab, the more of a gap there is between it and the previous slab. So the larger the maximum value the less efficient the memory storage is. Memcached also has to pre-allocate some memory for every slab that exists, so setting a smaller factorial with a larger max value will require even more overhead.
  • There're other reason why you wouldn't want to do that... If we're talking about a web page and you're attempting to store/load values that large, you're probably doing something wrong. At that size it'll take a noticeable amount of time to load and unpack the data structure into memory, and your site will likely not perform very well.
  • If you really do want to store items larger than 1MB, you can recompile memcached with an edited slabs.c:POWER_BLOCK value, or use the inefficient malloc/free backend. Other suggestions include a database, MogileFS, etc.

註:2015/8 更新:Memcached 可以用 -I 5m 調整最大值。-I 5m 就是設定最大可以塞 5M 的資料。

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料