文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

新特性解读 | mysql 8.0 memcached api 新特性

2017-07-06 08:27

关注

新特性解读 | mysql 8.0 memcached api 新特性

作者:杨涛涛 资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


本文关键字:memcached

一款优秀的缓存系统

memcache 本身是一款分布式的高速缓存系统,以 key-value 的形式常驻内存,一般用来做网站或者数据库的缓存使用。 特别是对以下场景非常适合用 memcache 来做缓存:

  1. 频繁访问的数据
  2. 安全性要求比较低的数据
  3. 更新比较频繁的小表(用户状态表、物品库存等)

MySQL memcached api

MySQL 5.6 —— 开始支持

MySQL 5.6 把 memcache 功能以插件形式集成到 MySQL 数据库中,称为 memcached api。 这样一来,memcache 的数据以 InnoDB 关系表的形式同步于磁盘,解决了 memcache 的几个问题:

  1. 解决了 memcache 的数据持久化的问题;
  2. 可以很方便的以 SQL 语句的形式直接访问 memcache 的数据;
  3. 不需要单独安装 memcache,安装 MySQL 即可使用。

MySQL 5.7 —— 深入优化

MySQL 5.7 对 memcached api 做了深入优化,官方数据显示使用 memcached api,在只读的场景中,QPS 提升到 100W。

MySQL 8.0 —— 新增特性

MySQL 8.0 发布后,又在功能上给 memcached api 增加了两个新特性。

  1. 批量获取 KEY 相比原来一次只能读取一个 Key 来讲,减少了客户端与 MySQL 服务端的数据交互次数。
  2. 可以对 KEY 进行 RANGE 操作 可以直接类似于 select * from t1 where id between 10 and 20 这样的范围检索语句。

演示

下面我们来演示下这两个新的特性,先把 memcached api 插件以及需要的示例表数据准备好。

1. 导入元数据 从 MySQL 相关目录导入 memcached api 元数据(包含配置,容器等)。

(localhost:ytt). /usr/share/mysql-8.0/innodb_memcached_config.sql
Query OK, 1 row affected (0.05 sec)

2. 安装插件 第一次需要手动安装 memcached 插件。

(localhost:test)INSTALL PLUGIN daemon_memcached soname "libmemcached.so";
Query OK, 0 rows affected (0.08 sec)

再次确认 memcached 插件安装成功。

(localhost:information_schema)select * from information_schema.plugins where plugin_name = "daemon_memcached"G
*************************** 1. row ***************************
           PLUGIN_NAME: daemon_memcached
        PLUGIN_VERSION: 1.0
         PLUGIN_STATUS: ACTIVE
           PLUGIN_TYPE: DAEMON
   PLUGIN_TYPE_VERSION: 80020.0
        PLUGIN_LIBRARY: libmemcached.so
PLUGIN_LIBRARY_VERSION: 1.10
         PLUGIN_AUTHOR: Oracle Corporation
    PLUGIN_DESCRIPTION: Memcached Daemon
        PLUGIN_LICENSE: GPL
           LOAD_OPTION: ON
1 row in set (0.00 sec)

3. 准备数据 建立一张示例表 t1。

注意:表主键对应 memcached api 的 Key,除主键外的其他字段只能整型或者字符类型,剩下的 flags,cas,expiry 是规定死的字段。

(localhost:ytt)create table t1 (
  id serial primary key, 
  r1 int,
  r2 int,
  r3 varchar(20), 
  flags int,
  cas bigint unsigned, 
  expiry int);
Query OK, 0 rows affected (0.05 sec)

目前插入的一些示例数据。

