Memcached 是業界非常常用到的 cache system, 儲存格式是 key-value.
官方網站: Memcached: Free & open source, high-performance, distributed memory object caching system.
註：查看設定可用：$ echo "stats settings" | nc localhost 11211 # 看目前在跑得設定值
但是 Memcached 要知道的兩點:
- Ram 要夠大, 因為 Memcached 的資料都塞在 Ram 裡面, Ram 不夠大, 新的資料就寫不進去.
- 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 的資料。