Documentation Home
MySQL 8.0 参考手册  / 第 15 章 InnoDB 存储引擎  / 15.20 InnoDB 内存缓存插件  /  15.20.4 InnoDB memcached 多获取和范围查询支持

15.20.4 InnoDB memcached 多获取和范围查询支持

该插件支持多个获取操作(在单个memcacheddaemon_memcached查询中获取多个键值对 )和范围查询。

多次获取操作

在单个memcached查询 中获取多个键值对的 能力通过减少客户端和服务器之间的通信流量来提高读取性能。对于 InnoDB,这意味着更少的事务和开表操作。

以下示例演示了多重获取支持。该示例使用创建新表和列映射test.city中描述 的表。

mysql> USE test;
mysql> SELECT * FROM test.city;
+---------+-----------+-------------+---------+-------+------+--------+
| city_id | name      | state       | country | flags | cas  | expiry |
+---------+-----------+-------------+---------+-------+------+--------+
| B       | BANGALORE | BANGALORE   | IN      |     0 |    1 |      0 |
| C       | CHENNAI   | TAMIL NADU  | IN      |     0 |    0 |      0 |
| D       | DELHI     | DELHI       | IN      |     0 |    0 |      0 |
| H       | HYDERABAD | TELANGANA   | IN      |     0 |    0 |      0 |
| M       | MUMBAI    | MAHARASHTRA | IN      |     0 |    0 |      0 |
+---------+-----------+-------------+---------+-------+------+--------+

运行get命令以检索city表中的所有值。结果以键值对序列的形式返回。

telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get B C D H M
VALUE B 0 22
BANGALORE|BANGALORE|IN
VALUE C 0 21
CHENNAI|TAMIL NADU|IN
VALUE D 0 14
DELHI|DELHI|IN
VALUE H 0 22
HYDERABAD|TELANGANA|IN
VALUE M 0 21
MUMBAI|MAHARASHTRA|IN
END

在单个get 命令中检索多个值时,您可以切换表(使用 表示法)以检索第一个键的值,但不能为后续键切换表。例如,本例中的表开关是有效的: @@containers.name

get @@aaa.AA BB
VALUE @@aaa.AA 8 12
HELLO, HELLO
VALUE BB 10 16
GOODBYE, GOODBYE
END

不支持尝试在同一命令中再次切换表 get以从不同的表中检索键值。

多次获取操作可以检索的键数没有限制,但存储结果的内存限制为 128MB。

范围查询

对于范围查询,daemon_memcached插件支持以下比较运算符: <, >, <=, >=. 运算符前面必须有一个@符号。当范围查询找到多个匹配的键值对时,结果以键值对序列返回。

以下示例演示范围查询支持。这些示例使用创建新表和列映射test.city中描述 的表。

mysql> SELECT * FROM test.city;
+---------+-----------+-------------+---------+-------+------+--------+
| city_id | name      | state       | country | flags | cas  | expiry |
+---------+-----------+-------------+---------+-------+------+--------+
| B       | BANGALORE | BANGALORE   | IN      |     0 |    1 |      0 |
| C       | CHENNAI   | TAMIL NADU  | IN      |     0 |    0 |      0 |
| D       | DELHI     | DELHI       | IN      |     0 |    0 |      0 |
| H       | HYDERABAD | TELANGANA   | IN      |     0 |    0 |      0 |
| M       | MUMBAI    | MAHARASHTRA | IN      |     0 |    0 |      0 |
+---------+-----------+-------------+---------+-------+------+--------+

打开一个 telnet 会话:

telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

要获取所有大于 的值B,请输入 get @>B

get @>B
VALUE C 0 21
CHENNAI|TAMIL NADU|IN
VALUE D 0 14
DELHI|DELHI|IN
VALUE H 0 22
HYDERABAD|TELANGANA|IN
VALUE M 0 21
MUMBAI|MAHARASHTRA|IN
END

要获取所有小于 的值M,请输入 get @<M

get @<M
VALUE B 0 22
BANGALORE|BANGALORE|IN
VALUE C 0 21
CHENNAI|TAMIL NADU|IN
VALUE D 0 14
DELHI|DELHI|IN
VALUE H 0 22
HYDERABAD|TELANGANA|IN
END

要获取小于并包括 的所有值M,请输入get @<=M

get @<=M
VALUE B 0 22
BANGALORE|BANGALORE|IN
VALUE C 0 21
CHENNAI|TAMIL NADU|IN
VALUE D 0 14
DELHI|DELHI|IN
VALUE H 0 22
HYDERABAD|TELANGANA|IN
VALUE M 0 21
MUMBAI|MAHARASHTRA|IN

要获取大于B但小于的 值M,请输入get @>B@<M

get @>B@<M
VALUE C 0 21
CHENNAI|TAMIL NADU|IN
VALUE D 0 14
DELHI|DELHI|IN
VALUE H 0 22
HYDERABAD|TELANGANA|IN
END

最多可以解析两个比较运算符,一个是“小于”( @<) 或“小于或等于”( @<=) 运算符,另一个是“大于”( @>) 或“大于或等于” to' ( @>=) 运算符。假定任何其他运算符都是密钥的一部分。例如,如果您发出get带有三个运算符的命令,则第三个运算符 ( @>C) 将被视为键的一部分,并且该get命令会搜索小于M和大于的值B@>C

get @<M@>B@>C
VALUE C 0 21
CHENNAI|TAMIL NADU|IN
VALUE D 0 14
DELHI|DELHI|IN
VALUE H 0 22
HYDERABAD|TELANGANA|IN