动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

常考Memcached面试题总结(附答案)

08-07 16:31 198浏览
举报 T字号
  • 大字
  • 中字
  • 小字

Memcached作为一款开源、高性能、分布式内存对象缓存系统,在各种需要缓存的场景都适用。因此,各大公司都需要程序员掌握使用Memcached,那么在面试中面试官会怎么考察应聘者对Memcached的掌握程度呢,今天来盘点一下常考Memcached面试题,希望可以帮助到有面试需求的小伙伴们。

1、Memcached是什么有什么作用?

答:Memcached是一个开源的,高性能的内存绶存软件,从名称上看 Mem 就是内存的意思,而Cache就是缓存的意思。Memcached的作用:通过在事先规划好的内存空间中临时绶存数据库中的各类数据,以达到减少业务对数据库的直接高并发访问,从而达到提升数据库的访问性能,加速网站集群动态应用服务的能力。

2、Memcached服务分布式集群如何实现?

答:Memcached集群和web服务集群是不一样的,所有Memcached的数据总和才是数据库的数据。每台Memcached都是部分数据。一台memcached的数据,就是一部分mysql数据库的数据

1程序端实现程序加载所有mc的ip列表,通过对key做hash (一致性哈希算法)例如:web1 (key)===>对应 A,B,C,D,E,F,G…..若干台服务器。

2负载均衡器通过对key做hash(一致性哈希算法)一致哈希算法的目的是不但保证每个对象只请求一个对应的服务器,而且当节点宕机,缓存服务器的更新重新分配比例降到最低。

3、Memcached 服务特点及工作原理是什么?

答:服务特点有:完全基于内存缓存的节点之间相互独立C/S 模式架构,C 语言编写,总共2000行代码异步I/O 模型,使用libevent作为事件通知机制被缓存的数据以 key/value键值对形式存在的全部数据存放于内存中,无持久性存储的设计,重启服务器,内存里的数据会丢失当内存中缓存的数据容量达到启动时设定的内存值时,就自动使用LRU算法删除过期的缓存数据可以对存储的数据设置过期时间,这样过期后的数据自动被清除,服务本身不会监控过期,而是在访问的时候查看key的时间戳,判断是否过期memcache会对设定的内存进行分块,再把块分组,然后再提供服务

4、、memcached 是怎么工作的?

答:Memcached的神奇来自两阶段哈希。Memcached就像一个巨大的、存储了很多对的哈希表。通过key,可以存储或查询任意的数据。

客户端可以把数据存储在多台memcached上。当查询数据时,客户端首先参考节点列表计算出key的哈希值(阶段一哈希),进而选中一个节点;客户端将请求发送给选中的节点,然后memcached节点通过一个内部的哈希算法(阶段二哈希),查找真正的数据。

5、memcached最大的优势是什么?

答:Memcached最大的好处就是它带来了极佳的水平可扩展性,特别是在一个巨大的系统中。由于客户端自己做了一次哈希,那么我们很容易增加大量 memcached到集群中。memcached之间没有相互通信,因此不会增加 memcached的负载;没有多播协议,不会网络通信量爆炸,memcached的集群很好用。基于memcached的基本原则,可以相当轻松地构建出不同类型的缓存架构。

6、memcached和服务器的 local cache相比,有什么优缺点?

答:首先local cache能够利用的内存容量受到(单台)服务器空闲内存空间的限制。local cache有一点比memcached和query cache都要好, 就是它不但可以存储任意的数据,而且没有网络存取的延迟。

 local cache的数据查询更快。考虑把highly common的数据放在 localcache中。

 local cache缺少集体失效的特性。在memcached集群中,删除或更新一个key会让所有的观察者觉察到。但是在local cache中, 我们只能通知所有的服务器刷新cache(很慢,不具扩展性),或者仅仅依赖缓存超时失效机制。

 local cache 面临着严重的内存限制。

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

答:不实现冗余机制,Memcached 应该是应用的缓存层。它的设计本身就不带有任何冗余机制。 如果一个memcached 节点失去了所有数据,应该可以从数据源(比如数据库)再次获取到数据。

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

答:线程就是定律,多线程模式允许memcached 能够充分利用多个CPU,并在CPU之间共享所有的缓存数据。memcached 使用一种简单的锁机制来保证数据更新操作的互斥。相比在同一个物理机器上运行多个memcached 实例,这种方式能够更有效地处理 multi gets。

简单地总结一下:命令解析可以运行在多线程模式下。memcached内部对数据的操作是基于很多全局锁的(因此这部分工作不是多线程的)。未来对多线程模式的改进,将移除大量的全局锁,提高memcached在负载极高的场景下的性能。

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

答:key的最大长度是250个字符,需要注意的是,250是memcached 服务器端内部的限制,如果使用的客户端支持”key 的前缀”或类似特性,那么 key(前缀+原始key)的最大长度是可以超过250个字符的,推荐使用使用较短的 key,因为可以节省内存和带宽。

10、memcached对item的过期时间有什么限制?

答:过期时间最大可以达到30天。memcached 把传入的过期时间(时间段)解释成时间点后,一旦到了这个时间点,memcached 就把item 置为失效状态。

以上的10道Memcached面试题,都是在各大互联网公司的java程序出现,可以说是常考Memcached面试题。各位java程序员不论是在准备面试还是在学习的过程阶段中,都可以以这篇整理的Memcached面试题参考答案作为学习资料,来学习Memcached的相关知识,提高自己的java水平。

0人推荐
共同学习,写下你的评论
0条评论
吃瓜的编程小哥
程序员吃瓜的编程小哥

6篇文章贡献22673字

作者相关文章更多>

推荐相关文章更多>

Java数据结构

HelloWorld10-31 08:24

浅谈MySQL中SQL优化的常用方法

军哥08-12 23:29

五分钟读懂UML类图

江湖人称小李白12-10 10:41

MyBatis开发框架的四大核心

IT逐梦者08-17 21:43

一次搞定continue,break和return

HelloWorld11-06 11:19

发评论

举报

0/150

取消