如果要学习,建议看下面这个,因为官网好像不是很详细(非常推荐)
https://www.runoob.com/memcached/memcached-tutorial.html
1. Memcached 工作原理
1.1 Memcached 数据处理流程
Libevent库
- 网络IO多路复用
IO多路复用:
单一操作单元中集成多个网络I/O事件的监听处理,即一次可以聚合多个网络I/O事件的感知IO多路复用是指事件变化的集合通知机制,而非处理机制!
相关实现有:
1.event port
2.Kqueue
3.Select, poll, epollLibevent如何选择哪种实现?
cmake检查当前系统库是否包含了相关系统调用?如果有则设置相应的宏
例如:
1.Solaris系统的 event port的宏:EVENT__HAVE_EVENT_PORTS
2.Apple系统的 kqueue的宏:EVENT__HAVE_WORKING_KQUEUE
3.一般linux系统的epoll的宏:EVENT__HAVE_EPOLL
-
Memcached 网络处理
多线程模式
- 处理框架
- 请求状态机
-
请求状态机 - 完整状态
1.2 Memcached内存管理
- Slab 机制
1.3 Memcached的持久化
-
ExtStore
官方介绍: https://github.com/memcached/memcached/wiki/Extstore- extstore是把key放在内存,把value放入到flash等介质中的一种持久化方式,主要是为了解决内存存储容量的瓶颈
- 使用场景是:value很大,存储时间很长。成本太高的情况下; 不适用普通硬盘。
- Version 1.5.4+支持
-
ExtStore 写入
- ExtStore读取
2. Memcached vs Redis
2.1 性能相关
单线程 vs 多线程
2.2 可靠性
高可靠模式: 主从、集群
2.3 数据持久化
RDB and AOF vs ExtStore
2.4 存储语义
2.5 数据规模
纯内存 vs ExtStore
网友评论