在完成添加Tair緩存節點、創建Tair緩存節點賬號以及創建Tair自定義連接地址操作后,您需要配置表映射關系,明確PolarDB數據庫中的表到Tair緩存節點的Redis協議的KV(Key-Value)結構或者KKV(Key-Key-Value)結構,從而使Tair緩存節點按照您的業務預期來提供緩存能力。
前提條件
已通過創建的Tair自定義連接地址連接到PolarDB數據庫集群。
配置說明
目前映射配置支持String映射和Hash映射兩種模式。在此之前,我們來了解一下系統表。
系統表介紹
為了在PolarDB中實現Tair緩存一體化的能力,PolarDB預置了如下系統表:
-- system table, create by default, mysql
-- string映射模式的系統表
CREATE TABLE mysql.`tair_string_containers` (
`name` varchar(50) NOT NULL COMMENT '映射的唯一名,用于唯一確定一個映射',
`db_schema` varchar(250) NOT NULL COMMENT '映射的表所在的db',
`db_table` varchar(250) NOT NULL COMMENT '映射表',
`key_column` varchar(250) NOT NULL COMMENT '映射的key使用的列',
`value_column` varchar(250) NOT NULL COMMENT '映射的value使用的列',
`unique_idx_name_on_key` varchar(250) NOT NULL COMMENT '使用的索引名,因為tair不感知所有的索引,也不使用優化器,因此需要手動指定索引',
PRIMARY KEY (`name`)
);
-- hash映射模式的系統表
CREATE TABLE IF NOT EXISTS `tair_hash_containers` (
`name` varchar(50) NOT NULL COMMENT '映射的唯一名,用于唯一確定一個映射',
`db_schema` varchar(250) NOT NULL COMMENT '映射的表所在的db',
`db_table` varchar(250) NOT NULL COMMENT '映射表',
`key_column` varchar(250) NOT NULL COMMENT '映射的key使用的列',
`value_column` varchar(250) NOT NULL COMMENT '映射的value使用的列',
`unique_idx_name_on_key` varchar(250) NOT NULL COMMENT '使用的索引名,因為tair不感知所有的索引,也不使用優化器,因此需要手動指定索引',
PRIMARY KEY (`name`)
);
支持的字段數據類型如下:
key | value | |
TINYINT | 支持 | 支持 |
SMALLINT | 支持 | 支持 |
MEDIUMINT | 暫未支持 | 暫未支持 |
INT或INTEGER | 支持 | 支持 |
BIGINT | 支持 | 支持 |
FLOAT | 無意義,不支持 | 支持 |
DOUBLE | 無意義,不支持 | 支持 |
DECIMAL | 暫未支持 | 暫未支持 |
CHAR | 支持 | 支持 |
VARCHAR | 支持 | 支持 |
TINYBLOB | 支持,不建議 | 支持 |
TINYTEXT | 支持,不建議 | 支持 |
BLOB | 支持,不建議 | 支持 |
TEXT | 支持,不建議 | 支持 |
MEDIUMBLOB | 支持,不建議 | 支持 |
MEDIUMTEXT | 支持,不建議 | 支持 |
LONGBLOB | 暫未支持 | 暫未支持 |
LONGTEXT | 暫未支持 | 暫未支持 |
(推薦)模式一:String映射
為了保證更好的使用體驗,建議您優先選擇String映射模式進行配置。
String映射支持在具有讀寫權限的表中,使用KV結構,將一個column作為key,一個column作為value。
為保證key的唯一性,選擇作為key的column,需要事先創建索引unique_idx_name_on_key
。
以下通過一個示例,帶您了解如何通過SQL配置String映射:
CREATE database test_db;
use test_db
CREATE TABLE `test` (
`key` varchar(50) NOT NULL,
`value` varchar(50) DEFAULT NULL,
`value2` varchar(50) DEFAULT NULL,
PRIMARY KEY (`key`)
);
insert into mysql.tair_string_containers values ("example", "test_db", "test", "key", "value", "PRIMARY");
insert into test values ("k", "v", "v2");
FLUSH TAIR;
從Tair緩存節點以Redis協議讀取數據時,需要以設置的name作為key的前綴,并使用@
分隔。例如:
redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> get example@k
"v"
模式二:Hash映射
Hash映射符合Redis Hash結構用法,支持在具有讀寫權限的表中,使用KKV結構,將一個column作為key,多個column的字段名作為field,column的數據作為子field的value。
為保證key的唯一性,選擇作為key的column,需要事先創建索引unique_idx_name_on_key
。
以下通過一個示例,帶您了解如何通過SQL配置Hash映射:
CREATE database test_db;
use test_db
CREATE TABLE `test` (
`key` varchar(50) NOT NULL,
`value` varchar(50) DEFAULT NULL,
`value2` varchar(50) DEFAULT NULL,
PRIMARY KEY (`key`)
);
insert into mysql.tair_hash_containers values ("hexample", "test_db", "test", "key", "value,value2", "PRIMARY");
insert into test values ("k", "v", "v2");
FLUSH TAIR;
從Tair緩存節點以Redis協議讀取數據時,需要以設置的name作為key的前綴,并使用@
分隔。例如:
redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> hget hexample@k value2
"v2"
127.0.0.1:6379> hget hexample@k value
"v"
多column組成key
當前String映射模式和Hash映射模式都支持多column組成key。您只需要在key_column
中傳入多個逗號分隔的column名稱即可。
為了保證key的唯一性,選擇作為key的column,需要創建unique_idx_name_on_key
索引覆蓋所有的key_column。
以下通過一個示例,帶您了解如何通過SQL配置多column組成key:
CREATE database test_db;
use test_db
CREATE TABLE `test` (
`user` varchar(50) NOT NULL,
`phone` varchar(50) NOT NULL,
`value` varchar(50) DEFAULT NULL,
`value2` varchar(50) DEFAULT NULL,
);
ALTER TABLE test ADD UNIQUE INDEX idx_user_phone (user, phone);
insert into mysql.tair_hash_containers values ("hexample", "test_db", "test", "user,phone", "value,value2", "idx_user_phone");
insert into test values ("test_user", "13600001234", "v", "v2");
FLUSH TAIR;
從Tair緩存節點以Redis協議讀取數據時,需要拼接多個key_column,并使用#
分隔。例如:
redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> hget hexample@test_user#13600001234 value2
"v2"
127.0.0.1:6379> hget hexample@test_user#13600001234 value
"v"
問題排查
添加映射后,執行如下命令以刷新配置:
FLUSH TAIR;
刷新配置后,有些配置可能無法刷新成功,此時可以使用如下命令,查看對應的錯誤日志:
show warnings;
后續操作
在完成表映射關系配置后,您就可以連接到PolarDB數據庫集群,并發出Redis命令以使用Tair緩存節點提供的功能。