Skip to content

Memcached - 概述

Memcached 是一个免费开源、高性能、分布式内存键值存储系统。它主要用作缓存层,通过减轻数据库负载来加速动态 Web 应用程序。可以将其视为应用程序的短期高速内存,用于存储耗时操作(如数据库查询、API 调用或整页渲染)的结果。

Memcached 最初由 Brad Fitzpatrick 于 2003 年为 LiveJournal 开发,现已成为扩展全球许多大型 Web 服务的基础技术,在数十年的发展中证明了其简单性、速度和可靠性。

  • 键值存储: 本质上,Memcached 是一个巨大的哈希表(或字典),它在特定 key 下存储数据。所有数据都被视为不透明的 blob(二进制大对象),最常见的是字符串。
  • 内存速度: 所有数据都完全存储在 RAM(随机存取存储器)中。这避免了磁盘 I/O(输入/输出),从而实现了读写操作的极低延迟(通常在亚毫秒级)。
  • 分布式系统: Memcached 被设计为分布式缓存。您可以在不同的机器上运行多个 Memcached 服务器,客户端库将自动在它们之间分布 key(这个过程称为 sharding,分片)。这允许缓存容量进行水平扩展。
  • LRU 逐出: 当缓存满时,Memcached 会自动移除最近最少使用(LRU)的项,以便为新项腾出空间。这确保了最常访问的数据倾向于保留在缓存中。
  • 客户端-服务器模型: 应用程序通过网络使用简单的基于 TCP 的协议与 Memcached 服务器交互。几乎每种流行的编程语言都有大量的客户端库可用。

了解 Memcached 的局限性与了解其优点同样重要。它专为一项任务——缓存——而设计,并且在这方面表现出色。

  • 非持久性数据存储: Memcached 是易失的(volatile)。如果服务器重新启动或崩溃,其上存储的所有数据都将丢失。它绝不应被用作您数据的单一真相来源;那是数据库的工作。
  • 非数据库替代品: 它缺乏传统数据库的特性,例如复杂查询、事务或数据完整性约束。
  • 非丰富数据结构服务器: 与 Redis 等系统不同,Memcached 没有内置对列表(lists)、集合(sets)、哈希(hashes)或有序集合(sorted sets)等高级数据结构的支持。它操作的是简单的 key 和 value(字符串)。
  • 非原生容错: 标准的 Memcached 集群不复制数据。如果一个服务器节点发生故障,其上的数据将变得不可用。高可用性和故障转移逻辑必须在客户端库或代理层中实现。

当您需要以下情况时,Memcached 是一个绝佳的选择:

  • 最简单、高速的键值缓存机制。
  • 缓存相对较小、可序列化的对象或字符串(例如,API 响应、渲染的 HTML 片段、会话数据)。
  • 一个易于通过简单增加服务器进行水平扩展的缓存层。
  • 性能最大化且操作复杂性最小化。

对于需要数据持久化、复杂数据结构或 pub/sub(发布/订阅)功能的场景,Redis 等系统可能更合适。