Memcached 面试题

目录

一、Memcached 是什么,有什么作用?

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

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

四、简述 Memcached 内存管理机制原理?

五、memcached 是怎么工作的?

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

七、memcached 和 MySQL 的 query

八、memcached 和服务器的 local cache(比如 PHP 的 APC、

mmap 文件等)相比,有什么优缺点?

九、memcached 的 cache 机制是怎样的?

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

十一、memcached 如何处理容错的?

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

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

数据呢?

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

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

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

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

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

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

二十、memcached 的内存分配器是如何工作的?为什么不适用

malloc/free!?为何要使用 slabs?

二十一、memcached 是原子的吗?

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

二十三、memcached 与 redis 的区别?


一、Memcached 是什么,有什么作用?

Memcached 是一个开源的,高性能的内存绶存软件,从名称上看 Mem 就是内存
的意思,而 Cache 就是缓存的意思。Memcached 的作用:通过在事先规划好的
内存空间中临时绶存数据库中的各类数据,以达到减少业务对数据库的直接高并
发访问,从而达到提升数据库的访问性能,加速网站集群动态应用服务的能力。
memcached 服务在企业集群架构中有哪些应用场景?
一、作为数据库的前端缓存应用
a、完整缓存(易),静态缓存
例如:商品分类(京东),以及商品信息,可事先放在内存里,然后再对外提供
数据访问,这种先放到内存,我们称之为预热,(先把数据存缓存中),用户访
问时可以只读取 memcached 缓存,不读取数据库了。
b、执点缓存(难)
需要前端 web 程序配合,只缓存热点的数据,即缓存经常被访问的数据。
先预热数据库里的基础数据,然后在动态更新,选读取缓存,如果缓存里没有对
应的数据,程序再去读取数据库,然后程序把读取的新数据放入缓存存储。
特殊说明 :
1.如果碰到电商秒杀等高并发的业务,一定要事先预热,或者其它思想实现,
例如:称杀只是获取资格,而不是瞬间秒杀到手商品。那么什么是获取资格?
2.就是在数据库中,把 0 标成 1.就有资格啦。再慢慢的去领取商品订单。
因为秒杀过程太长会占用服务器资源。
3.如果数据更新,同时触发缓存更新,防止给用户过期数据。
4.对于持久化缓存存储系统,例如:redis,可以替代一部分数据库的存储,
一些简单的数据业务,投票,统计,好友关注,商品分类等。nosql= not only
sql
二、作业集群的 session 会话共享存储。
1. Memcached 服务在不同企业业务应用场景中的工作流程
2.当 web 程序需要访问后端数据库获取数据时会优先访问 Memcached 内
存缓存,如果缓存中有数据就直接获取返回前端服务及用户,如果没有数据(没
有命中),在由程序请求后端的数据库服务器,获取到对应的数据后,除了返回
给前端服务及用户数据外,还会把数据放到 Memcached 内存中进行缓存,等
待下次请求被访问,Memcache 内存始终是数据库的挡箭牌,从而大大的减轻
数据库的访问压力,提高整个网站架构的响应速度,提升了用户体验。
3.当程序更新,修改或删除数据库中已有的数据时,会同时发送请求通知
Memcached 已经缓存的同一个 ID 内容的旧数据失效,从而保证 Memcache
中数据和数据库中的数据一致。
4.如果在高并发场合,除了通知 Memcached 过程的缓存失效外,还会通
过相关机制,使得在用户访问新数据前,通过程序预先把更新过的数据推送到
memcache 中缓存起来,这样可以减少数据库的访问压力,提升 Memcached
中缓存命中率。
5.数据库插件可以再写入更新数据库后,自动抛给 MC 缓存起来,自身不
Cache

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

特殊说明:Memcached 集群和 web 服务集群是不一样的,所有 Memcached 的
数据总和才是数据库的数据。每台 Memcached 都是部分数据。
(一台 memcached 的数据,就是一部分 mysql 数据库的数据)
a、程序端实现
程序加载所有 mc 的 ip 列表,通过对 key 做 hash (一致性哈希算法)
例如:web1 (key)===>对应 A,B,C,D,E,F,G…..若干台服务器。(通过哈希算法实
现)
b、负载均衡器
通过对 key 做 hash (一致性哈希算法)
一致哈希算法的目的是不但保证每个对象只请求一个对应的服务器,而且当节点
宕机,缓存服务器的更新重新分配比例降到最低。

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

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

四、简述 Memcached 内存管理机制原理?

早期的 Memcached 内存管理方式是通过 malloc 的分配的内存,使用完后通过
free 来回收内存,这种方式容易产生内存碎片,并降低操作系统对内存的管理效
率。加重操作系统内存管理器的负担,最坏的情况下,会导致操作系统比
memcached 进程本身还慢,为了解决这个问题,Slab Allocation 内存分配机制
就延生了。
现在 Memcached 利用 Slab Allocation 机制来分配和管理内存
Slab
Allocation 机制原理是按照预先规定的大小,将分配给 memcached 的内存分割
成特定长度的内存块(chunk),再把尺寸相同的内存块,分成组
(chunks slab class),这些内存块不会释放,可以重复利用。
而且,slab allocator 还有重复使用已分配的内存的目的。 也就是说,分配到的
内存不会释放,而是重复利用
Slab Allocation 的主要术语
Page
分配给 Slab 的内存空间,默认是 1MB。分配给 Slab 之后根据 slab 的大小切分成
chunk。
Chunk
用于缓存记录的内存空间。
SlabClass
特定大小的 chunk 的组。

五、memcached 是怎么工作的?

Memcached 的神奇来自两阶段哈希(two-stage hash)。Memcached 就像一
  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

u010142437

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

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

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

打赏作者

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

抵扣说明:

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

余额充值