Memcached 缓存¶
一句话概述:Memcached 是高性能的分布式内存缓存系统,用键值对存储数据在内存中,减少数据库查询次数,提高应用响应速度,被 Facebook、Twitter 等大厂广泛使用。
核心知识点¶
| 概念 | 白话解释 |
|---|---|
| Key-Value | 键值对 = 用一个键(key)存取一个值(value) |
| Expiration | 过期时间 = 数据多久后自动删除 |
| Slab | 内存块 = Memcached 管理内存的方式 |
| CAS | 比较并交换 = 防止并发写入冲突的机制 |
| Consistent Hashing | 一致性哈希 = 多台 Memcached 的数据分配策略 |
安装配置¶
# Docker
docker run -d --name memcached -p 11211:11211 memcached:latest -m 256 # 256MB 内存
# Ubuntu
sudo apt install memcached # 安装
sudo systemctl start memcached # 启动
# Python 客户端
pip install pymemcache # 推荐客户端
基本使用¶
from pymemcache.client.base import Client
import json
client = Client('localhost:11211') # 连接
# 设置缓存
client.set('user:1', json.dumps({'name': 'Alice', 'age': 25}), expire=3600) # 1小时过期
# 获取缓存
data = client.get('user:1') # 返回 bytes
if data:
user = json.loads(data)
print(user)
# 删除缓存
client.delete('user:1')
# 自增/自减
client.set('counter', '0')
client.incr('counter', 1) # +1
client.decr('counter', 1) # -1
缓存模式¶
def get_user(user_id):
"""缓存旁路模式(Cache-Aside)"""
key = f'user:{user_id}'
cached = client.get(key)
if cached:
return json.loads(cached) # 缓存命中
user = db.query(f"SELECT * FROM users WHERE id={user_id}") # 查数据库
client.set(key, json.dumps(user), expire=600) # 存缓存(10分钟)
return user
常见报错¶
| 报错信息 | 原因 | 解决方法 |
|---|---|---|
Connection refused | 服务未启动 | 启动 Memcached |
SERVER_ERROR out of memory | 内存用完 | 增加 -m 参数或清理缓存 |
Value too large | 值超过 1MB 限制 | 压缩数据或拆分存储 |
速查表¶
client.set(key, value, expire=秒) # 设置
client.get(key) # 获取
client.delete(key) # 删除
client.incr(key, delta) # 自增
client.decr(key, delta) # 自减
client.flush_all() # 清空所有
# === Memcached vs Redis ===
# Memcached: 纯缓存、多线程、更简单
# Redis: 缓存+数据结构+持久化+Pub/Sub、单线程(6.0后多线程IO)
# 选择建议:纯缓存用 Memcached,需要复杂数据结构用 Redis
参考:Memcached | 更新于 2026 年