10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

15.20.8 InnoDB memcached插件内部信息

用于InnoDB memcached Plugin的InnoDB API

InnoDBmemcached引擎访问InnoDB通过InnoDBapi,其中大多数直接从嵌入式中采用InnoDBInnoDBAPI函数传递给InnoDBmemcached引擎作为回调函数。InnoDBAPI函数访问InnoDB表,并且大多数是DML操作,除了截断表

memcached命令通过InnoDBmemcachedAPI。下表概述了如何操作memcached命令映射到DML或DDL操作。

表15.27 memcached命令和相关的DML或DDL操作

memcached命令 DML或DDL操作
得到 读/获取命令
一个搜索后面跟着一个插入更新(取决于键是否存在)
添加 一个搜索后面跟着一个插入更新
取代 一个搜索后面跟着一个更新
附加 一个搜索后面跟着一个更新(将数据追加到前面的结果更新
预谋 一个搜索后面跟着一个更新(在结果前面加上数据更新
增加 一个搜索后面跟着一个更新
12月 一个搜索后面跟着一个更新
删除 搜索后面跟着一个删除
flush_all 截断表(DDL)

InnoDB memcached插件配置表

介绍配置表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表

cache_policies对象的缓存策略InnoDBmemcached安装。可以指定单个策略得到删除,冲洗操作,在单个缓存策略内。所有操作的默认设置为innodb_only

  • innodb_only:使用InnoDB作为数据存储。

  • cache_only:使用memcached引擎作为数据存储。

  • 缓存:同时使用InnoDBmemcached引擎作为数据存储。在这种情况下,如果memcached在内存中找不到键,它将在InnoDB表格

  • 禁用:禁用缓存。

表15.28 cache_policies列

描述
policy_name 缓存策略名称。默认的缓存策略名称为cache_policy
get_policy get操作的缓存策略。有效的值innodb_onlycache_only缓存,或禁用.默认设置为innodb_only
set_policy 设置操作的缓存策略。有效的值innodb_onlycache_only缓存,或禁用.默认设置为innodb_only
delete_policy 用于删除操作的缓存策略。有效的值innodb_onlycache_only缓存,或禁用.默认设置为innodb_only
flush_policy 用于刷新操作的缓存策略。有效的值innodb_onlycache_only缓存,或禁用.默认设置为innodb_only

config_options表

config_options表存储memcached可以在运行时使用SQL更改的相关设置。支持的配置选项包括分隔符而且table_map_delimiter

表15.29 config_options列

描述
的名字 的名字memcached相关的配置选项。控件支持以下配置选项config_options表:
  • 分隔符:当一个长字符串有多个值时,用于将一个长字符串的值分隔为多个值value_columns定义的。默认情况下,分隔符是一个|的性格。例如,如果你定义col1, col2作为值列,并定义|作为分隔符,您可以发出以下命令memcached命令来插入值col1而且col2分别为:

    设置keyx 10 0 19 valuecolx|valuecoly

    valuecol1x存储在col1而且valuecoly存储在col2

  • table_map_delimiter参数时分隔模式名和表名的字符@@键名中的符号,用于访问特定表中的键。例如,@@t1.some_key而且@@t2.some_key具有相同的键值,但存储在不同的表中。

价值 的值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散列到不同服务器的请求并在内存中缓存数据。因为InnoDBmemcached插件是与单个紧密集成的memcached进程,内存中的缓存机制由MySQL和InnoDB缓冲池,此列很少需要。如果不使用此列,请将值设置为0表示未使用。
expire_time_column InnoDB存储过期值的表列。的expire_time_column价值与方式有关memcached散列到不同服务器的请求并在内存中缓存数据。因为InnoDBmemcached插件是与单个紧密集成的memcached进程,内存中的缓存机制由MySQL和InnoDB缓冲池,此列很少需要。如果不使用此列,请将值设置为0表示该列未使用。最大过期时间定义为INT_MAX32或者2147483647秒(大约68年)。
unique_idx_name_on_key 键列上的索引的名称。它必须是唯一的索引。它可以是主键或者一个二级索引.类的主键InnoDB表格使用主键可以避免使用辅助索引时执行的查找。你不能做一个覆盖索引memcached查找;InnoDB如果试图在键列和值列上定义复合二级索引,则返回一个错误。

列约束
  • 您必须提供一个值db_schemadb_namekey_columnsvalue_columns而且unique_idx_name_on_key.指定0旗帜cas_column,expire_time_column如果它们未被使用。如果不这样做,可能会导致设置失败。

  • key_columns: a的最大限制memcached键是250个字符,由memcached.映射的键必须是非空的字符VARCHAR类型。

  • value_columns:必须映射到字符VARCHAR,或列。没有长度限制,可以为NULL。

  • 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表示未使用。

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

多值列映射
  • 在插件初始化期间,当InnoDBmemcached中定义的信息配置了容器中定义的每个映射列containers.value_columns是否根据映射进行验证InnoDB表格如果多个InnoDB表列是映射的,有一个检查来确保每个列都存在并且是正确的类型。

  • 在运行时,memcached插入操作,如果分隔值多于映射列的数量,则只取映射值的数量。例如,如果有6个映射列,并且提供了7个分隔值,则只取前6个分隔值。第七个分隔值将被忽略。

  • 如果分隔值少于映射列,则将未填充列设置为NULL。如果未填充的列不能设置为NULL,则插入操作将失败。

  • 如果表的列比映射值多,那么额外的列不会影响结果。

demo_test示例表

innodb_memcached_config.sql配置脚本创建一个demo_test表中测验数据库,可以用来验证InnoDBmemcached插件安装后立即安装。

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 | +----+------------------+------+------+------+