Memcached 1.6 介绍与选型指南
Memcached 1.6 介绍与选型指南:基于官方资料梳理版本基准、线程与内存分配架构、协议体系、功能特性、快速上手示例、适用场景限制,并与 Redis、KeyDB、Dragonfly 量化对比给出选型建议。
Memcached 1.6 介绍与选型指南
本文为 Memcached 的认知篇(A1),基于官方公开资料编写,只做介绍与选型分析,不包含本地安装与实测内容。
一、信息基准
1.1 基本信息
| 项目 | 内容 |
|---|---|
| 软件名称 | memcached |
| 本次介绍版本 | v1.6.45(1.6 系列当前稳定版) |
| 查询日期 | 2026-10-19 |
| 开发主体 | 开源社区(源起 Danga Interactive,现由 memcached 维护者团队维护) |
| 开源许可 | BSD 3-Clause(仓库 COPYING 文件) |
| 编写语言 | C(基于 libevent) |
| 官方网站 | https://memcached.org/ |
| 源码仓库 | https://github.com/memcached/memcached |
| 文档站点 | 官方 Wiki https://github.com/memcached/memcached/wiki |
1.2 版本依据
| 依据项 | 实查结果 | 来源 |
|---|---|---|
| 当前稳定版 | v1.6.45,官网标注为 current release,发行包时间 2026-07-10 | memcached.org 首页与发行包响应头 |
| 版本线 | 1.6 长线持续小版本迭代 | memcached.org 官网 |
1.3 官方来源清单
| 来源 | 链接 | 用途 |
|---|---|---|
| memcached 官网 | https://memcached.org/ | 当前版本与发行包 |
| 官方 Wiki | https://github.com/memcached/memcached/wiki | 协议、配置、开发文档 |
| GitHub 仓库 | https://github.com/memcached/memcached | 源码与 COPYING |
| 发行包目录 | https://www.memcached.org/files/ | 历史版本压缩包 |
二、软件概述
Memcached 1.6.45 是本次介绍的版本号(memcached.org 于 2026-10-19 实查的当前稳定版)。Memcached 是一个高性能的分布式内存对象缓存系统,最初由 Danga Interactive 为 LiveJournal 开发,是键值缓存领域的奠基性软件:将热点数据以「键-字节块」形式存放在内存中,供应用层快速读取,从而为后端数据库分担读压力。
其设计哲学是极简:数据只有字符串字节块、服务器之间互不通信(分片由客户端完成)、不提供持久化与复杂结构。正因简单,它长期保持极低单次操作开销与稳定的多线程并发性能,是 LAMP 生态会话缓存、数据库查询缓存的事实标准之一。
三、核心架构
3.1 进程与线程模型
Memcached 为单进程多线程模型:主线程负责监听连接,工作线程(默认按 CPU 核数配置)处理读写,配合 libevent 事件驱动实现高并发。实例之间完全对等、互不感知,客户端按一致性哈希等算法决定读写哪个实例,实现水平分片。
3.2 内存管理:Slab 分配器与 LRU
- Slab allocator:内存按不同块大小(slab class)预分配切分,避免频繁 malloc/free 与内存碎片。
- 过期与淘汰:采用惰性过期(读取时校验)与循环遍历淘汰,1.6 默认启用分段 LRU(TEMP/ HOT/ WARM 分段),热点数据驻留更久。
- 容量参数:-m 指定缓存内存上限,-I 调整单条目大小上限(默认 1 MB),键名上限 250 字节(官方协议文档)。
3.3 协议体系
| 协议 | 说明 |
|---|---|
| 文本协议 | telnet 可直连的 ASCII 协议,get/set/stats 等命令 |
| 二进制协议 | 1.4 引入的二进制帧协议(官方 Wiki:BinaryProtocol) |
| Meta 协议 | 1.6 推广的 meta commands(mg/ms/md/ma 等),统一替换旧命令族,支持灵活选项 |
3.4 安全能力
Memcached 定位纯内网缓存,安全能力包括:SASL 认证(官方 Wiki:SASLHowTo)、TLS 加密连接(官方 Wiki:TLS),以及通过 -o 参数关闭 UDP、绑定内网地址等部署加固手段。
四、功能特性
- 基本 KV 操作:set/add/replace/append/prepend/delete/get/getAndTouch(gat),以及 touch 重置过期时间。
- 原子计数与 CAS:incr/decr 原子计数;gets 返回版本号 cas token,配合 cas 命令实现乐观锁。
- 分布式分片:服务器无状态对等,依赖客户端一致性哈希(libmemcached、spymemcached、memcached PHP 客户端等均内置)。
- 统计与可观测:stats/stats settings/stats items 等命令输出命中率、内存占用、逐出计数等指标。
- 会话缓存生态:PHP memcached 扩展会话处理器、Tomcat/Jetty 会话管理器、Spring Cache 等框架原生支持。
- 流式大批量读取:meta 协议与二进制协议支持批量 get(multi-get),摊薄网络往返开销。
- 轻量易运维:无持久化文件、无副本拓扑,重启即空缓存,运维心智负担极低。
五、快速上手
以下示例引自 memcached 官网首页与官方 Wiki《FirstExample》(来源:https://github.com/memcached/memcached/wiki/FirstExample ),不涉及本地实测输出。
5.1 启动服务
# 常见启动参数示例(-m 缓存内存 MB、-p 端口、-u 运行用户,引自官方 Wiki 与发行包说明)
memcached -m 64 -p 11211 -u memcache
5.2 文本协议基本操作
# 官方 Wiki FirstExample:通过 telnet 直连文本协议
telnet localhost 11211
set greeting 0 900 5
hello
get greeting
stats
quit
5.3 常用客户端
# PHP 会话缓存(官方 PHP 扩展 memcached 会话处理器配置思路,见各语言客户端文档)
# Java/Python/Go 等可选用官方 Wiki Clients 页面列出的客户端库
六、适用场景与限制
6.1 适用场景
- 数据库查询结果缓存、页面片段缓存、API 响应缓存,为关系数据库削减读压力。
- Web 集群会话共享(PHP/Java 会话处理器成熟)。
- 高并发纯键值读写、对延迟敏感且数据结构简单的热点数据。
- 可接受重启后缓存冷启动(无持久化)的纯缓存场景。
6.2 限制与注意
- 仅支持字节块值,无哈希、列表、集合等结构,复杂操作需在客户端实现。
- 无持久化与主从复制,不适合作为数据存储;缓存雪崩需业务侧兜底。
- 集群扩容/缩容改变哈希分布,需客户端一致性哈希或业务侧重新预热。
- 单条目默认 1 MB 上限、键名 250 字节上限(协议规定),超大对象需分片存储。
- 公网直连曾引发多起 UDP 反射攻击事件,务必绑定内网并按官方 Wiki 加固。
七、同类选型对比
7.1 候选与版本基准
| 软件 | 本次实查版本 | 定位 |
|---|---|---|
| Memcached | 1.6.45(2026-07-10) | 分布式内存 KV 缓存 |
| Redis | 8.10.2(2026-09-17) | 多数据结构内存数据库 |
| KeyDB | 6.3.4(2023-10-30) | 多线程 Redis 分支 |
| Dragonfly | 2.0.2(2026-10-07) | 新一代多线程内存数据存储 |
7.2 量化对比
| 维度 | Memcached 1.6.45 | Redis 8.10 | KeyDB 6.3.4 | Dragonfly 2.0.2 |
|---|---|---|---|---|
| 开源许可 | BSD 3-Clause(仓库 COPYING 实查) | RSALv2 / SSPLv1 / AGPLv3 三重许可(Redis 8 起,仓库 LICENSE.txt 实查) | BSD 3-Clause(仓库 COPYING 实查) | BUSL 1.1(仓库 LICENSE.md 实查) |
| GitHub stars(2026-10-19) | 14,297 | 76,942 | 12,501 | 31,796 |
| 最近发版 | 1.6.45(2026-07-10,官网发行包) | 8.10.2(2026-09-17) | 6.3.4(2023-10-30) | 2.0.2(2026-10-07) |
| 版本节奏 | 1.6 长线小版本,约数月一版 | 主版本年度级、补丁高频,多线并行 | 长期未发布新版本(最近一版 2023-10-30) | 高频迭代,主版本推进快 |
| 兼容矩阵 | 自有文本/二进制/meta 协议,客户端按哈希分片 | RESP 协议生态事实标准,数据结构最全 | 与 Redis 6.x 协议兼容(RESP2) | 官方定位兼容 Redis 协议,并提供 Memcached 兼容端口 |
7.3 选型建议
一句话建议:纯缓存、结构简单、追求极简稳定与宽松 BSD 许可选 Memcached;需要丰富数据结构、持久化、复制与订阅能力,接受其三重许可条款选 Redis;明确的多线程 Redis 兼容需求需注意 KeyDB 更新已长期停滞、不建议新项目采用;希望以现代多线程架构兼容 Redis 协议并接受 BUSL 许可的可评估 Dragonfly。
八、参考链接
- memcached 官网(当前版本):https://memcached.org/
- 官方 Wiki 首页:https://github.com/memcached/memcached/wiki
- 官方示例 FirstExample:https://github.com/memcached/memcached/wiki/FirstExample
- 协议文档:https://github.com/memcached/memcached/wiki/Protocols
- 性能与配置:https://github.com/memcached/memcached/wiki/ConfiguringServer
- 本文对比对象官方站点:Redis https://redis.io/ 、KeyDB https://docs.keydb.info/ 、Dragonfly https://www.dragonflydb.io/