
# 开启和使用内存加速
本章节主要介绍如何开启内存加速功能，主要流程如下：
[步骤1：选取GeminiDB实例]
[步骤2：创建映射]
[步骤3：使用示例]
#### 注意事项
- 内存加速开启后，不允许在MySQL实例执行RESET MASTER、FLUSH LOGS等删除binlog的命令。
- 目前仅支持MySQL到GeminiDB Redis接口Hash类型的转换。
- 新规则的Redis键前缀+键分隔符不能是已有规则的Redis键前缀+键分隔符的子前缀，反之亦然。例如新规则的前缀为 "pre1:"，键分隔符为 "," ，老规则前缀为 "pre1"，分隔符为":"， 这种情况不允许创建新规则。
- 暂不支持ENUM、SET、JSON三种数据类型的同步。
- 由于是轻量级增量数据同步，目前仅支持单表查询，暂不支持联合查询。
- 目前仅GeminiDB Redis实例收费，该功能没有其他额外费用。
- 如果您删除了RDS实例，不会同步删除搭建DBcache的GeminiDB Redis实例，如不再使用，请及时删除GeminiDB Redis实例，避免产生额外费用。
- 您购买RDS实例时，如果"内存加速"参数，选择了"立即购买"，则会自动购买GeminiDB实例搭建DBcache，您可以跳过创建GeminiDB实例步骤，直接从[创建映射]开始使用。
 
