持续输出面试题之分布式数据库--Memacache

开篇介绍

大家好,我是Java最全面试题库的提裤姐,今天这篇是分布式技术的第三篇,主要介绍分布式Memcache;在后续,会沿着第一篇开篇的知识线路一直总结下去,做到日更!如果我能做到百日百更,希望你也可以跟着百日百刷,一百天养成一个好习惯。

memcached的 cache机制是怎样的?

Memcached主要的 cache机制是LRU最近最少用算法+超时失效
当存数据到 memcached中,可以指定该数据在缓存中可以呆多久 ;如果 memcached的内存不够用了,过期的 slabs会优先被替换,接着就轮到老的未被使用的 slabs。

memcached如何实现冗余机制?

不实现。 Memcached应该是应用的缓存层。

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

memcached是如何做身份验证的?

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

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

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

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

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

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

1MB。如果数据大于1MB,可以考虑在客户端压缩或拆分到多个key中。

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

线程就是定律;memcached1.2及更高版本拥有了多线程模式。多线程模式允许 memcached能够充分利用多个CPU,并在CPU之间共享所有的缓存数据。 memcached使用一种简单的锁机制来保证数据更新操作的互斥。相比在同一个物理机器上运行多个 memcached实例,这种方式能够更有效地处理 multi gets。
如果系统负载并不重,也许不需要启用多线程工作模式。如果您在运行一个拥有大规模硬件的、庞大的网站,将会看到多线程的好处。

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