最近学习了Redis,想要加入到之前的项目中,之前的用的数据库是MySQL。第一步需要做的就是将MySQL数据库中现有的数据导入到Redis中,在网上查阅资料后,使用的方法是利用脚本将MySQL中的户数转换为Redis-cli可以识别的格式,直接批量插入。下面是具体的过程,碰到的问题以及解决方法。
一、具体过程
1. 表的结构:
2. 编写脚本:
根据数据表的结构,读取数据表中的数据,然后以Redis可以识别的格式将数据写入到Redis中。
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'
)
FROM (
SELECT
'HMSET' as redis_cmd,
CONCAT('userid:' ,userid) AS redis_key,
'password' AS hkey1, password AS hval1,
'name' AS hkey2, name AS hval2,
'phone_num' AS hkey3, phone_num AS hval3,
FROM users
) AS t
3.使用以下指令进行导入:
mysql -uroot -ppassword -h 127.0.0.1 database --skip-column-names --raw < /myredis/user.sql | /usr/local/bin/redis-cli -p 6379 --pipe
4.结果报错了,如下:
在网上查阅资料后发现,原来是因为:Redis中的空数据是以字符串空串的形式存储的,而MySQL中则为NULL,所以在导入到Redis的时候出错了。
解决方法:可以将数据库中为NULL的数据转换成空串,再导入到Redis中。将上面的脚本文件修改为:
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'
)
FROM (
SELECT
'HMSET' as redis_cmd,
CONCAT('userid:' ,userid) AS redis_key,
'password' AS hkey1, password AS hval1,
'name' AS hkey2, name AS hval2,
'phone_num' AS hkey3, if(phone_num is not null, phone_num, '') AS hval3,
FROM users
) AS t
5. 正确结果:
成功将MySQL数据库中user表中的107条记录导入到redis中
原文链接:https://blog.csdn.net/weixin_37782390/article/details/78909131