一、介绍
Memcached 是一款自由开源的高性能分布式内存对象缓存系统。它基于内存的 Key-Value 存储模型,适合存放字符串或序列化后的对象。
引入它的核心目的很明确:通过缓存数据库查询结果,减少直接访问数据库的次数,从而提升动态 Web 应用的速度和可扩展性。
二、存储操作
写入数据是基础,但不同场景下需要选择不同的命令,否则可能引发意外覆盖或失败。
Set 最通用的写入命令。如果 Key 已存在,会更新旧值;不存在则新建。
set key flags exptime bytes [noreply] value
成功返回 STORED,失败返回 ERROR。
Add 仅当 Key 不存在时才写入。如果 Key 已存在(包括未过期),操作会被拒绝,原值保持不变。
add key flags exptime bytes [noreply] value
成功返回 STORED,冲突时返回 NOT_STORED。
Replace 与 Add 相反,仅当 Key 已存在时才执行替换。若 Key 不存在,操作失败。
replace key flags exptime bytes [noreply] value
成功返回 STORED,Key 不存在时返回 NOT_STORED。
Append / Prepend 用于在现有值的末尾追加或开头插入数据。注意这要求 Key 必须已存在。
append key flags exptime appendBytes [noreply] value
prepend key flags exptime bytes [noreply] value
成功返回 STORED,Key 不存在时返回 NOT_STORED。
CAS (Check-And-Set)
这是实现乐观锁的关键机制。只有当当前客户端最后一次取值后,该 Key 未被其他客户端修改过,才能写入新值。通过 cas_token(由 gets 获取)进行校验。
cas key flags exptime bytes unique_cas_token [noreply] value
成功返回 STORED,校验失败(并发修改)返回 EXISTS,Key 不存在返回 NOT_FOUND。
三、检索与修改
Get / Gets
get 用于获取 Value;gets 除了返回 Value 还会附带 CAS Token,配合 CAS 写入使用。
get key1 [key2 ...]
gets key1 [key2 ...]
成功返回 VALUE key flags bytes value END,不存在则无输出。
Delete 删除指定的 Key。
delete key [noreply]
成功返回 DELETED,Key 不存在返回 NOT_FOUND。
Incr / Decr 对数值型 Key 进行自增或自减。注意 Memcached 内部处理的是十进制 32 位无符号整数。
incr key increment_value
decr key decrement_value
成功返回新值,Key 不存在返回 NOT_FOUND,非数字类型返回 CLIENT_ERROR。
四、统计与监控
生产环境中,了解服务器状态至关重要。stats 系列命令提供了丰富的指标。
基础统计 查看进程号、版本、连接数、命令请求量及命中率等核心指标。
stats
关键字段说明:
pid: 进程 IDversion: 版本号curr_connections: 当前连接数cmd_get/cmd_set: Get/Set 命令请求次数get_hits/get_misses: 命中/未命中次数(计算命中率)evictions: LRU 淘汰的对象数目limit_maxbytes: 分配的总内存大小
Slab 与 Item 详情 深入查看各个 Slab 分类中 Item 的数量、年龄及淘汰情况。
stats items
stats slabs
这有助于分析内存碎片化程度和不同大小数据的分布。
Item 大小分布 查看所有 Item 的大小区间及其数量,帮助优化内存分配策略。
stats sizes
缓存转储 遍历单个 Slab 的所有 Key,通常用于调试特定键值问题。
stats cachedump slab_id key_size
五、维护清理
Flush All 清空所有缓存数据。支持延迟清理,避免瞬间流量冲击。
flush_all [time] [noreply]
time 参数指定延迟秒数,为 0 则立即执行。
