MySQL 5.6 参考手册  / 第 16 章高可用性和可扩展性  /  16.2 将 MySQL 与 memcached 一起使用

16.2 将 MySQL 与memcached一起使用

memcached是一种简单、高度可扩展的基于键的缓存,它可以在专用或备用 RAM 可用的任何地方存储数据和对象,以供应用程序快速访问,而无需经过解析层或磁盘 I/O。要使用,您可以 在一台或多台主机上运行memcached命令,然后使用共享缓存来存储对象。有关更多使用说明,请参阅第 16.2.2 节,“使用memcached

使用memcached的好处包括:

  • 因为所有信息都存储在RAM中,所以访问速度比每次从磁盘加载信息要快。

  • 因为键值对的部分没有任何数据类型限制,所以您可以缓存复杂结构、文档、图像或此类内容的混合数据。

  • 如果您使用内存中的缓存来保存临时信息,或者将其作为存储在数据库中的信息的只读缓存,那么任何memcached服务器的故障都不会很严重。对于持久数据,您可以回退到使用数据库查询的替代查找方法,并将数据重新加载到不同服务器上的 RAM 中。

典型的使用环境是修改您的应用程序,以便从memcached 提供的缓存中读取信息 。如果信息不在 memcached中,则数据从 MySQL 数据库加载并写入缓存,以便将来对同一对象的请求从缓存数据中受益。

对于典型的部署布局,请参 见图 16.2 “ memcached架构概述”

图 16.2  memcached架构概览

示例 memcached 结构显示大量客户端、三个 memcached 服务器和一个数据库。 客户端和 memcached 服务器之间的连接线说明客户端配置为与任何 memcached 服务器通信。

在示例结构中,任何客户端都可以联系其中一个 memcached服务器来请求给定的密钥。每个客户端都配置为与图中所示的所有服务器通信。在客户端中,当发出存储信息的请求时,用于引用数据的密钥将被散列,然后使用该散列来选择一个 memcached服务器。Memcached服务器 的选择 在客户端联系服务器之前进行,从而保持流程轻量级。

当客户端请求相同的密钥时,将再次使用相同的算法。相同的键生成相同的哈希值,并选择相同的 memcached服务器作为数据源。使用这种方法,缓存的数据分布在所有的memcached服务器中,并且可以从任何客户端访问缓存的信息。结果是一个分布式的、基于内存的缓存可以返回信息,特别是复杂的数据和结构,比从数据库中本地读取信息要快得多。

传统的memcached 服务器中保存的数据从不存储在磁盘上(仅存储在 RAM 中,这意味着没有数据持久性),并且 RAM 缓存始终从后备存储(MySQL 数据库)填充。如果memcached 服务器发生故障,数据始终可以从 MySQL 数据库中恢复。