批量插入缓存数据到redis

批量插入缓存数据到redis

缓存预热就是系统上线后,提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!

如果数据量不大,在系统启动前直接灌入。比如写个php脚本或者shell脚本来完成。

我们这里看看redis有没有什么好办法?
redis有个pipe mode,可以根据redis协议的格式生成一个文件,然后导入。

假如mysql里有一张新闻表,其中有2个字段:news_idnews_title

我们根据redis协议构建字符串,比如这句话:set news101 news_title1 EX 200
拆分成redis格式就是(注意换行是\r\n):

*5 按空格拆分有几段
$3 代表set字符的长度
set
$7 代表"news101"的字符长度
news101
$11
news_title1
$2
EX
$3
200

我们把新闻表按照上面的格式组装一下:

SELECT CONCAT('*5','\r\n','$3','\r\n','set','\r\n','$',LENGTH(id)+4,'\r\n','news','id','\r\n','$',LENGTH(title),'\r\n',title,'\r\n','$2','\r\n','EX','\r\n','$3','\r\n','200','\r') from news
order by id

此查询结果,每一行就是一条符合redis协议的字符串,其中我们新闻id 拼接成”news”+id作为key,新闻标题作为value。
把查询结果导出为一个文件,比如all_news

然后利用在redis服务端执行:

cat all_news | redis-cli --pipe

这就是利用redis的pipe 执行了 set的操作。

另外的方法:
1、把上面的sql保存为news.sql
2、然后登录mysql客户端

mysql -h 192.168.88.88 -uroot -p123456 -D dbname --skip-column-names --raw < news.sql | redis-cli --pipe
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值