风之舞丶 2019-04-10 16:55 采纳率: 0%
浏览 3413
已结题

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

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

  • 写回答

4条回答 默认 最新

  • chillily_ 2019-04-10 17:23
    关注

    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)
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?