• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • InnoDB memcached多次获取和范围查询支持

    daemon_memcached插件支持多种get操作(在单个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
    

    最多可解析两个比较运算符,一个是“小于”(@<)或“小于或等于”(@<=)运算符,另一个是“大于”(@>)或“大于或等于”运算符到(@>=)运算符。假定任何其他运算符都是键的一部分。例如,如果您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