#### 操作步骤
#### 步骤1：选取GeminiDB实例
1. 登录[云数据库RDS控制台](https://console.huaweicloud.com/rds/?#/rds/management/overview)。
2. 单击管理控制台左上角的![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000001887910936.png)，选择区域和项目。
3. 在"实例管理"页面，单击目标实例名称，进入"概览"页面。
4. 在左侧导航栏选择"内存加速"，进入"内存加速"页面，单击"创建GeminiDB实例"或者"选择已有GeminiDB实例"。 
   - 单击"创建GeminiDB实例"，并执行[5]。
   
   - 单击"选择已有GeminiDB实例"选择已有的GeminiDB Redis实例。
     ![](https://support.huaweicloud.com/usermanual-rds-mysql/public_sys-resources/note_3.0-zh-cn.png)
     选择"选择已有GeminiDB实例"时，当前仅支持主备版类型实例，并且Region、VPC，子网、安全组等参数需要与当前RDS实例一致。
     
   
   
   
   
5. 参见[表1]选择并填写实例相关信息后，单击"提交"，完成实例创建。
   
    表1基本信息 
   | 参数           | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   |:---|:---|
   | GeminiDB实例规格 | 实例的CPU和内存，详细规格见[表2]。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | 数据库端口        | 数据库的访问端口号。 GeminiDB Redis支持自定义端口号，取值范围为：1024\~65535，其中，如下端口号为禁用端口：2180、2887、3887、6377、6378、6380、8018、8079、8091、8479、8484、8999、12017、12333、50069。 当您不指定端口时，创建实例的访问端口默认为6379。 说明： 暂时不支持实例创建成功后修改端口。                                                                                                                                                                                                  |
   | 实例名称         | 设置实例名称时，需要满足如下规则。 - 实例名称允许与已有名称相同。  - 实例名称长度在4个到64个字节之间，必须以字母或中文字开头，区分大小写，可以包含字母、数字、中划线、下划线或中文（一个中文字符占用3个字节），不能包含其他特殊字符。                                                                                                                                                |
   | 数据库密码        | 用户设置的数据库密码。 - 长度为8～32个字符。  - 必须是大写字母、小写字母、数字、特殊字符中至少两种的组合，其中可输入\~!@#%\^\*-_=+?特殊字符。  - 系统会进行弱密码校验，安全起见，请输入高强度密码。   请妥善管理您的密码，因为系统将无法获取您的密码信息。 |
   | 确认密码         | 必须和数据库密码一致。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
      
   ![](https://support.huaweicloud.com/usermanual-rds-mysql/public_sys-resources/note_3.0-zh-cn.png)
   Region、可用区、VPC，子网等参数默认与当前RDS实例一致。
    表2GeminiDB实例规格 
   | **实例存储容量（GB）** | **节点数量** | **vCPU（个）** | **QPS基准** | **单节点实例的最大连接数** | **实例DB数** |
   |:---|:---|:---|:---|:---|:---|
   | 16             | 2        | 1           | 10,000    | 10,000          | 1,000     |
   | 24             | 2        | 2           | 20,000    | 10,000          | 1,000     |
   | 32             | 2        | 2           | 20,000    | 10,000          | 1,000     |
   | 48             | 2        | 4           | 40,000    | 20,000          | 1,000     |
   | 64             | 2        | 4           | 40,000    | 20,000          | 1,000     |
   | 96             | 2        | 8           | 80,000    | 20,000          | 1,000     |
   | 128            | 2        | 16          | 160,000   | 20,000          | 1,000     |
      
   
   
 
#### 步骤2：创建映射
1. 登录[云数据库RDS控制台](https://console.huaweicloud.com/rds/?#/rds/management/overview)。
2. 单击管理控制台左上角的![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002119589296.png)，选择区域和项目。
3. 在"实例管理"页面，单击目标实例名称，进入"概览"页面。
4. 在左侧导航栏选择"内存加速"，在"映射规则"区域单击"创建映射规则"。 
   图1映射规则   
   ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002155067577.png "点击放大")
   
   
5. 在"创建映射规则"页面，填写并选择相关信息。 
   1. 配置规则名称。
      规则名称：设置映射规则名称。规则名称不能包含#和中文，长度不超过256个字符，且规则名称在同一个GeminiDB实例中不可重复。
      图2规则名称   
      ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002119747400.png) 
   
   2. 源实例配置。
      - 数据库名：选择需要加速实例的数据库。
      
      - 表名：选择需要加速实例中的表。
      
      
      图3源实例配置   
      ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002119589300.png "点击放大") 
   
   3. 加速实例端配置。
      - Redis键前缀：可选。默认的前缀格式为"数据库名:数据表名:字段名1:字段名2..."，长度不超过1024个字符。如果用户自定义了Redis键前缀，那么以自定义前缀为准。
      
      - 值存储类型：缓存的数据类型，当前仅支持Hash。
      
      - DB号（0-999）：加速实例中保存缓存数据的DB号，默认为0。
      
      - TTL（单位：秒，默认值为30天。）：加速实例中缓存数据的过期时间，默认30天（2592000秒），输入-1为不过期。
      
      - 键分隔符：Redis键前缀与键（Key）、以及键（Key）各字段之间的分隔符，长度为1个字符。
      
      
      图4加速实例端配置   
      ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002154989173.png "点击放大")
      
      
   
   4. 单击"键（Key）设置"，选择加速实例的键（Key）字段，单击"确定"。
      ![](https://support.huaweicloud.com/usermanual-rds-mysql/public_sys-resources/note_3.0-zh-cn.png)
      如果加速实例键（Key）由多个源实例字段组成，那么需要具备唯一性（这些字段在MySQL实例中要能成功创建出唯一索引）；可以单击"上移"和"下移"调整各字段在键（Key）中的先后顺序。
      图5键（Key）设置   
      ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002155067581.png "点击放大")
      设置完成后，会在界面中显示键（Key）的构成方式，如下图所示：
      图6键（Key）   
      ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002119747404.png) 
   
   5. 配置加速实例的域-值。
      将源实例中需要的字段，右移到加速实例的字段中。
      图7配置加速实例字段   
      ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002119589304.png "点击放大") 
   
   6. 配置信息填写完成后，单击"提交"，完成映射规则创建。
   
   
   
   
 
#### 步骤3：使用示例
1. 在源实例MySQL中创建一个db1数据库，并在db1中创建一个students表，具体的 SQL 如下：
   ```
   mysql> CREATE DATABASE db1;
   Query OK, 1 row affected (0.00 sec)
   mysql> CREATE TABLE db1.students(
          sid INT UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
          sname VARCHAR(20),
          sclass INT,
          sgender VARCHAR(10),
          sbirthday DATE
          );
   Query OK, 0 rows affected (0.00 sec)
   mysql> DESC db1.students;
   +-----------+--------------+------+-----+---------+----------------+
   | Field     | Type         | Null | Key | Default | Extra          |
   +-----------+--------------+------+-----+---------+----------------+
   | sid       | int unsigned | NO   | PRI | NULL    | auto_increment |
   | sname     | varchar(20)  | YES  |     | NULL    |                |
   | sclass    | int          | YES  |     | NULL    |                |
   | sgender   | varchar(10)  | YES  |     | NULL    |                |
   | sbirthday | date         | YES  |     | NULL    |                |
   +-----------+--------------+------+-----+---------+----------------+
   5 rows in set (0.00 sec)
   ```
   
2. 建表后，在"内存加速"界面，创建一条映射规则，将students表中的每一行转换为一个Redis Hash。该Hash的键（Key）由"数据库名:数据表名:sid:\<sid的值\>"构成，域-值由选中的"sname，sclass，sgender，sbirthday"构成。
   图8配置映射规则   
   ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002154990749.png "点击放大") 
