跳转至

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 年