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