3. 映射规则创建成功后，可以查看映射规则及映射信息。
   图9映射信息   
   ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002119748976.png "点击放大") 
4. 在MySQL实例侧对students表插入一条新数据：
   ```
   mysql> INSERT INTO db1.students (sname, sclass, sgender, sbirthday) VALUES ('zhangsan', 1, 'male', '2015-05-20');
   Query OK, 1 row affected (0.01 sec)
   mysql> SELECT * FROM db1.students;
   +-----+----------+--------+---------+------------+
   | sid | sname    | sclass | sgender | sbirthday  |
   +-----+----------+--------+---------+------------+
   |   1 | zhangsan |      1 | male    | 2015-05-20 |
   +-----+----------+--------+---------+------------+
   1 row in set (0.00 sec)
   ```
   
5. 由于映射规则的存在，会把该数据自动同步到GeminiDB实例中。此时在GeminiDB实例中执行命令即可查询到该数据：
   ```
   127.0.0.1:6379> KEYS *
   1) "db1:students:sid:1"
   127.0.0.1:6379> HGETALL db1:students:sid:1
   1) "sbirthday"
   2) "2015-05-20"
   3) "sclass"
   4) "1"
   5) "sgender"
   6) "male"
   7) "sname"
   8) "zhangsan"
   ```
   
6. 在MySQL实例侧对students表再次插入一条新数据：
   ```
   mysql> INSERT INTO db1.students (sname, sclass, sgender, sbirthday) VALUES ('lisi', 10, 'male', '2015-05-22');
   Query OK, 1 row affected (0.00 sec)
   mysql> SELECT * FROM db1.students;
   +-----+----------+--------+---------+------------+
   | sid | sname    | sclass | sgender | sbirthday  |
   +-----+----------+--------+---------+------------+
   |   1 | zhangsan |      1 | male    | 2015-05-20 |
   |   2 | lisi     |     10 | male    | 2015-05-22 |
   +-----+----------+--------+---------+------------+
   2 rows in set (0.00 sec)
   ```
   
7. 新数据会被同步到GeminiDB实例中：
   ```
   127.0.0.1:6379> KEYS *
   1) "db1:students:sid:1"
   2) "db1:students:sid:2"
   127.0.0.1:6379> HGETALL db1:students:sid:2
   1) "sbirthday"
   2) "2015-05-22"
   3) "sclass"
   4) "10"
   5) "sgender"
   6) "male"
   7) "sname"
   ```
   
8. 在 MySQL实例侧对students表执行更新数据操作：
   ```
   mysql> UPDATE db1.students SET sclass=12, sname='wangwu' WHERE sid = 1;
   Query OK, 1 row affected (0.00 sec)
   Rows matched: 1  Changed: 1  Warnings: 0
   mysql> SELECT * FROM db1.students;
   +-----+--------+--------+---------+------------+
   | sid | sname  | sclass | sgender | sbirthday  |
   +-----+--------+--------+---------+------------+
   |   1 | wangwu |     12 | male    | 2015-05-20 |
   |   2 | lisi   |     10 | male    | 2015-05-22 |
   +-----+--------+--------+---------+------------+
   2 rows in set (0.00 sec)
   ```
   
9. 在GeminiDB实例中查看数据被更新：
   ```
   127.0.0.1:6379> KEYS *
   1) "db1:students:sid:1"
   2) "db1:students:sid:2"
   127.0.0.1:6379> HGETALL db1:students:sid:1
   1) "sbirthday"
   2) "2015-05-20"
   3) "sclass"
   4) "12"
   5) "sgender"
   6) "male"
   7) "sname"
   8) "wangwu"
   ```
   
10. 在MySQL实例侧对students表执行删除数据操作：
    ```
    mysql> DELETE FROM db1.students WHERE sid = 1;
    Query OK, 1 row affected (0.00 sec)
    mysql> SELECT * FROM db1.students;
    +-----+-------+--------+---------+------------+
    | sid | sname | sclass | sgender | sbirthday  |
    +-----+-------+--------+---------+------------+
    |   2 | lisi  |     10 | male    | 2015-05-22 |
    +-----+-------+--------+---------+------------+
    1 row in set (0.00 sec)
    ```
    
11. 在 GeminiDB实例中查看数据被删除：
    ```
    127.0.0.1:6379> KEYS *
    1) "db1:students:sid:2"
    ```
    
 
