memcached 能接受的 key 的最大长度是多少?
key 的最大长度是 250 个字符。需要注意的是,250 是 memcached 服务器端内部的限制,
如果您使用的客户端支持”key 的前缀”或类似特性,那么 key(前缀+原始 key)的最大长度
是可以超过 250 个字符的。我们推荐使用使用较短的 key,因为可以节省内存和带宽。
memcached 对 item 的过期时间有什么限制?
过期时间最大可以达到 30 天。memcached 把传入的过期时间(时间段)解释成时间点
后,一旦到了这个时间点,memcached 就把 item 置为失效状态。这是一个简单但 obscure
的机制。
memcached 最大能存储多大的单个 item?
1MB。如果你的数据大于 1MB,可以考虑在客户端压缩或拆分到多个 key 中。
为什么单个 item 的大小被限制在 1M byte 之内?
简单的回答:因为内存分配器的算法就是这样的。
详细的回答:Memcached 的内存存储引擎(引擎将来可插拔…),使用 slabs 来管理内存。
内存被分成大小不等的 slabs chunks(先分成大小相等的 slabs,然后每个 slab 被分成大小
相等 chunks,不同 slab 的 chunk 大小是不相等的)。chunk 的大小依次从一个最小数开始,
按某个因子增长,直到达到最大的可能值。
如果最小值为 400B,最大值是 1MB,因子是 1.20,各个 slab 的 chunk 的大小依次是:
slab1 – 400B slab2 – 480B slab3 – 576B …
slab 中 chunk 越大,它和前面的 slab 之间的间隙就越大。因此,最大值越大,内存利用率
越低。Memcached 必须为每个 slab 预先分配内存,因此如果设置了较小的因子和较大的最
大值,会需要更多的内存。
还有其他原因使得您不要这样向 memcached 中存取很大的数据…不要尝试把巨大的网页放
到 mencached 中。把这样大的数据结构 load 和 unpack 到内存中需要花费很长的时间,从
而导致您的网站性能反而不好。
如果您确实需要存储大于 1MB 的数据,你可以修改 slabs.c:POWER_BLOCK 的值,然后重新
编译 memcached;或者使用低效的 malloc/free。其他的建议包括数据库、MogileFS 等。
我可以在不同的 memcached 节点上使用大小不等的缓存空间吗?这么做之后,memcached
能够更有效地使用内存吗?
Memcache 客户端仅根据哈希算法来决定将某个 key 存储在哪个节点上,而不考虑节点的
内存大小。因此,您可以在不同的节点上使用大小不等的缓存。但是一般都是这样做的:
拥有较多内存的节点上可以运行多个 memcached 实例,每个实例使用的内存跟其他节点上
的实例相同。
想要了解更多Java基础知识,可以点击评论区链接和小编一起学习java吧,此视频教程为初学者而著,零基础入门篇!给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibili