我想我一定错过了一些非常明显的东西,但我想做的是使用 MySQL 5.6 并通过 memcache 返回值
所以我已经设置MYSQL来使用memcache插件,在innodb_memcache.containers表中设置详细信息
我现在该表中有两项,MySQL输入的默认项和我自己的设置,它们都有表名。
为了通过 php 获取数据,我使用:
$memcache->get($key);
其中$key是db列中的数据
然而这没有返回任何内容,我怀疑原因是,根据MySQL文档,如果没有指定表名,它会选择列表中的第一个,这不是我想要的,我不明白的是我如何在键中指定正确的表名,以便它知道在哪个表中查找该键。
附加信息:
table design:
table: codes
id INT PK
code VARCHAR UNIQUE
codeval VARCHAR
innodb_memcache.containers :
name: mycode
db_schema: databaseName
db_table: codes
key_columns: code
value_columns: codeval
flags: id
cas_column: null
expire_time_column: null
unique_idx_name_on_key: code
Code:
$table = "mycode";
$key = "123456";
$memcache = new Memcache;
$memcache->connect($this->CONNECTURL, $this->CONNECTPORT) or die ("Could not connect");
$version = $memcache->getVersion();
echo "Server's version: ".$version."<br/>\n";
$key = "@@" . $table . "." . $key . "." . $table;
$get_result = $memcache->get($key);
print_r($get_result);
上面的代码没有问题地返回服务器版本,因此连接正常。
print_r($get_result) 在应该返回值时返回空白
它确实抛出一个通知:尝试获取非对象的属性
因此,如果有人能让我知道如何使用 $key 指定我用来通过 memcache 查询的表,我将不胜感激!
表名(table_id
in @@table_id
) 必须是映射中的值 (innodb_memcache.containers
),而不是实际的表名称(如果有所不同)。
如果映射中的表名是mycode
,然后通过结果查询memcache应该看起来像这样:
$table = 'mycode';
$key = '123456';
$memcache->get( '@@' . $table . '.' . $key );
没有多余的'.' . $table
在最后。
一些详细信息可从InnoDB 内存缓存插件 http://dev.mysql.com/doc/refman/5.6/en/innodb-memcached-internals.html文档页面。
在此仅举几个重要的例子:
- Use
select * from innodb_memcache.containers;
获取定义的映射;
- 注意查询组织:
例如,@@t1.some_key和@@t2.some_key具有相同的键值,
但存储在不同的表中,因此不会发生冲突。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)