14.21.5.2 为 InnoDB memcached 插件调整 memcached 应用程序
在使现有 memcached 应用程序适应使用daemon_memcached
插件时,请考虑 MySQL 和InnoDB
table 的这些方面:
-
如果键值的长度超过几个字节,则将数字自动增量列用作
InnoDB
table 的primary key,并在包含 memcached 键的列上创建唯一的secondary index可能会更有效。价值观。这是因为如果按排序 Sequences 添加主键值(如它们具有自动增量值),则InnoDB
对于大型插入效果最佳。主键值包含在辅助索引中,如果主键为长字符串值,它将占用不必要的空间。 -
如果您使用 memcached 存储几种不同类别的信息,请考虑为每种数据类型设置一个单独的
InnoDB
table。在innodb_memcache.containers
table 中定义其他 table 标识符,并使用@@table_id.key
table 示法存储和检索不同 table 中的项目。从物理上划分不同类型的信息,您可以调整每个 table 的特性,以实现最佳的空间利用率,性能和可靠性。例如,您可以为包含博客文章的 table 启用compression,而不为包含缩略图的 table 启用compression。您可能比另一个 table 更频繁地备份一个 table,因为它包含关键数据。您可能在经常使用 SQL 生成报告的 table 上创建其他secondary indexes。 -
最好配置一组稳定的 table 定义,以供 daemon_memcached 插件使用,并将这些 table 永久保留在原处。下次查询
innodb_memcache.containers
table 时,对innodb_memcache.containers
table 的更改将生效。容器 table 中的条目在启动时进行处理,并在每次使用@@
标记请求无法识别的 table 标识符(由containers.name
定义)时进行查询。因此,新条目在您使用关联的 table 标识符后立即可见,但是对现有条目的更改要求服务器重新启动才能生效。 -
当您使用默认的
innodb_only
缓存策略时,对add()
,set()
,incr()
等的调用可以成功,但仍会触发调试消息,例如while expecting 'STORED', got unexpected response 'NOT_STORED
。发生调试消息是因为由于innodb_only
缓存策略,新的和更新的值直接发送到InnoDB
table,而没有保存在内存缓存中。