互联网Java工程师面试题·Memcached 篇·第二弹

目录

10、memcached 如何实现冗余机制?

11、memcached 如何处理容错的?

12、如何将 memcached 中 item 批量导入导出?

13、如果缓存数据在导出导入之间过期了,您又怎么处理这些数据呢?

14、memcached 是如何做身份验证的?

15、memcached 的多线程是什么?如何使用它们?

16、memcached 能接受的 key 的最大长度是多少?

17、memcached 最大能存储多大的单个 item?

18、memcached 能够更有效地使用内存吗?

19、什么是二进制协议,我该关注吗?

20、memcached 的内存分配器是如何工作的?为什么不适用malloc/free!?为何要使用 slabs?

21、memcached 是原子的吗?

22、如何实现集群中的 session 共享存储?

23、memcached 与 redis 的区别?


10memcached 如何实现冗余机制?

        不实现!我们对这个问题感到很惊讶。 Memcached 应该是应用的缓存层。它的设计本身就不带有任何冗余机制。如果一个 memcached 节点失去了所有数据,您应该可以从数据源(比如数据库)再次获取到数据。您应该特别注意,您的应用应该可以容忍节点的失效。不要写一些糟糕的查询代码,寄希望于 memcached来保证一切!如果您担心节点失效会大大加重数据库的负担,那么您可以采取一些办法。比如您可以增加更多的节点(来减少丢失一个节点的影响),热备节点(在其他节点 down 了的时候接管 IP ),等等。

11memcached 如何处理容错的?

        不处理! 在 memcached 节点失效的情况下,集群没有必要做任何容错处理。如果发生了节点失效,应对的措施完全取决于用户。节点失效时,下面列出几种方案供您选择:
       
        忽略它! 在失效节点被恢复或替换之前,还有很多其他节点可以应对节点失效带来的影响。
       
        把失效的节点从节点列表中移除。做这个操作千万要小心!在默认情况下(余数式哈希算法),客户端添加或移除节点,会导致所有的缓存数据不可用!因为哈希参照的节点列表变化了,大部分 key 会因为哈希值的改变而被映射到(与原来)不同的节点上。
        启动热备节点,接管失效节点所占用的 IP 。这样可以防止哈希紊乱(hashing chaos )。
        如果希望添加和移除节点,而不影响原先的哈希结果,可以使用一致性哈希算法(consistent hashing )。您可以百度一下一致性哈希算法。支持一致性哈希的客户端已经很成熟,而且被广泛使用。去尝试一下吧!
        两次哈希( reshing )。当客户端存取数据时,如果发现一个节点 down了,就再做一次哈希(哈希算法与前一次不同),重新选择另一个节点(需要注意的时,客户端并没有把 down 的节点从节点列表中移除,下次还是有可能先哈希到它)。如果某个节点时好时坏,两次哈希的方法就有风险了,好的节点和坏的节点上都可能存在脏数据(stale data )。

12、如何将 memcached item 批量导入导出?

         您不应该这样做! Memcached 是一个非阻塞的服务器。任何可能导致memcached 暂停或瞬时拒绝服务的操作都应该值得深思熟虑。向 memcached中批量导入数据往往不是您真正想要的!想象看,如果缓存数据在导出导入之间发生了变化,您就需要处理脏数据了;

13、如果缓存数据在导出导入之间过期了,您又怎么处理这些数据呢?

        因此,批量导出导入数据并不像您想象中的那么有用。不过在一个场景倒是很有用。如果您有大量的从不变化的数据,并且希望缓存很快热(warm )起来,批量导入缓存数据是很有帮助的。虽然这个场景并不典型,但却经常发生,因此我们会考虑在将来实现批量导出导入的功能。
        如果一个 memcached 节点 down 了让您很痛苦,那么您还会陷入其他很多麻烦。您的系统太脆弱了。您需要做一些优化工作。比如处理” 惊群 问题(比如memcached 节点都失效了,反复的查询让您的数据库不堪重负 这个问题在 FAQ的其他提到过),或者优化不好的查询。记住,Memcached 并不是您逃避优化查询的借口。

14memcached 是如何做身份验证的?

        没有身份认证机制! memcached 是运行在应用下层的软件(身份验证应该是应用上层 的职 责)。memcached 的客户端和服务器端之所以是轻量级的,部分原因就是完全没有实现身份验证机制。这样,memcached 可以很快地创建新连接,服务器端也无需任何配置。如果您希望限制访问,您可以使用防火墙,或者让 memcached 监听 unix domain socket。

15memcached 的多线程是什么?如何使用它们?

        线程就是定律( threads rule )!在 Steven Grimm Facebook 的努力下,memcached 1.2 及更高版本拥有了多线程模式。多线程模式允许 memcached 能够充分利用多个 CPU
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时光の尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值