首页/数据/NoSQL 速查/键值存储选型:缓存、配置与协调
选型与架构50 条

键值存储选型:缓存、配置与协调

键值类不只有缓存:Redis 适合高频读写与数据结构;Memcached 只做纯缓存;etcd/Consul 面向少量关键配置与协调(Raft、watch、租约),不适合当业务缓存;托管型 KV 用容量与延迟规格换取免运维。按访问模式与一致性要求对号入座。

NoSQL 速查数据更新于 2026-10-13

键值存储分几类

键值类系统按定位可以分成三档:缓存型(Redis、Memcached)面向高频读写且可容忍丢失;协调型(etcd、Consul)面向数据量小但绝不能错、还需要变更通知的场景;托管型用容量与延迟规格换取免运维。选型的关键不是比较功能清单,而是先回答两个问题:这份数据丢了会怎样、需要多强的读写一致性。

定位对照

系统关键能力不适合的场景
Redis亚毫秒读写、多种数据结构、复制与集群需要 SQL 与复杂二级索引的业务数据
Memcached简单 KV、多线程、纯缓存持久化、复制、复杂数据结构
etcdRaft 强一致、watch 变更通知、租约高频大数据量读写(写吞吐有限)
托管 KV 服务弹性容量、按量计费、免运维需要自控内核与深度定制的场景

基本信息

数据模型键到值的映射,值可以是简单字符串或复杂结构(视产品而定)
一致性从最终一致到强一致都有,Raft 类协调服务为强一致
持久化缓存型多为可选持久化,协调型把持久化作为默认前提
容量口径内存型受内存上限约束,调大上限与淘汰策略要一起考虑
变更通知watch 与订阅能力是协调型系统的核心差异点

典型使用场景

  • 会话与登录态:允许丢失、可重建,缓存型最合适
  • 热点数据缓存:抗住读放大,注意缓存与数据库的一致性策略
  • 分布式锁与选主:需要强一致与租约,用协调型而非缓存型
  • 配置与开关下发:少量关键数据加 watch 通知,改动要实时生效
  • 计数与限流:单键原子操作简单高效,但要注意热点键的倾斜问题

etcd 典型用途

etcd 典型用途
# 少量关键数据 + 变更通知:配置与开关的典型用法
etcdctl put /config/app/max_conn 200
etcdctl get /config/app/max_conn
etcdctl watch /config/app/ --prefix      # 变更实时推送给订阅方

# 租约:绑定 TTL 的键,用于心跳与故障判定
# etcdctl lease grant 30
# etcdctl put /nodes/worker-1 alive --lease=<lease-id>
判断口诀:数据量大且可丢选缓存型;数据量小、不能错且需要变更通知选协调型;预算换运维选托管型。
把配置数据与业务缓存放在同一个缓存实例里风险很高:淘汰策略会把配置逐出,导致依赖配置的服务突然读不到参数。

易错点

  • 把 etcd 当缓存刷高频写入:Raft 复制与日志落盘让写吞吐受限,还会拖慢集群自身的协调能力
  • 缓存与配置混用同一个实例:配置键被淘汰后读取失败,故障范围从一个功能扩散到整个服务
  • 用缓存型承担不能丢的数据:持久化配置不当或内存淘汰都会造成静默丢数据
  • 只按单键读写延迟选型:批量读取与多键事务的需求会暴露不同产品的短板,要按访问模式评估

数据来源与参考

  • Redis Docs: Data types
  • etcd Documentation: Why etcd
  • Memcached Wiki(GitHub memcached/memcached)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