InnoDB
memcached
引擎通过API访问
,InnoDB
大部分
InnoDB
都是直接从embedded InnoDB
.
API 函数作为回调函数InnoDB
传递给
InnoDB
memcached引擎。InnoDB
API 函数InnoDB
直接访问表,除了
TRUNCATE TABLE
.
memcached命令是通过InnoDB
memcached API 实现的。下表概述了memcached
命令如何映射到 DML 或 DDL 操作。
表 14.21 memcached 命令和关联的 DML 或 DDL 操作
memcached 命令 | DML 或 DDL 操作 |
---|---|
get |
读/取命令 |
set |
搜索后跟一个INSERT 或
UPDATE (取决于键是否存在) |
add |
搜索后跟一个INSERT 或
UPDATE |
replace |
搜索后跟UPDATE |
append |
搜索后跟UPDATE (将数据附加到结果之前UPDATE ) |
prepend |
搜索后跟UPDATE (将数据添加到结果之前UPDATE ) |
incr |
搜索后跟UPDATE |
decr |
搜索后跟UPDATE |
delete |
搜索后跟DELETE |
flush_all |
TRUNCATE TABLE (DDL) |
本节描述
daemon_memcached
插件使用的配置表。表
cache_policies
、
config_options
表、
containers
表是由
数据库innodb_memcached_config.sql
中的配置脚本创建的innodb_memcache
。
mysql> USE innodb_memcache;
Database changed
mysql> SHOW TABLES;
+---------------------------+
| Tables_in_innodb_memcache |
+---------------------------+
| cache_policies |
| config_options |
| containers |
+---------------------------+
该cache_policies
表定义了InnoDB
memcached
安装的缓存策略。您可以在单个缓存策略中为get
、
set
、delete
和
操作指定单独的策略。flush
所有操作的默认设置为
innodb_only
。
innodb_only
:InnoDB
用作数据存储。cache_only
: 使用 memcached引擎作为数据存储。caching
:同时使用InnoDB
和 memcached引擎作为数据存储。在这种情况下,如果memcached在内存中找不到键,它会在InnoDB
表中搜索该值。disable
: 禁用缓存。
表 14.22 cache_policies 列
柱子 | 描述 |
---|---|
policy_name |
缓存策略的名称。默认缓存策略名称是
cache_policy . |
get_policy |
获取操作的缓存策略。有效值为
innodb_only 、
cache_only 、caching 或disabled 。默认设置为
innodb_only 。 |
set_policy |
集合操作的缓存策略。有效值为
innodb_only 、
cache_only 、caching 或disabled 。默认设置为
innodb_only 。 |
delete_policy |
删除操作的缓存策略。有效值为
innodb_only 、
cache_only 、caching 或disabled 。默认设置为
innodb_only 。 |
flush_policy |
刷新操作的缓存策略。有效值为
innodb_only 、
cache_only 、caching 或disabled 。默认设置为
innodb_only 。 |
该config_options
表存储
可在运行时使用 SQL 更改的与memcached相关的设置。支持的配置选项是separator
和
table_map_delimiter
。
表 14.23 config_options 列
柱子 | 描述 |
---|---|
Name |
memcached相关配置选项的名称。该
config_options 表支持以下配置选项:
|
Value |
分配给memcached相关配置选项的值。 |
该containers
表是三个配置表中最重要的一个。每个InnoDB
用于存储memcached值的表都必须在表中有一个条目containers
。该条目提供InnoDB
表列和容器表列之间的映射,这是
memcached
使用
InnoDB
表所必需的。
该containers
表包含该表的默认条目,该条目test.demo_test
由innodb_memcached_config.sql
配置脚本创建。要将
daemon_memcached
插件与您自己的
InnoDB
表一起使用,您必须在表中创建一个条目
containers
。
表 14.24 容器列
柱子 | 描述 |
---|---|
name |
为容器指定的名称。如果未使用
表示法InnoDB 按名称请求表,
插件将使用值为
. 如果没有这样的条目,则表中的第一个条目(按字母顺序
(升序)排序)确定默认
表。@@ daemon_memcached InnoDB containers.name default containers name InnoDB |
db_schema |
InnoDB 表所在的数据库的名称。这是一个必需的值。 |
db_table |
存储memcached值的InnoDB 表
的名称。这是一个必需的值。 |
key_columns |
表中包含内存缓存操作InnoDB 的查找键值的列。这是一个必需的值。 |
value_columns |
存储数据的InnoDB 表列(一个或多个)
。memcached 可以使用表中指定的分隔符来指定多个列
innodb_memcached.config_options 。默认情况下,分隔符是管道字符 ( “ | ” )。要指定多个列,请使用定义的分隔符分隔它们。例如:
col1|col2|col3 。这是一个必需的值。 |
flags |
InnoDB 用作
memcached标志(与主值一起存储和检索的用户定义的数值)的表列。如果memcached值映射到多个列,则标志值可以用作某些操作(例如
incr , prepend )
的列说明符,以便在指定列上执行操作。例如,你将a映射
到三个
表列,只想对其中一个列进行自增操作,则使用
column来指定列。如果您不使用value_columns InnoDB flags flags 列,设置一个值0 表示它未被使用。 |
cas_column |
存储比较和交换 (cas) 值的InnoDB 表列。该cas_column 值与memcached将请求散列到不同服务器并将数据缓存在内存中的方式有关。因为InnoDB
memcached插件与单个memcached守护进程紧密集成,内存缓存机制由 MySQL 和
InnoDB 缓冲池处理,所以很少需要此专栏。如果您不使用此列,请设置一个值0 以指示它未被使用。 |
expire_time_column |
存储过期值的InnoDB 表列。该expire_time_column 值与memcached将请求散列到不同服务器并将数据缓存在内存中的方式有关。因为InnoDB
memcached插件与单个memcached守护进程紧密集成,内存缓存机制由 MySQL 和
InnoDB 缓冲池处理,所以很少需要此专栏。如果您不使用此列,请设置一个值0 以指示该列未被使用。最大过期时间定义为INT_MAX32 或 2147483647 秒(约 68 年)。 |
unique_idx_name_on_key |
键列上的索引名称。它必须是唯一索引。它可以是主键或
二级索引。最好使用表的主键
InnoDB 。使用主键可以避免使用二级索引时执行的查找。您不能
为memcached查找
创建覆盖索引;如果您尝试在键和值列上定义复合二级索引,则会返回错误。InnoDB |
容器表列约束
db_schema
您必须为、db_name
、key_columns
和value_columns
提供 一个值unique_idx_name_on_key
。指定0
,flags
,cas_column
以及expire_time_column
它们是否未使用。否则可能会导致您的设置失败。key_columns
: memcached键的最大限制为 250 个字符,这是由memcached强制执行的。映射的键必须是非 NullCHAR
或VARCHAR
类型。cas_column
:该cas
值为 64 位整数。它必须映射到BIGINT
至少 8 个字节的 a。如果您不使用此列,请设置一个值0
以指示它未被使用。expiration_time_column
: 必须映射到INTEGER
至少 4 个字节。过期时间定义为 Unix 时间的 32 位整数(自 1970 年 1 月 1 日以来的秒数,作为 32 位值),或从当前时间开始的秒数。对于后者,秒数不得超过60*60*24*30(30天的秒数)。如果客户端发送的数字较大,则服务器认为它是一个真正的 Unix 时间值,而不是与当前时间的偏移量。如果您不使用此列,请设置一个值0
以指示它未被使用。flags
: 必须映射到INTEGER
至少 32 位的一个,并且可以为 NULL。如果您不使用此列,请设置一个值0
以指示它未被使用。
在插件加载时执行预检查以强制执行列约束。如果发现不匹配,则不会加载插件。
多值列映射
在插件初始化期间,当使用表中定义的信息配置
InnoDB
memcached时,将针对映射表验证中containers
定义的每个映射列 。如果映射了多个表列,则会进行检查以确保每个列都存在并且是正确的类型。containers.value_columns
InnoDB
InnoDB
在运行时,对于
memcached
插入操作,如果分隔值的数量多于映射列的数量,则只采用映射值的数量。例如,如果有六个映射列,并提供了七个分隔值,则仅采用前六个分隔值。第七个分隔值将被忽略。如果分隔值比映射列少,未填充的列将设置为 NULL。如果未填充的列不能设置为 NULL,插入操作将失败。
如果表的列多于映射值,则额外的列不会影响结果。
配置脚本在数据库中innodb_memcached_config.sql
创建一个demo_test
表test
,可用于在安装后立即验证InnoDB
memcached
插件安装。
配置脚本还在表中为
表innodb_memcached_config.sql
创建一个条目
。
demo_test
innodb_memcache.containers
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 |
+----+------------------+------+------+------+