14.21.5.2 为 InnoDB memcached 插件调整 memcached 应用程序

在使现有 memcached 应用程序适应使用daemon_memcached插件时,请考虑 MySQL 和InnoDBtable 的这些方面:

  • 如果键值的长度超过几个字节,则将数字自动增量列用作InnoDBtable 的primary key,并在包含 memcached 键的列上创建唯一的secondary index可能会更有效。价值观。这是因为如果按排序 Sequences 添加主键值(如它们具有自动增量值),则InnoDB对于大型插入效果最佳。主键值包含在辅助索引中,如果主键为长字符串值,它将占用不必要的空间。

  • 如果您使用 memcached 存储几种不同类别的信息,请考虑为每种数据类型设置一个单独的InnoDBtable。在innodb_memcache.containerstable 中定义其他 table 标识符,并使用@@table_id.keytable 示法存储和检索不同 table 中的项目。从物理上划分不同类型的信息,您可以调整每个 table 的特性,以实现最佳的空间利用率,性能和可靠性。例如,您可以为包含博客文章的 table 启用compression,而不为包含缩略图的 table 启用compression。您可能比另一个 table 更频繁地备份一个 table,因为它包含关键数据。您可能在经常使用 SQL 生成报告的 table 上创建其他secondary indexes

  • 最好配置一组稳定的 table 定义,以供 daemon_memcached 插件使用,并将这些 table 永久保留在原处。下次查询innodb_memcache.containerstable 时,对innodb_memcache.containerstable 的更改将生效。容器 table 中的条目在启动时进行处理,并在每次使用@@标记请求无法识别的 table 标识符(由containers.name定义)时进行查询。因此,新条目在您使用关联的 table 标识符后立即可见,但是对现有条目的更改要求服务器重新启动才能生效。

  • 当您使用默认的innodb_only缓存策略时,对add()set()incr()等的调用可以成功,但仍会触发调试消息,例如while expecting 'STORED', got unexpected response 'NOT_STORED。发生调试消息是因为由于innodb_only缓存策略,新的和更新的值直接发送到InnoDBtable,而没有保存在内存缓存中。