14.21.7 InnoDB memcached 插件内部

InnoDB Memcached 插件的 InnoDB API

InnoDB memcached 引擎通过InnoDB API 访问InnoDB,其中大多数直接从嵌入式InnoDB中采用。 InnoDB API 函数作为回调函数传递到InnoDB memcached 引擎。 InnoDB API 函数直接访问InnoDBtable,并且大多数都是 DML 操作,但TRUNCATE TABLE除外。

memcached 命令是通过InnoDB memcached API 实现的。下 table 概述了如何将“ memcached”命令 Map 到 DML 或 DDL 操作。

table14.21 memcached 命令和相关的 DML 或 DDL 操作

memcached Command DML 或 DDL 操作
get 读/取命令
set 搜索后跟一个INSERTUPDATE(取决于密钥是否存在)
add 搜索后跟着INSERTUPDATE
replace 搜索后跟着UPDATE
append 搜索后跟UPDATE(将数据附加到UPDATE之前的结果中)
prepend 搜索后跟UPDATE(将数据添加到UPDATE之前的结果中)
incr 搜索后跟着UPDATE
decr 搜索后跟着UPDATE
delete 搜索后跟着DELETE
flush_all TRUNCATE TABLE(DDL)

InnoDB memcached 插件配置 table

本节介绍daemon_memcached插件使用的配置 table。 cache_policiestable,config_optionstable 和containerstable 是由innodb_memcache数据库中的innodb_memcached_config.sql配置脚本创建的。

mysql> USE innodb_memcache;
Database changed
mysql> SHOW TABLES;
+---------------------------+
| Tables_in_innodb_memcache |
+---------------------------+
| cache_policies            |
| config_options            |
| containers                |
+---------------------------+

cache_policies Table

cache_policiestable 定义了InnoDB memcached安装的缓存策略。您可以在单个缓存策略中为getsetdeleteflush操作指定单独的策略。所有操作的默认设置为innodb_only

table14.22 cache_policies 列

Column Description
policy_name 缓存策略的名称。默认的缓存策略名称为cache_policy
get_policy 获取操作的缓存策略。有效值为innodb_onlycache_onlycachingdisabled。默认设置为innodb_only
set_policy 设置操作的缓存策略。有效值为innodb_onlycache_onlycachingdisabled。默认设置为innodb_only
delete_policy 删除操作的缓存策略。有效值为innodb_onlycache_onlycachingdisabled。默认设置为innodb_only
flush_policy 刷新操作的缓存策略。有效值为innodb_onlycache_onlycachingdisabled。默认设置为innodb_only

config_options Table

config_optionstable 存储与 memcached 相关的设置,可以在运行时使用 SQL 进行更改。支持的配置选项是separatortable_map_delimiter

table14.23 config_options 列

Column Description
Name 与 memcached 相关的配置选项的名称。 config_optionstable 支持以下配置选项:

separator:当定义多个value_columns时,用于将长字符串的值分隔为单独的值。默认情况下,separator|字符。例如,如果将col1, col2定义为值列,并将|定义为分隔符,则可以发出以下 memcached 命令分别将值插入col1col2
设置密钥 x 10 0 19
valuecolx
valuecoly
valuecol1x存储在col1中,而valuecoly存储在col2中。
table_map_delimiter:在键名中使用@@table 示法访问特定 table 中的键时,将模式名和 table 名分隔的字符。例如,@@t1.some_key@@t2.some_key具有相同的键值,但存储在不同的 table 中。
Value 分配给 memcached 相关配置选项的值。

containers Table

containerstable 是三个配置 table 中最重要的。每个用于存储 memcached 值的InnoDBtable 必须在containerstable 中具有一个条目。该条目提供InnoDBtable 列和容器 table 列之间的 Map,memcachedInnoDBtable 一起使用时需要此 Map。

