温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何用键值存储缓存

发布时间:2026-09-02 01:50:46 来源:亿速云 阅读:90 作者:小樊 栏目:数据库

键值存储(Key-Value Store)是最常见、最简单的缓存形式之一。下面从概念 → 常见方案 → 使用模式 → 代码示例 → 最佳实践几个层面讲清楚“如何用键值存储做缓存”。


一、什么是键值缓存

  • Key:唯一标识(如 user:1001、page:/home)
  • Value:任意序列化数据(JSON、二进制、字符串等)
  • 特点:读写极快、结构灵活、不支持复杂查询

典型用途:

  • 热点数据缓存(用户、商品、配置)
  • 页面/接口结果缓存
  • 分布式 Session
  • 限流、计数器

二、常见键值存储选型

存储 特点 适用场景
Redis 内存+持久化,丰富数据结构 最常用缓存
Memcached 纯内存,简单 高并发读
RocksDB / LevelDB 本地磁盘 KV 本地缓存
内存 Map 单机最快 进程内缓存

三、基本使用模式

1️⃣ Cache-Aside(最常用)

读流程

1. 查缓存 key
2. 命中 → 返回
3. 未命中 → 查数据库
4. 写入缓存
5. 返回结果

写流程

1. 更新数据库
2. 删除缓存(不是更新)

✅ 优点:简单、稳定
❌ 缺点:有短暂不一致


2️⃣ Write-Through

  • 写数据库和缓存同时更新
  • 实现复杂,用的少

3️⃣ Write-Behind

  • 先写缓存,异步写库
  • 高性能但风险大

四、代码示例(Redis)

Java(Spring Boot)

String key = "user:1001";
User user = redis.get(key);

if (user == null) {
    user = userMapper.selectById(1001);
    redis.setex(key, 300, user); // 5分钟过期
}

Python

user = redis.get("user:1001")
if not user:
    user = db.query_user(1001)
    redis.setex("user:1001", 300, json.dumps(user))

五、缓存 Key 设计规范

✅ 推荐

业务:实体:ID
user:1001
order:20240101:888

❌ 避免

a1
temp

六、过期与淘汰策略

设置过期时间(必须)

EXPIRE key 300

淘汰策略(Redis)

  • allkeys-lru(常用)
  • volatile-lru
  • noeviction

七、常见问题与解决

1️⃣ 缓存穿透

现象:查不存在的数据,直击数据库
解决:

  • 缓存空值(短过期)
  • 布隆过滤器

2️⃣ 缓存击穿

现象:热点 Key 失效瞬间高并发
解决:

  • 互斥锁
  • 逻辑过期

3️⃣ 缓存雪崩

现象:大量 Key 同时失效
解决:

  • 过期时间加随机值
  • 多级缓存

八、进阶用法

  • 多级缓存(本地 + Redis)
  • 缓存预热
  • 缓存版本号
  • 分布式锁(Redis)

如果你愿意,我可以:

  • 给你完整缓存架构图
  • 写某语言完整示例
  • 讲高并发场景怎么设计

你主要用在什么场景?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手