Redis 2 Mysql

本文介绍了在Redis和Mysql之间进行数据迁移的过程。针对Redis读取速度慢和Mysql写入慢的问题,提出了使用jedis的pipeline进行批处理以优化Redis读取,以及利用jdbc批处理加速Mysql写入的解决方案。文中还提供了代码示例,展示了如何在update不成功时执行insert操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能简介

  1. 读取Redis数据
  2. 写入Mysql数据

遇到的问题

  1. Redis读取速度慢
  2. Mysql写入速度慢
  3. Mysql的update如果不成功,需要insert

解决的方法

  1. Redis 使用jedis,及jedis的pipeline方法,进行批处理
  2. Mysql 使用jdbc的批处理

代码示例

jedis pipeline 的使用

Jedis jedis=new Jedis("yourip",port);
//jedis.auth(password);//if redis have password
Pipeline p= jedis.pipelined();
//write by pipeline
for (...){
p.hmset(key,hashmap);
}
p.sync();//提交

//read by pipeline
ArrayList<Response<List<String>>> resps= new ArrayList<>();
for(...){
Response<List<String>> resp=p.hmget(key,field);
resps.add(resp);
}
p.sync();//提交

for(Response<List<String>>resp:resps){
resp.get();//获取数据
}

mysql update 不成功,则insert实现,其实很简单,只有调用方法,返回结果,结果为0,则未成功,就表示要执行insert操作。因为第一次接触,所以也走了些弯路,当初看过存储过程,但是要在mysql预处理,在mysql上创建存储过程,也不是很方便。

String sql="update your_table set key1=?,key2=? where key3=? and key4=?;"

try (PreparedStatement preStmt = conn.prepareStatement(sql.toString())) {
            conn.setAutoCommit(false); // 设置手动提交
            for (int i=0;i<data.size();i++) {
                List<String> values=data.get(i);
                for (int j = 0; j < valueIndexs.length; j++) {
                    preStmt.setString(j + 1, values.get(valueIndexs[j]));
                }
                preStmt.addBatch();
            }
            System.out.println("批量update导入数据库....");
            long start = System.currentTimeMillis();
            //0-fail,1-success
            int[] results=preStmt.executeBatch();// 获取update的结果,如果返回为0,则需要insert;
            // preStmt.clearBatch();
            conn.commit(); // 提交
            long end = System.currentTimeMillis();
            System.out.println("批量update导入数据库时间: " + (end - start) + "ms");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值