Memcached Study
### Memcached 研究与应用 #### 一、Memcached 概述 Memcached 是一个高性能、分布式内存对象缓存系统,具有通用性特点,主要用于通过减轻数据库负载来加速动态 Web 应用程序的速度。它能够显著提高网站性能,减少数据库访问频率,从而降低服务器压力。 #### 二、背景及应用场景 **起源与应用:** - **LiveJournal**:Memcached 的诞生地。LiveJournal 使用 Memcached 管理 30GB 的缓存数据量,处理海量数据。 - **Mixi**:在日本社交网络 Mixi 上,Memcached 部署在专用服务器上,每台服务器配备 4GB 内存,支持高达 15,000 QPS 和 400MB/s 的吞吐量。 **知名使用者:** - **Facebook**、**Yahoo**、**Amazon** 等顶级互联网公司均广泛采用 Memcached。 #### 三、Memcached 工作原理 - **服务器端架构:** - **Slab Allocator**:根据对象大小自动选择合适的内存块。 - **基于 Libevent**:异步事件驱动模型,高效处理大量并发连接。 - **简单协议**:不使用 XML,减少解析开销。 - **内部哈希表**:用于快速定位缓存项。 - **无状态服务器**:各服务器间互不知晓对方的存在,便于扩展。 - **客户端操作:** - **键值哈希**:将键值映射到服务器列表中的某一台服务器。 - **对象序列化**:将对象转换为字节数组存储。 - **数据压缩**:减少网络传输量。 #### 四、常见问题与解决方案 - **数据持久化**:如何实现数据备份? - **冗余机制**:如何确保数据的高可用性? - **故障恢复**:发生故障时如何自动恢复服务? - **身份验证**:如何实现安全访问控制? #### 五、Memcached 服务器功能详解 - **基本命令集**: - `set`:设置缓存项。 - `get`:获取缓存项。 - `replace`:替换现有缓存项。 - `add`:添加缓存项(仅当该键不存在时)。 - `append`:向缓存项尾部追加数据。 - `prepend`:向缓存项头部插入数据。 - `increment/decrement`:对整数类型缓存项进行增减操作。 - `cas`:比较并交换操作,保证操作的原子性。 - `stats`:查看服务器状态信息。 - **平台支持**: - **FreeBSD** 和 **Linux** 支持最佳。 - **Windows** 版本存在。 - **Solaris** 1.2.5 版本起支持。 - **macOS** 支持良好。 #### 六、应用程序集成 - **MySQL 集成**: - 用户通常从数据库获取对象后将其存储到 Memcached 中。 - UDF (用户定义函数) 使用正在增长。 - **PostgreSQL 集成**: - 通过 `pgmemcache()` 实现类似 MySQL 的集成。 - **Web 服务器插件**: - **lighttpd/mod_memcache**:缓存文件,指定 MIME 类型,创建过期时间。 - **Apache/mod_memcached**:支持 CAS 操作,提供 GET/PUT/DELETE 功能。 - **NGINX**:支持可变超时时间,基于 Perl 的实现。 #### 七、实施限制 - **键长度**:每个键的最大长度为 250 字节。 - **数据大小**:每个值的最大长度低于 1MB。 - **内存限制**:32 位系统最大为 4GB,64 位系统则不受此限。 - **最大缓存大小**:通过配置 `maxbytes` 参数控制,但并不限制所有项的总大小。 - **LRU 算法**:最久未使用的项目可能会被移除,每个“slab class”都有一个 LRU 列表。 Memcached 是一个强大的工具,可以显著提高网站性能和用户体验。了解其工作原理和限制对于有效利用该技术至关重要。此外,通过与其他系统的集成,Memcached 可以进一步增强其功能性和灵活性。
剩余71页未读,继续阅读
- 粉丝: 2
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助