containerstable 包含test.demo_testtable 的默认条目,该默认条目是由innodb_memcached_config.sql配置脚本创建的。要将daemon_memcached插件与您自己的InnoDBtable 一起使用,必须在containerstable 中创建一个条目。

table14.24 容器列

Column Description
name 容器的名称。如果未使用@@标记按名称请求InnoDBtable,则daemon_memcached插件将使用containers.name值为defaultInnoDBtable。如果没有这样的条目,则containerstable 中的第一个条目(按name(升序)按字母 Sequences 排列)将确定默认的InnoDBtable。
db_schema InnoDBtable 所在的数据库的名称。这是必需的值。
db_table 存储 memcached 值的InnoDBtable 的名称。这是必需的值。
key_columns InnoDBtable 中的列,其中包含 memcached 操作的查找键值。这是必需的值。
value_columns 存储memcached数据的InnoDBtable 列(一个或多个)。可以使用innodb_memcached.config_optionstable 中指定的分隔符指定多列。默认情况下,分隔符是竖线字符(“ ”)。要指定多列,请使用定义的分隔符将它们分开。例如:col1|col2|col3。这是必需的值。
flags InnoDBtable 列用作 memcached 的标志(用户定义的数值与主值一起存储和检索)。如果将 memcached 值 Map 到多个列,则可以将标志值用作某些操作(例如incrprepend)的列说明符,以便对指定的列执行操作。例如,如果您已将value_columnsMap 到三个InnoDBtable 列,并且只希望对一个列执行增量操作,请使用flags列来指定该列。如果不使用flags列,请将0的值设置为 table 示未使用。
cas_column 存储比较和交换(cas)值的InnoDBtable 列。 cas_column值与 memcached 将请求散列到不同服务器并在内存中缓存数据的方式有关。由于InnoDB memcached 插件与单个 memcached 守护程序紧密集成,并且内存中缓存机制由 MySQL 和InnoDB 缓冲池处理,因此几乎不需要此列。如果不使用此列,请将0的值设置为 table 示未使用。
expire_time_column 存储过期值的InnoDBtable 列。 expire_time_column值与 memcached 将请求散列到不同服务器并在内存中缓存数据的方式有关。由于InnoDB memcached 插件与单个 memcached 守护程序紧密集成,并且内存中缓存机制由 MySQL 和InnoDB 缓冲池处理,因此几乎不需要此列。如果您不使用此列,请将值0设置为指示该列未使用。最大到期时间定义为INT_MAX32或 2147483647 秒(大约 68 年)。
unique_idx_name_on_key 键列上索引的名称。它必须是唯一索引。它可以是primary keysecondary index。最好使用InnoDBtable 的主键。使用主键可避免在使用辅助索引时执行的查找。您无法对_memcached **查询进行covering index处理;如果您尝试在键和值列上定义复合二级索引,则InnoDB返回错误。
容器 table 列约束

在插件加载时执行预检查以强制执行列约束。如果发现不匹配,则不会加载该插件。

多值列 Map

demo_test 示例 table

innodb_memcached_config.sql配置脚本会在test数据库中创建一个demo_testtable,该 table 可用于在安装后立即验证InnoDB memcached 插件的安装。

innodb_memcached_config.sql配置脚本还会在innodb_memcache.containerstable 中为demo_testtable 创建一个条目。

mysql> SELECT * FROM innodb_memcache.containers\G
*************************** 1. row ***************************
                  name: aaa
             db_schema: test
              db_table: demo_test
           key_columns: c1
         value_columns: c2
                 flags: c3
            cas_column: c4
    expire_time_column: c5
unique_idx_name_on_key: PRIMARY

mysql> SELECT * FROM test.demo_test;
+----+------------------+------+------+------+
| c1 | c2               | c3   | c4   | c5   |
+----+------------------+------+------+------+
| AA | HELLO, HELLO     |    8 |    0 |    0 |
+----+------------------+------+------+------+
首页