的InnoDB
memcached引擎访问InnoDB
通过InnoDB
api,其中大多数直接从嵌入式中采用InnoDB
.InnoDB
API函数传递给InnoDB
memcached引擎作为回调函数。InnoDB
API函数访问InnoDB
表,并且大多数是DML操作,除了截断表
.
memcached命令通过InnoDB
memcachedAPI。下表概述了如何操作memcached命令映射到DML或DDL操作。
表15.27 memcached命令和相关的DML或DDL操作
memcached命令 | DML或DDL操作 |
---|---|
得到 |
读/获取命令 |
集 |
一个搜索后面跟着一个插入 或更新 (取决于键是否存在) |
添加 |
一个搜索后面跟着一个插入 或更新 |
取代 |
一个搜索后面跟着一个更新 |
附加 |
一个搜索后面跟着一个更新 (将数据追加到前面的结果更新 ) |
预谋 |
一个搜索后面跟着一个更新 (在结果前面加上数据更新 ) |
增加 |
一个搜索后面跟着一个更新 |
12月 |
一个搜索后面跟着一个更新 |
删除 |
搜索后面跟着一个删除 |
flush_all |
截断表 (DDL) |
介绍配置表daemon_memcached
插件。的cache_policies
表格config_options
表,容器
表创建的innodb_memcached_config.sql
的配置脚本innodb_memcache
数据库。
mysql >使用innodb_memcache;数据库更改mysql> SHOW TABLES;+---------------------------+ | Tables_in_innodb_memcache | +---------------------------+ | cache_policies | | config_options | |容器 | +---------------------------+
的cache_policies
对象的缓存策略InnoDB
memcached
安装。可以指定单个策略得到
,集
,删除
,冲洗
操作,在单个缓存策略内。所有操作的默认设置为innodb_only
.
innodb_only
:使用InnoDB
作为数据存储。cache_only
:使用memcached引擎作为数据存储。缓存
:同时使用InnoDB
和memcached引擎作为数据存储。在这种情况下,如果memcached在内存中找不到键,它将在InnoDB
表格禁用
:禁用缓存。
表15.28 cache_policies列
列 | 描述 |
---|---|
policy_name |
缓存策略名称。默认的缓存策略名称为cache_policy . |
get_policy |
get操作的缓存策略。有效的值innodb_only ,cache_only ,缓存 ,或禁用 .默认设置为innodb_only . |
set_policy |
设置操作的缓存策略。有效的值innodb_only ,cache_only ,缓存 ,或禁用 .默认设置为innodb_only . |
delete_policy |
用于删除操作的缓存策略。有效的值innodb_only ,cache_only ,缓存 ,或禁用 .默认设置为innodb_only . |
flush_policy |
用于刷新操作的缓存策略。有效的值innodb_only ,cache_only ,缓存 ,或禁用 .默认设置为innodb_only . |
的config_options
表存储memcached可以在运行时使用SQL更改的相关设置。支持的配置选项包括分隔符
而且table_map_delimiter
.
表15.29 config_options列
列 | 描述 |
---|---|
的名字 |
的名字memcached相关的配置选项。控件支持以下配置选项config_options 表:
|
价值 |
的值memcached相关的配置选项。 |
的容器
表是三个配置表中最重要的一个。每一个InnoDB
表,用于存储memcached值中必须有一个条目容器
表格条目提供了之间的映射InnoDB
表列和容器表列,这是必需的memcached
一起工作InnoDB
表。
的容器
的默认条目test.demo_test
类创建的innodb_memcached_config.sql
配置脚本。使用daemon_memcached
自带插件InnoDB
表中创建一个条目容器
表格
表15.30容器列
列 | 描述 |
---|---|
的名字 |
给容器的名称。如果一个InnoDB 没有按名称请求表@@ 符号,daemon_memcached 插件使用InnoDB 表一个containers.name 的价值默认的 .如果没有这样的条目,则容器 表格,按字母顺序排列的名字 (升序),决定默认值InnoDB 表格 |
db_schema |
数据库的名称InnoDB 表驻留。这是一个必需的值。 |
db_table |
的名称InnoDB 表存储memcached值。这是一个必需的值。 |
key_columns |
的列InnoDB 的查找键值memcached操作。这是一个必需的值。 |
value_columns |
的InnoDB 表存储的列(一个或多个)memcached 数据。控件中指定的分隔符可以指定多个列innodb_memcached.config_options 表格默认情况下,分隔符是一个管字符(”|”).若要指定多个列,请使用已定义的分隔符分隔它们。例如:col1 | col2 | col3 .这是一个必需的值。 |
旗帜 |
的InnoDB 用作标志的表列(用户定义的数值,与主值一起存储和检索)memcached.标志值可以用作某些操作的列说明符(例如增加 ,预谋 )如果一个memcached值映射到多个列,以便在指定列上执行操作。例如,如果您映射了一个value_columns 到三InnoDB 表列,并且只希望对一个列执行增量操作,则使用旗帜 列来指定列。如果不使用旗帜 列,设置值0 表示未使用。 |
cas_column |
的InnoDB 存储比较和交换(cas)值的表列。的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
为旗帜
,cas_column
,expire_time_column
如果它们未被使用。如果不这样做,可能会导致设置失败。key_columns
: a的最大限制memcached键是250个字符,由memcached.映射的键必须是非空的字符
或VARCHAR
类型。cas_column
:中科院
取值为64位整数。它必须映射到a长整型数字
至少8个字节。如果不使用此列,请将值设置为0
表示未使用。expiration_time_column
:必须映射到整数
至少4个字节。过期时间定义为Unix时间的32位整数(自1970年1月1日以来的秒数,32位值),或者从当前时间开始的秒数。对于后者,秒数不得超过60*60*24*30(30天的秒数)。如果客户机发送的数字更大,服务器会认为它是一个真实的Unix时间值,而不是当前时间的偏移量。如果不使用此列,请将值设置为0
表示未使用。旗帜
:必须映射到整数
至少32位,可以为NULL。如果不使用此列,请将值设置为0
表示未使用。
在插件加载时执行预检查,以强制列约束。如果发现不匹配,则不加载插件。
多值列映射
在插件初始化期间,当
InnoDB
memcached中定义的信息配置了容器
中定义的每个映射列containers.value_columns
是否根据映射进行验证InnoDB
表格如果多个InnoDB
表列是映射的,有一个检查来确保每个列都存在并且是正确的类型。在运行时,
memcached
插入操作,如果分隔值多于映射列的数量,则只取映射值的数量。例如,如果有6个映射列,并且提供了7个分隔值,则只取前6个分隔值。第七个分隔值将被忽略。如果分隔值少于映射列,则将未填充列设置为NULL。如果未填充的列不能设置为NULL,则插入操作将失败。
如果表的列比映射值多,那么额外的列不会影响结果。
的innodb_memcached_config.sql
配置脚本创建一个demo_test
表中测验
数据库,可以用来验证InnoDB
memcached插件安装后立即安装。
的innodb_memcached_config.sql
配置脚本还为demo_test
表中innodb_memcache.containers
表格
SELECT * FROM innodb_memcache。容器\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 | +----+------------------+------+------+------+