memcached面试专题及答案【三】

86 阅读3分钟

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