Memcache的组成部分
从设计的层面讲,Memcache的基本组成元素只有3个:
- 网络IO多路复用, 由libevent库来支持
- 内存存储,使用Slab的数据结构 和 LRU内存回收算法,管理内存。
- Hash算法索引数据,使用链表法来存储hash node/item和解决hash冲突。
Memcache 为什么这么设计?
可以拆解为下面的问题:
- 为什么网络IO多路复用模型?
- 为什么要用Hash算法?
- 为什么要使用Slab的内存管理方法?
为了解答上面的问题,首先要探讨Memcache业务场景的特点
Memcache 的使用场景都是被作为分布式缓存
- 请求量大,连接数多
- 单次请求数据小,作为缓存消耗的存储空间小
- 请求延时要求极小
正是以上特点:
- IO多路复用用于解决请求量大,连接数多的问题
- 内存存储数据,读写快,解决延时小的问题,并且满足分布式缓存的需求
- 使用hash索引数据,则提升数据查询速度,更能满足请求延迟小的要求。
这样设计的好处是,既能满足业务场景的需要,又能有很高的性能。
问题汇总
有没有比memcache更好的设计了?
网络模型可以解除libevent依赖,直接使用epoll。 代码质量可以进一步优化。
memcache 选择单线程还是多线程?
早期memcache使用单线程,后期换为多线程。
为什么高版本的memcache选择了多线程模型?
突破单核cpu计算瓶颈,增强并发能力。但我认为提升成本大,效果小,单线程更合理些。
这几个问题有答案了没?每天看你的博客还是能学到不少东西的。
这些问题现在已经得到了解答,我这就更新上去。