把MySQL数据导入Redis,只需要简单的三点。
第一点: 理解Redis的协议格式。
Redis的协议为: 参数个数 + 参数长度 + 参数 。如果参数多余一个,则重复前面的(参数长度 + 参数)。
举个例子:
*3
$4
SADD
$8
all_user
$5
admin
*3
$4
SADD
$8
all_user
$7
auditor
上面的命令,其实是两条命令。第一条命令写在一行字符串内是:*3 (参数个数) + $4 (第一个参数长度)+ HSET (第一个参数) + $8 (第二个参数长度) + all_user (第二个参数) + $5 (第三个参数长度) + admin (第三个参数) 。
第二点: 理解Redis的命令,比如上面例子中用到的Redis set的命令是: SADD key member [member ...]
第三点: 把Mysql的数据select出来,并组成一个字符串给redis。这就用到了SELECT和CONCAT。同样使用上面的例子,把下面的命令写入SQL文件,就可以拼出来需要的字符串了。
select concat( "*3\r\n", '$', LENGTH(redis_cmd), '\r\n',
redis_cmd, '\r\n',
'$', LENGTH(redis_key), '\r\n',
redis_key, '\r\n',
'$', LENGTH(sval), '\r\n',
sval, '\r'
)
FROM (
select 'SADD' as redis_cmd,
'all_clients' as redis_key,
mac as sval
from client_info
) as tmp
理解了上面的三点后,就可以根据自己的需要,导入数据到redis了。最后,执行下面的命令,就可以完成导入了。
mysql -umysql -p'mysql' MYDB --skip-column-names --raw </tmp/test.sql | redis-cli --pipe