import java.util.Date;
import java.util.Iterator;
import java.util.Set;
 
import redis.clients.jedis.Jedis;
 
import com.redis.entity.RedisTable;
 
public class RedisPersistence {
    /**
     * 存储所有的redis对象方法
     */
    public static void saveAllRedis(final String redisIp,final int redisPort,final String appCode) {
        Jedis redis = new Jedis(redisIp, redisPort);// 连接redis
        // redis.auth("redis");//验证密码
        // KEY操作
        Set keys = redis.keys("*");// 列出所有的key,查找特定的key如:redis.keys("foo")
        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 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 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 setIterator = sortedsets.iterator() ;  
                   while(setIterator.hasNext()){  
                       String sortedMember = setIterator.next() +""
                       redisTable.setRedisValue(sortedMember);
                       redisTable.setScore("" +redis.zscore(redisKey, sortedMember));
                       printRedis(redisTable);//保存每一个sortedset记录
                   
            }
        //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);
    }
}
</string></string></string>
 
其中的appCode是不需要的,这里只是为了针对于不同的应用,可以使用同一个redis进行持久化备份而已(通过appcode来区分)。

其中使用的RedisTable实例如下:

import java.util.Date;
 
public class RedisTable {
    private Long redisId; //保存redis的主键ID
    private String redisType;//redis的类型如:set/list/hash/sortedset/string
    private String redisKey;//保存redis时使用的key
    private String objectName;//此属性主要用于hash数据结构时,保存member的
    private String redisValue;//存储的redis的值
    private String keyToken;//保存Token时,为区分拼接的字符串
    private String score;//此属性为sortedset数据结构时,保存的score值
    private Date createTime;//创建时间
    private Date updateTime;//更新时间
    private String macIp;//redis的IP地址  当然此处也可以存储mac地址
    private String port;//redis使用的端口号
    private String appCode;//应用区分码
    private String remark;//备注
    private String isModify;//是否修改。此属性可以用于增量备份时,即在每个redis存储时可以更具key多存储一个属性isModify。 如果有修改,则置为 Y,否则为N.
     
///////////////////////此处省略 setter  and getter 方法////////////////////////
 
 
}

Java实现Redis持久化到数据库的关键方法的更多相关文章

  1. 【redis】java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用

    java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用 //重新设置过期时间为30分钟,刷新时间 redisTemplate.expire(MsOp ...

  2. Java 使用Redis缓存工具的图文详细方法

    开始在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java. (1)Java的安装配置可以参考我们的 Java ...

  3. Hibernate,Session方法使得java对象进入持久化状态;持久化对象特征

    以下情况java对象进入持久化状态: session.save()方法把临时对象转变为持久化对象. session.load()和session.get()方法得到的对象总是处于持久化状态. sess ...

  4. Redis持久化之RDB和AOF

    Redis是一个键值对数据库服务器,由于Redis是内存数据库,那么有很多内存的特点,例如掉电易失,或者进程退出,服务器中的数据也将消失不见,所以需要一种方法将数据从内存中写到磁盘,这一过程称之为数据 ...

  5. 了解Redis持久化

    Redis是一个键值对数据库服务器,由于Redis是内存数据库,那么有很多内存的特点,例如掉电易失,或者进程退出,服务器中的数据也将消失不见,所以需要一种方法将数据从内存中写到磁盘,这一过程称之为数据 ...

  6. Windows Redis安装,Java操作Redis

    一.Redis 的安装 1.Redis 下载 Windows 版本下载:https://github.com/dmajkic/redis/downloads 2.解压到 C:\redis-2.4.5- ...

  7. java架构师负载均衡、高并发、nginx优化、tomcat集群、异步性能优化、Dubbo分布式、Redis持久化、ActiveMQ中间件、Netty互联网、spring大型分布式项目实战视频教程百度网盘

    15套Java架构师详情 * { font-family: "Microsoft YaHei" !important } h1 { background-color: #006; ...

  8. Spring+Redis集成+关系型数据库持久化

    本篇文章主要介绍了"Spring+Redis集成+关系型数据库持久化",主要涉及到Spring+Redis集成+关系型数据库持久化方面的内容,对于Spring+Redis集成+关系 ...

  9. Java Redis系列2 (redis的安装与使用+redis持久化的实现))

    Java Redis系列2 (redis的安装与使用+redis持久化的实现) 什么是Redis? Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50 ...

随机推荐

  1. javascript语言学习笔记。

    js类创建方法 var DogKing = function(dogName){ this.dogName = dogName; }; var myDogKing = new DogKing(&quo ...

  2. iframe标签使用总结与注意问题

    子页面访问父父页面变量,函数,页面元素 //变量: //在父页面中需定义为全局变量 //子页面中调用 var childFrameVar= parent.ParentVarName; //函数: pa ...

  3. MFC 控件用法

    1:IP Control 变量CIPAddressCtrl m_iAddr 关联DDX_Control(pDX,IDC_IPADDRESS1,m_iAddr); 设置地址:m_iAddr.SetAdd ...

  4. python变量与数据类型

    变量 什么是变量 所谓变量,指的是在程序运行过程中需要用到的中间结果,变量定义后,会占用一块内存开辟的空间地址,通过内存空间确保同一时间的唯一性. >>> print(id.__do ...

  5. 为什么 把单一元素的数组放在一个struct的尾端问题

    问题摘自<深度探究c++对象模型>: struct mumble { /* stuff */ char pc[ 1 ];};[sizeof(mumble)是一个字节 .pc则代表的是指向这 ...

  6. 安装CocoaPods流程及常见问题(Xcode->homebrew->RVM->Ruby->CocoaPods)

    一.HomeBrew 1.(转)HomeBrew的安装和简单使用 http://blog.csdn.net/maojudong/article/details/7918291 2.homebrew的简 ...

  7. openstack私有云布署实践【2 安装前的服务器基本环境准备】

    服务器物理机都安装centos7.2 1511版本 , 此次采用的分区方式全是自动XFS格式LVM,在装系统时就将所有本地raid5硬盘都加入LVM全用了.默认/home目录有着最大的硬盘空间 并且我 ...

  8. CodeForces 703D Mishka and Interesting sum

    异或运算性质,离线操作,区间求异或和. 直接求区间出现偶数次数的异或和并不好算,需要计算反面. 首先,很容易求解区间异或和,记为$P$. 例如下面这个序列,$P = A[1]xorA[2]xorA[3 ...

  9. HDU 5867 Water problem

    处理出1-99的,之后的加上多少hundred和and即可.整百和一千的时候注意一下. #pragma comment(linker, "/STACK:1024000000,10240000 ...

  10. 《JS权威指南学习总结--8.3 函数的实参和形参》

    内容要点: 一.可选形参 当调用函数的时候传入的实参比函数声明时指定的形参个数要少,剩下的形参都将设置为undefined值. 例如: //将对象o中可枚举的属性名追加至数组 //如果省略a,则创建一 ...