Memcached - 概述
Memcached:概述
Section titled “Memcached:概述”Memcached 是一个免费开源、高性能、分布式内存键值存储系统。它主要用作缓存层,通过减轻数据库负载来加速动态 Web 应用程序。可以将其视为应用程序的短期高速内存,用于存储耗时操作(如数据库查询、API 调用或整页渲染)的结果。
Memcached 最初由 Brad Fitzpatrick 于 2003 年为 LiveJournal 开发,现已成为扩展全球许多大型 Web 服务的基础技术,在数十年的发展中证明了其简单性、速度和可靠性。
核心概念与特性
Section titled “核心概念与特性”- 键值存储: 本质上,Memcached 是一个巨大的哈希表(或字典),它在特定
key下存储数据。所有数据都被视为不透明的blob(二进制大对象),最常见的是字符串。 - 内存速度: 所有数据都完全存储在
RAM(随机存取存储器)中。这避免了磁盘I/O(输入/输出),从而实现了读写操作的极低延迟(通常在亚毫秒级)。 - 分布式系统: Memcached 被设计为分布式缓存。您可以在不同的机器上运行多个 Memcached 服务器,客户端库将自动在它们之间分布
key(这个过程称为sharding,分片)。这允许缓存容量进行水平扩展。 - LRU 逐出: 当缓存满时,Memcached 会自动移除最近最少使用(
LRU)的项,以便为新项腾出空间。这确保了最常访问的数据倾向于保留在缓存中。 - 客户端-服务器模型: 应用程序通过网络使用简单的基于
TCP的协议与 Memcached 服务器交互。几乎每种流行的编程语言都有大量的客户端库可用。
Memcached 不适合做什么
Section titled “Memcached 不适合做什么”了解 Memcached 的局限性与了解其优点同样重要。它专为一项任务——缓存——而设计,并且在这方面表现出色。
- 非持久性数据存储: Memcached 是易失的(volatile)。如果服务器重新启动或崩溃,其上存储的所有数据都将丢失。它绝不应被用作您数据的单一真相来源;那是数据库的工作。
- 非数据库替代品: 它缺乏传统数据库的特性,例如复杂查询、事务或数据完整性约束。
- 非丰富数据结构服务器: 与 Redis 等系统不同,Memcached 没有内置对列表(lists)、集合(sets)、哈希(hashes)或有序集合(sorted sets)等高级数据结构的支持。它操作的是简单的
key和value(字符串)。 - 非原生容错: 标准的 Memcached 集群不复制数据。如果一个服务器节点发生故障,其上的数据将变得不可用。高可用性和故障转移逻辑必须在客户端库或代理层中实现。
何时选择 Memcached
Section titled “何时选择 Memcached”当您需要以下情况时,Memcached 是一个绝佳的选择:
- 最简单、高速的键值缓存机制。
- 缓存相对较小、可序列化的对象或字符串(例如,
API响应、渲染的HTML片段、会话数据)。 - 一个易于通过简单增加服务器进行水平扩展的缓存层。
- 性能最大化且操作复杂性最小化。
对于需要数据持久化、复杂数据结构或 pub/sub(发布/订阅)功能的场景,Redis 等系统可能更合适。