目前,我们在Centos 6.5网络服务器上运行直接管理网站。 APC过去已经配置好了,但是有些阅读建议也实现memcached来缓存一些静态表(比如菜单)。
从MySQL 5.6开始,innoDB表与mysql memcache deamon兼容,所以我开始关注本指南:http://dev.mysql.com/doc/refman/5.6/en/innodb-memcached-installing.html。 运行配置脚本并安装deamon。
但是Drupal memcache plugin没有看到memcache正在运行。该模块显然正在检查php memcached deamon,而我的deamon已经在mysql中运行了。
由于这两个扩展都被称为memcached.so
,我们强烈认为这是同一件事。实际上有两种不同的东西吗?Drupal不支持InnoDB memcached deamon,我是否需要两者(php扩展来访问mysql扩展名?),或者这应该是有效的并且我们做错了吗?
更新
状态报告显示“不运行”之类的内容,但我的一位同事现在已经安装了PHP PECL扩展程序,它似乎正在运行。但后来我仍然不明白MySQL innodb deamon插件的作用。是不是需要它,还是它改进了数据库访问,甚至更多的PHP扩展呢?
答案 0 :(得分:3)
InnoDB的Memcached接口是MySQL支持memcached协议的一个特性,但InnoDB作为后端存储。似乎很多人都对这意味着什么感到困惑,所以我会试着解释一下。
真正的memcached守护进程将数据存储在内存中,而MySQL将数据持久存储在InnoDB表中。 PHP应用程序可以使用memcached扩展读取和写入数据,就像它们使用标准的memcached内存存储一样。但是,它们实际上是在从InnoDB表中读取和写入行。
这比标准的memcached慢一些,因为它写入磁盘的开销大于访问内存。但它比使用SQL读取和写入这些行要快一些,因为它会省略SQL解析器和查询优化器的复杂性。
这确实是MySQL的新功能:绕过SQL,并通过简单但熟悉的界面直接访问InnoDB存储引擎。他们根据理论选择了memcached,许多开发人员已经熟悉它并且已经为它提供了工具和语言支持。
InnoDB memcached接口类似于2010年开发的名为HandlerSocket的早期实验插件。http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-nosql-story-for.html
这是一个Percona博客,显示了InnoDB memcached与SQL查询的相对速度测试:http://www.percona.com/blog/2013/03/29/mysql-5-6-innodb-memcached-plugin-as-a-caching-layer/
在评论中回答你的问题:
你可能会误解。 Memcached中的数据从不。 MySQL和Memcached之间没有自动同步。唯一的问题是MySQL正在模仿Memcached的API和协议。除了让开发人员熟悉API之外,他们没有理由这样做。
当您使用“Memoached API for InnoDB”时,您将应用程序连接到mysqld
守护进程监听的端口。您对此连接的请求直接在InnoDB存储引擎中读取和写入行。中间没有Memcached实例。
答案 1 :(得分:2)
InnoDB Memcached Plugin是MySQL> = 5.6中的一项功能,它在现有mysqld
进程中运行Memcached守护程序,支持在另一个端口上侦听Memcached API( 11211 默认情况下)。因为它在与InnoDB相同的进程空间中运行,所以您可以通过现有的,广泛可用的Memcached客户端,对InnoDB表中存储的数据进行低延迟访问。
这有一些有趣的用例:
案例#3特别值得注意:虽然Memcached插件默认配置为直接读取/写入底层InnoDB表(innodb_only
缓存策略),但可以配置为使用它自己的独立本地内存缓存,就像一个独立的Memcached实例一样,根本不使用InnoDB存储(cache-only
),或者使用InnoDB作为后备存储(caching
)。 (请注意,此时currently-accepted answer不正确。)
请参阅文档中的architecture diagram(请注意cache-only
或caching
缓存策略使用的'本地缓存(可选)'组件):
在设置/安装方面,如果您将Memcached插件用于独立键值缓存(案例#1)以外的任何其他内容,则需要创建从Memcached键/值到您的映射的映射通过向特殊innodb_memcache.containers
表写入一行来创建InnoDB表/列。有关详细信息,请参阅Creating a New Table and Column Mapping。
答案 2 :(得分:1)
这里有一些侧面跟踪,但现在你更善于使用memcache_storage模块。模块页面有很多很好的指示,如何使用该模块,以及它与其他模块集成良好,以便为您的站点提供更好,更快的缓存。