今天教大家一个这个玩意,怎么写mysql_to_redis的一个批量脚本。

本文介绍了如何通过SQL脚本将MySQL数据同步到Redis,利用`redis-cli --pipe`命令进行批量导入。作者分享了一个自编的SQL脚本示例,用于将MySQL的账户表数据转化为Redis的HMSET命令格式,并通过bash脚本执行导入操作。文中还提到了Redis的数据存储能力,并强调在实际开发中了解Redis的异步写入和读取的重要性。
摘要由CSDN通过智能技术生成

应用:平常在使用redis 跟mysql做数据同步的时候, 难免会用到这些东西。从mysql里面查询数据,然后塞入到redis里面。适用在大数据预加载数据,批量导入。算是间接的一种调用方法。启动之前,就直接把msql数据,同步到了redis里面。

       其实就是个sql文件,不过这样写,我还是觉得沙雕了点。完全可以用一些批量转换的工具,找了一圈发现没有。或者好用的,总是有各种欠缺。所以最后我还是用回了这个。git上有一个用go写的(go-mysql-transfer),用了一下,感觉还是差强人意。有用go的可以试试。下面看下这个脚本怎么写,根据一些官方的提示,协议约定。大致就长下面我写的这样。

SELECT CONCAT( 
  "*20\r\n",  -- *表示数组,20表示有10个元素个数*,大概类似就是元素个数X2,得到上面这个数字。\r\n是linux中分隔符,这个数字根据下面红底字段数量进行调整
  '$',  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\n',
  '$',	 LENGTH(hkey6),		 '\r\n',	 hkey6,	'\r\n',	'$',	LENGTH(hval6),		'\r\n',	hval6,	'\r\n',
  '$',	 LENGTH(hkey7),		 '\r\n',	 hkey7,	'\r\n',	'$',	LENGTH(hval7),		'\r\n',	hval7,	'\r\n',
  '$',	 LENGTH(hkey8),		 '\r\n',	 hkey8,	'\r\n',	'$',	LENGTH(hval8),		'\r\n',	hval8,	'\r\n',
  '$',	 LENGTH(hkey9),		 '\r\n',	 hkey9,	'\r\n',	'$',	LENGTH(hval9),		'\r\n',	hval9,	'\r'    --这是结束,没有\n
  -- '$',	 LENGTH(hkey10),		 '\r\n',	 hkey10,	\r\n',	$',	LENGTH(hval10),		\r\n',	hval10,	\r', 
)  
FROM (  
  SELECT  
  'HMSET' as redis_cmd,  --这里用了hmset命令,可以一对多。
  CONCAT('id:' ,id) AS redis_key,  --这里表示使用命名空间,id为主键索引 ,下面的字段就是对应上面hkey与hval。
  'name' AS hkey1, name AS hval1,
  'password' AS hkey2, password AS hval2,
  'lastsvrid1'  AS 	hkey3, 	if(lastsvrid1 is not null, lastsvrid1, '') AS 	hval3,							
  'lastsvrid2'  AS 	hkey4, 	if(lastsvrid2 is not null, lastsvrid2, '') AS 	hval4,							
  'channel'    	AS 	hkey5, 	if(channel is not null, channel, '') AS 	hval5,							
  'logincount' 	AS 	hkey6, 	if(logincount is not null, logincount, '') AS 	hval6,							
  'create_time' 	AS 	hkey7, 	if(create_time is not null, create_time, '') AS 	hval7,							
  'seal_end_time' 	AS 	hkey8, 	if(seal_end_time is not null, seal_end_time, '') AS 	hval8,							
  'seal_describle'	AS 	hkey9, 	if(seal_describle is not null, seal_describle, '') AS 	hval9  --结束没有 逗号
  FROM account      --表名
) AS t;

首先随便命名一个文件,点后缀叫啥,无所谓(.sql,.txt,.csv都行)为了方便查看效果,我就用.sql了。打开记事本,开始编写。有些需要注意的地方,多少都注释到了。下面是一些,细节上的东西。想了解的可以看看。 不想看的直接拷走哪去运行也可以。

写好这个查询文件之后,保存。就类似有一个这样的文件。

 再写一个bash文件,就可以运行 。省了每次都去命令行敲了。新建一个sh文件。我是在ubuntu写的。

关键点,就是用到了。redis-cli --pipe  这个redis官方提供的管道命令。使用ta来进行数据传入导入。这是官方网址Redis Mass Insertion – Redis 可以看下。redis 的hkey,hval 说好像可以存50多亿个键值对。啊, 行吧!演示下我的导入数据结果。数据库里,我放了account的账户表,里面有三条数据。在ubuntu控制台,用root用户执行,我们上面写的shell。显示了replies:3说明成功导入了三条数据。打开redis,查看下

ok了,这就没有问题。数据成功导入进来了。

如今开发使用redis都是异步的。所以侧重点,多了解一下关于redis异步的写入读取,阻塞同步下会有什么问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yewencc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值