java里面怎么把redis的数据转存到mysql表里面

java里面怎么整,我现在可以读取到redis里面的内容了,项目需要把别人家的redis里面的数据存到自己本地的mysql里面,网上搜的持久化好像不太行,有大手子指导一下吗,特别是字段匹配问题。

package com.pxjy.crm;
import java.util.Date;
import java.util.Iterator;
import java.util.Set;

import redis.clients.jedis.Jedis;

public class RedisPersistence {
/**
* 存储所有的redis对象方法
/
public static void saveAllRedis(final String redisIp,final int redisPort,final String appCode) {
// 连接redis
Jedis redis = new Jedis(redisIp, redisPort);
// redis.auth("redis");//验证密码
// KEY操作 列出所有的key,查找特定的key如:redis.keys("foo")
Set<?> keys = redis.keys("
");
Iterator<?> t1 = keys.iterator();
while (t1.hasNext()) {
Object obj1 = t1.next();
saveRedisObject(redis, obj1 + "", redisIp, redisPort + "", appCode);
}
}

/**
 * 存储单个对象
 * @param redis
 * @param redisKey
 * @param macIp
 * @param port
 * @param appCode
 */
private static void saveRedisObject(final Jedis  redis,final String redisKey,final String macIp,final String port,final String appCode) {
    String redisType = redis.type(redisKey);
    RedisTable redisTable = new RedisTable();
    redisTable.setAppCode(appCode);
    redisTable.setCreateTime(new Date());
    redisTable.setMacIp(macIp);
    redisTable.setPort(port);
    redisTable.setRedisKey(redisKey);
    redisTable.setRedisType(redisType);
    redisTable.setRemark("");
    redisTable.setUpdateTime(new Date());
    //set集合
    if("set".equalsIgnoreCase(redisType)){
        Set<String> setStrings  = redis.smembers(redisKey);//获取key的所有set集合
        if(null != setStrings && !setStrings.isEmpty()){
            Iterator<String> setIterator = setStrings.iterator() ;  
               while(setIterator.hasNext()){  
                   Object obj1 = setIterator.next(); 
                   redisTable.setRedisValue(obj1+"");
                   printRedis(redisTable);//保存每一个set记录
               } 
        }
    //hash集合
    }else if("hash".equalsIgnoreCase(redisType)){
        Set<String> hashSets = redis.hkeys(redisKey);
        if(null != hashSets && !hashSets.isEmpty()){
            Iterator<String> setIterator = hashSets.iterator() ;  
               while(setIterator.hasNext()){  
                   String objectName = setIterator.next()+""; 
                   redisTable.setObjectName(objectName);
                   redisTable.setRedisValue(redis.hget(redisKey, objectName));
                   printRedis(redisTable);//保存每一个set记录
               } 
        }
    //list集合
    }else if("list".equalsIgnoreCase(redisType)){
        Long listLen = redis.llen(redisKey);
        for (Long i = 0L; i < listLen; i++) {
            redisTable.setRedisValue(redis.lindex(redisKey, i));
            printRedis(redisTable);
        }
    //sortedset集合
    }else if("sortedset".equalsIgnoreCase(redisType)){
        // Long redisLenth = redis.zcard(redisKey);
        Set<String> sortedsets = redis.zrange(redisKey, 0, -1);
        if(null != sortedsets && !sortedsets.isEmpty()){
            Iterator<String> setIterator = sortedsets.iterator() ;  
               while(setIterator.hasNext()){  
                   String sortedMember = setIterator.next() +""; 
                   redisTable.setRedisValue(sortedMember);
                   redisTable.setScore("" +redis.zscore(redisKey, sortedMember));
                   //保存每一个sortedset记录
                   printRedis(redisTable);
               } 
        }
    //string集合
    }else if("string".equalsIgnoreCase(redisType)){
        redisTable.setRedisValue(redis.get(redisKey));
        //保存记录
        printRedis(redisTable);
    }else{
        System.out.println("UnknowRedisType-----redisType: " +redisType+"objValue: "+redis.get(redisKey));
    }
}

//打印输出
public static void printRedis (RedisTable redisTable) {
    System.out.println("redisType:"+redisTable.getRedisType()  + " redisKey:"+redisTable.getRedisKey()+ " ObjectName:"+redisTable.getObjectName()
                    + " redisValue:"+redisTable.getRedisValue()+ " redisScore:"+redisTable.getScore());
}

public static void main(String[] args) {
    String redisIp = "127.0.0.1";//redis的IP地址
    int redisPort = 6379;//redis的端口号
    String appCode = "FUYOU";//根据不同的应用区分的appcode
    saveAllRedis(redisIp,redisPort,appCode);
}

}

![图片说明](https://img-ask.csdn.net/upload/201904/10/1554888224_193371.png)

自己用 spring JDBC 或者其他ORM的框架 , 建好对应的表,执行SQL写入到到对应的数据表就行了吧。 这个很简单啊。

就说下思路吧:
取到redis数据后,拿到数据的key做表字段名,执行表创建sql。表名自己根据实际情况设计。
然后将数据插入到对应表中

取到redis数据后 把数据转换成对象 存储数据的时候格式最好是json 如果已经创建好表则直接对象之间属性拷贝 否执行表创建sql,然后将数据插入到对应表中