16.2.3.2 使用memcached作为 MySQL 缓存层

当使用memcached缓存 MySQL 数据时,您的应用程序必须从数据库中检索数据并将适当的键值对加载到缓存中。然后,可以直接从缓存中进行后续查找。

因为 MySQL 有自己的查询数据内存缓存机制,例如InnoDB 缓冲池和 MySQL 查询缓存,所以除了将单个列值或行加载到缓存之外,还要寻找机会。更喜欢缓存复合值,例如通过连接查询从多个表中检索到的值,或从多行组合而成的结果集。

警告

将缓存中的信息限制为非敏感数据,因为访问或更新memcached实例 中的信息不需要安全性。任何有权访问机器的人都能够阅读、查看并可能更新信息。为确保数据安全,请在缓存信息之前对其进行加密。要限制能够连接到服务器的用户,要么禁用网络访问,要么使用 IPTables 或类似技术将对memcached端口的访问限制为一组选定的主机。

您可以将缓存引入memcached现有应用程序,即使缓存不是原始设计的一部分。在许多语言和环境中,对应用程序的更改只是几行,首先在加载数据时尝试从缓存中读取,如果信息未被缓存,则回退到旧方法,一旦信息更新缓存。数据已被读取。

在任何语言中使用memcached作为 MySQL 的缓存解决方案的一般顺序如下:

  1. 从缓存中请求项目。

  2. 如果该项目存在,则使用项目数据。

  3. 如果该项不存在,则从 MySQL 加载数据,并将值存储到缓存中。这意味着该值可供下一个从缓存中请求它的客户端使用。

有关此序列的流程图,请参 见图 16.6 “典型的memcached应用程序流程图”

图 16.6 典型的memcached应用程序流程图

流程图显示了使用 memcached 作为 MySQL 缓存解决方案的一般顺序。

使数据库最佳实践适应memcached 应用程序

缓存 MySQL 数据最直接的方法是使用 2-column table,其中第一列是 primary key。由于memcached 键的唯一性要求,请确保您的数据库模式适当使用主键和唯一约束

如果您将多个列值组合成单个 memcached项目值,请选择数据类型以便将值解析回其组件,例如通过在数值之间使用分隔符。

最容易映射到memcached查找的查询是那些使用or运算符 的单个WHERE子句的查询。对于复杂的子句,或那些使用 、 、 或 等运算符的子句,memcached 不提供 简单有效的方式来扫描或过滤键或关联值,因此通常您将这些操作作为对底层数据库的 SQL 查询来执行。 =INWHERE<>BETWEENLIKE