Mysql到Redis数据的迁移,可以使用“管道输出”的方式把mysql命令行产生的迁移数据内容转换为Redis可识别的格式直接传递给redis-cli,redis-cli命令行工具有一个批量插入模式,是专门为批量执行命令设计的。关键就是把Mysql查询的内容格式化成redis-cli可用的数据格式。
准备在每行数据中执行的redis命令如下:
HSET stock [id] [CONCAT(t.sku_code, ':', t.tax_cost_price, ':', t.wh_name)]
按照以上redis命令规则,创建一个events_to_redis.sql文件,内容是用来生成redis数据协议格式的SQL:
SELECT CONCAT( "*4\r\n", '$', LENGTH(redis_cmd), '\r\n', redis_cmd, '\r\n', '$', LENGTH(redis_key), '\r\n', redis_key, '\r\n', '$', LENGTH(hkey), '\r\n', hkey, '\r\n', '$', LENGTH(hval), '\r\n', hval, '\r' )FROM ( SELECT 'HSET' AS redis_cmd, 'stock' AS redis_key, t.id AS hkey, CONCAT(t.sku_code, ':', t.tax_cost_price, ':', t.wh_name) AS hval FROM erp_purchasemanager_stock t) AS t
命令执行:
mysql stats_db --skip-column-names --raw < events_to_redis.sql | redis-cli --pipe