一,问题
这段时间学完了Redis,因为Redis是基于内存的数据库,它查询数据的速度比查询mysql要快,因此,下一步,我就需要将mysql上的数据导入到Redis中。
二,解决方案
2.1 mysql数据导入redis的原理
利用redis持久化方式中的AOF方式,我们将mysql的数据查询出来,同时让数据与一些符号进行拼接,得到一个类似AOF文件的内容。我们将该内容交给redis去执行,那样子数据就能导入进去了。
2.2 实现过程
①数据库表
②将数据库表中数据与其他符号进行拼接,仿造AOF文件的格式
建立一个user.sql文件,文件内容如下:
SELECT CONCAT(
"*12\r\n",
'$', LENGTH(redis_cmd),'\r\n',redis_cmd,'\r\n','$',LENGTH(redis_key),'\r\n',redis_key,'\r\n',
'$', LENGTH(hkey1), '\r\n', hkey1, '\r\n','$', LENGTH(hval1), '\r\n', hval1, '\r\n'
'$', LENGTH(hkey2), '\r\n', hkey2, '\r\n','$', LENGTH(hval2), '\r\n', hval2, '\r\n'
'$', LENGTH(hkey3), '\r\n', hkey3, '\r\n','$', LENGTH(hval3), '\r\n', hval3, '\r\n'
'$', LENGTH(hkey4), '\r\n', hkey4, '\r\n','$', LENGTH(hval4), '\r\n', hval4, '\r\n'
'$', LENGTH(hkey5), '\r\n', hkey5, '\r\n','$', LENGTH(hval5), '\r\n', hval5, '\r'
)
FROM (
SELECT
'HMSET' as redis_cmd,
CONCAT('userID:' ,userID) AS redis_key,
'userName' AS hkey1, userName AS hval1,
'password' AS hkey2, password AS hval2,
'nickName' AS hkey3, if(nickName is not null, nickName, '') AS hval3,
'userFace' AS hkey4, if(userFace is not null, userFace, '') AS hval4,
'userType' AS hkey5, userType AS hval5
FROM user
) AS t
user.sql文件开头中的12,我百度了一下,有人说这是表示这个数组的长度为12,而这个数组是用来存储数据的。大家可以数一下符号$的个数,刚好与12相同。
③将上面的user.sql文件放到linux系统下
④执行linux命令去执行user.sql文件,导入数据
mysql -uroot -p123 -hwww.baidu.com testmysql --default-character-set=utf8
--