该插件支持多个获取操作(在单个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