2

我正在尝试在启用 memcached 插件的情况下设置 MySQL 5.6。我遵循了mysql 网站上的过程以及我在网上找到的其他一些教程23。具体来说,根据2,设置和测试应该非常简单。

我正在尝试使用 telnet 验证设置是否按预期工作。当我从 telnet 设置一个键的值时,我得到了 STORED 的返回状态。我什至可以立即从 memcache 中获取值。但是,当我登录数据库时,我看不到新行。我也没有在日志中看到任何错误。“show plugins”显示 daemon_memcached 插件已启用。

[已编辑]

事实上,事情甚至不是相反的。我在 demo_test 表中添加了一个新行,并尝试通过 memcache 接口获取它。那也没有用。

关于如何确定问题所在的任何指示?

4

2 回答 2

0

呸!!已经有一个 memcached 实例在端口 11211 上运行。不幸的是,mysql 在这种情况下不会出错。当我使用 telnet 连接到端口 11211 时,我正在访问现有的 memcached 实例。它正在存储/检索它已经看到但没有与 MySQL 通信的值。

我停止了现有的 memcached 实例并重新启动了 mysql。我现在可以连接到端口 11211。使用 telnet,当我执行“get”时,我会从数据库中取回值。此外,当我从 telnet 设置新值时,它们会反映在数据库中(并且可以使用 SQL 检索)。

于 2014-02-23T19:01:42.910 回答
0

MySQL 中的 memcache 集成直接与 InnoDB 存储引擎通信,而不是更高的 MySQL“服务器层”。因此,通过此接口更改表数据不会使针对已存储在查询缓存中的表的查询无效。这与通过 SQL 接口进行的正常操作形成对比,其中对表数据的任何更改都将立即驱逐查询缓存中针对该表进行查询的任何和所有结果,而不管对表数据的更改是否实际使每个受影响的特定查询无效。

重复您的查询,但不要SELECT使用SELECT SQL_NO_CACHE. 如果你得到你期望的结果,这就是解释。

一旦确定这是原因,您会发现任何对表执行插入、删除或更新的 SQL 查询也将具有使 memcache 更改的数据对SELECT查询可见的效果,而无需添加SQL_NO_CACHE指令,即使插入、删除或更新不直接影响相关,只要它修改了相关中的某些内容,这也是正确的。

于 2014-02-23T14:32:00.897 回答