(localhost:ytt)select * from t1;
+----+------+------+---------------------+-------+------+--------+
| id | r1   | r2   | r3                  | flags | cas  | expiry |
+----+------+------+---------------------+-------+------+--------+
|  1 |    2 |    9 | 2040-01-20 07:29:47 |     0 |    0 |      0 |
|  2 |    7 |    1 | 2037-12-25 22:43:52 |     0 |    0 |      0 |
|  3 |    2 |   18 | 2049-04-15 07:05:35 |     0 |    0 |      0 |
|  4 |    8 |    5 | 2048-08-17 23:38:39 |     0 |    0 |      0 |
|  6 |    9 |   11 | 2043-02-13 11:05:28 |     0 |    0 |      0 |
|  7 |    2 |    5 | 2049-03-25 20:27:01 |     0 |    0 |      0 |
|  8 |    7 |   13 | 2032-12-11 05:21:01 |     0 |    0 |      0 |
|  9 |    1 |    7 | 2028-03-29 03:06:18 |     0 |    0 |      0 |
| 13 |    6 |   12 | 2021-11-22 11:24:06 |     0 |    0 |      0 |
| 14 |    4 |   20 | 2035-12-14 13:23:55 |     0 |    0 |      0 |
| 15 |   10 |   15 | 2030-03-24 17:09:34 |     0 |    0 |      0 |
| 16 |    8 |   15 | 2022-10-21 09:31:45 |     0 |    0 |      0 |
| 17 |    3 |    3 | 2034-07-20 09:52:18 |     0 |    0 |      0 |
| 18 |    9 |   19 | 2020-06-25 05:08:37 |     0 |    0 |      0 |
| 19 |    1 |    7 | 2041-08-29 11:35:06 |     0 |    0 |      0 |
| 20 |    6 |   14 | 2031-04-25 01:05:20 |     0 |    0 |      0 |
+----+------+------+---------------------+-------+------+--------+
16 rows in set (0.00 sec)

4. 使用插件 让 memcached 插件能识别表 ytt.t1,插入一条记录到 memcache 容器表。

(localhost:ytt)insert into innodb_memcache.containers(
    name, 
    db_schema, 
    db_table, 
    key_columns, 
    value_columns, 
    flags, 
    cas_column, 
    expire_time_column, 
    unique_idx_name_on_key
  ) -> values (
    "default", 
    "ytt", 
    "t1", 
    "id", 
    "r1|r2|r3",  
    "flags",
    "cas",
    "expiry",
    "primary");
Query OK, 1 row affected (0.01 sec)

5. 读取数据 重启 memcached 插件,让其识别刚才的数据。

(localhost:ytt)UNINSTALL PLUGIN daemon_memcached;
Query OK, 0 rows affected (2.02 sec)

(localhost:ytt)INSTALL PLUGIN daemon_memcached soname "libmemcached.so";
Query OK, 0 rows affected (0.01 sec)

MySQL 5.7 操作 memcached api ,只可以一次获取单个 key。比如要获取 id 为(1,2,3,4,5,6)的记录,需要重复 get 6 次。

root@ytt-unbuntu:/data/mysql57/data# telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is "^]".
get 1
VALUE 1 0 23
2|9|2040-01-20 07:29:47
END
get 2
VALUE 2 0 23
7|1|2037-12-25 22:43:52
END
get 3
VALUE 3 0 24
2|18|2049-04-15 07:05:35
END
get 4
VALUE 4 0 23
8|5|2048-08-17 23:38:39
END
get 5
END
get 6
VALUE 6 0 24
9|11|2043-02-13 11:05:28
END

想一次性获取多个 KEY,直接报错!

get 1 2 3 4 5 6
We temporarily don"t support multiple get option.

MySQL 8.0 操作 memcached api, 可以一次性获取多个 Key。比如同样要获取 id 为(1,2,3,4,5,6)的记录,只需要 get 1 次即可。

root@ytt-unbuntu:/home/ytt# telnet localhost 11222
Trying 127.0.0.1...
Connected to localhost.
Escape character is "^]".

get 1 2 3 4 5 6
VALUE 1 0 23
2|9|2040-01-20 07:29:47
VALUE 2 0 23
7|1|2037-12-25 22:43:52
VALUE 3 0 24
2|18|2049-04-15 07:05:35
VALUE 4 0 23
8|5|2048-08-17 23:38:39
VALUE 6 0 24
9|11|2043-02-13 11:05:28
END

也支持范围获取,比如同样 get id 为(1,2,3,4,5,6)的所有记录,只需要 get @<=6 即可:

get @<=6

再次获取 id 大于10 的记录:

get @>10

获取 ID 大于 10 并且小于 20 的记录:

get @>10@<20

不过目前 MySQL 8.0 对 memcache 的范围支持比较简单,只支持最多一个范围,多个范围暂时不支持。

get @>2@<3@<10
END

这样的是没有结果的,MySQL 此时把这个检索变为 id 大于 2 并且小于 "3@<10",这样很明显没有记录。

总结

本篇介绍了 MySQL memcached api 使用场景以及在 MySQL 8.0 下新特性使用例子,希望对大家有帮助。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