分享10道Memcached入门面试题!!!

1.Memcached是什么,有什么作用?

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

2.Memcached服务在企业集群架构中应用场景

1)如果网站包含了访问量很大的动态网页,因而数据库的负载将会很高。由于大部分数据库请求都是读操作,那么memcached可以显著地减小数据库负载。
2)如果数据库服务器的负载比较低但CPU使用率很高,这时可以缓存计算好的结果( computed objects )和渲染后的网页模板(enderred templates)。
3)利用memcached可以缓存 session数据 、临时数据以减少对他们的数据库进行写操作。
4)缓存一些很小但是被频繁访问的文件。
5)缓存Web ‘services’(非IBM宣扬的Web Services,译者注)或RSS feeds的结果。

3.Memcached服务在不同企业业务应用场景中的工作流程

1)当 web 程序需要访问后端数据库获取数据时会优先访问 Memcached 内存缓存,如果缓存中有数据就直接获取返回前端服务及用户,如果没有数据(没有命中),在由程序请求后端的数据库服务器,获取到对应的数据后,除了返回给前端服务及用户数据外,还会把数据放到 Memcached 内存中进行缓存,等待下次请求被访问,

2)Memcache 内存始终是数据库的挡箭牌,从而大大的减轻数据库的访问压力,提高整个网站架构的响应速度,提升了用户体验。

3)当程序更新,修改或删除数据库中已有的数据时,会同时发送请求通知Memcached 已经缓存的同一个 ID 内容的旧数据失效,从而保证 Memcache中数据和数据库中的数据一致。

4)如果在高并发场合,除了通知 Memcached 过程的缓存失效外,还会通过相关机制,使得在用户访问新数据前,通过程序预先把更新过的数据推送到memcache 中缓存起来,这样可以减少数据库的访问压力,提升 Memcached中缓存命中率。

5)数据库插件可以再写入更新数据库后,自动抛给 MC 缓存起来,自身不Cache.

4.Memcached服务分布式集群如何实现?

a、程序端实现

​ 程序加载所有 mc 的 ip 列表,通过对 key 做 hash (一致性哈希算法)

​ 例如:web1 (key)===>对应 A,B,C,D,E,F,G……若干台服务器。(通过哈希算法实现)

b、负载均衡器

​ 通过对 key 做 hash (一致性哈希算法)

​ 一致哈希算法的目的是不但保证每个对象只请求一个对应的服务器,而且当节点宕机,缓存服务器的更新重新分配比例降到最低。

5.Memcached服务特点及工作原理是什么?

a、完全基于内存缓存的

b、节点之间相互独立

c、C/S 模式架构,C 语言编写,总共 2000 行代码。

d、异步I/O 模型,使用 libevent 作为事件通知机制。

e、被缓存的数据以 key/value 键值对形式存在的。

f、全部数据存放于内存中,无持久性存储的设计,重启服务器,内存里的数据会

丢失。

g、当内存中缓存的数据容量达到启动时设定的内存值时,就自动使用 LRU 算法

删除过期的缓存数据。

h、可以对存储的数据设置过期时间,这样过期后的数据自动被清除,服务本身不

会监控过期,而是在访问的时候查看 key 的时间戳,判断是否过期。

j、memcache 会对设定的内存进行分块,再把块分组,然后再提供服务

6.简述Memcached内存管理机制原理?

1)早期的 Memcached 内存管理方式是通过 malloc 的分配的内存,使用完后通过free 来回收内存,这种方式容易产生内存碎片,并降低操作系统对内存的管理效率。加重操作系统内存管理器的负担,最坏的情况下,会导致操作系统比memcached 进程本身还慢,为了解决这个问题,Slab Allocation 内存分配机制就延生了。

2)现在 Memcached 利用 Slab Allocation 机制来分配和管理内存。

55SlabAllocation 机制原理是按照预先规定的大小,将分配给 memcached 的内存分割成特定长度的内存块(chunk),再把尺寸相同的内存块,分成组(chunks slab class),这些内存块不会释放,可以重复利用。而且,slab allocator 还有重复使用已分配的内存的目的。 也就是说,分配到的内存不会释放,而是重复利用SlabAllocation 的主要术语Page分配给 Slab 的内存空间,默认是 1MB。分配给 Slab 之后根据 slab 的大小切分成chunk。

7.Memcached的删除原理与删除机制?

​ Memcached在数据删除方面有效利用资源,数据不会真正从Memcached中消失;Memcached会优先使用已超时的记录的空间,但也会出现空间不足的情况,此时使用 Least Recently Used(LRU)机制来分配空间,即删除“最少使用”的记录的机制;

8.memcached是如何分配内存的

​ Memcached默认情况下采用了名为Slab Allocator的机制分配、管理内存。 在该机制出现以前,内存的分配是通过对所有记录简单地进行malloc和free来进行的。 但这种方式会导致内存碎片,加重操作系统内存管理器的负担,最坏的情况下会导致操作系统比memcached进程本身还慢。Slab Allocator就是为解决该问题而诞生的。

9.memcached能保证数据存储的原子性吗?

​ 可以保证,所有的命令都是原子性的;

10.memcached与redis的区别?

1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等;

2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储;

3、虚拟内存–Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘;

4、过期策略–memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10;

5、分布式–设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从;

6、存储数据安全–memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化);

7、灾难恢复–memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复;

8、Redis支持数据的备份,即master-slave模式的数据备份;

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值