Java实现Redis持久化到数据库的关键方法
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>
其中使用的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持久化到数据库的关键方法的更多相关文章
- 【redis】java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用
java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用 //重新设置过期时间为30分钟,刷新时间 redisTemplate.expire(MsOp ...
- Java 使用Redis缓存工具的图文详细方法
开始在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java. (1)Java的安装配置可以参考我们的 Java ...
- Hibernate,Session方法使得java对象进入持久化状态;持久化对象特征
以下情况java对象进入持久化状态: session.save()方法把临时对象转变为持久化对象. session.load()和session.get()方法得到的对象总是处于持久化状态. sess ...
- Redis持久化之RDB和AOF
Redis是一个键值对数据库服务器,由于Redis是内存数据库,那么有很多内存的特点,例如掉电易失,或者进程退出,服务器中的数据也将消失不见,所以需要一种方法将数据从内存中写到磁盘,这一过程称之为数据 ...
- 了解Redis持久化
Redis是一个键值对数据库服务器,由于Redis是内存数据库,那么有很多内存的特点,例如掉电易失,或者进程退出,服务器中的数据也将消失不见,所以需要一种方法将数据从内存中写到磁盘,这一过程称之为数据 ...
- Windows Redis安装,Java操作Redis
一.Redis 的安装 1.Redis 下载 Windows 版本下载:https://github.com/dmajkic/redis/downloads 2.解压到 C:\redis-2.4.5- ...
- java架构师负载均衡、高并发、nginx优化、tomcat集群、异步性能优化、Dubbo分布式、Redis持久化、ActiveMQ中间件、Netty互联网、spring大型分布式项目实战视频教程百度网盘
15套Java架构师详情 * { font-family: "Microsoft YaHei" !important } h1 { background-color: #006; ...
- Spring+Redis集成+关系型数据库持久化
本篇文章主要介绍了"Spring+Redis集成+关系型数据库持久化",主要涉及到Spring+Redis集成+关系型数据库持久化方面的内容,对于Spring+Redis集成+关系 ...
- Java Redis系列2 (redis的安装与使用+redis持久化的实现))
Java Redis系列2 (redis的安装与使用+redis持久化的实现) 什么是Redis? Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50 ...
随机推荐
- php专业面试总结
PHP专业面试题汇总 一.PHP基础: 2 二.数据库部分 5 三.面向对象部分 9 四.ThinkPHP部分 12 五.smarty模板引擎 16 六.二次开发系统(DEDE.ecshop): 18 ...
- mybatis的decimal精度缺失
在mybatis里面用decimal确实方便,但是经过测试发现decimal默认只有一位小数,所以也不能滥用,如果是double类型的话还是要使用double
- A. Alyona and Numbers(CF ROUND 358 DIV2)
A. Alyona and Numbers time limit per test 1 second memory limit per test 256 megabytes input standar ...
- CodeForces 703C Chris and Road
数学,递推. 不知道有没有更加神奇的做法,我是这样想的: 首先,如果多边形完全在$y$轴左侧,那么答案为$\frac{w}{u}$. 剩下的情况就要先判断是否能在车开过之前跑过去,如果跑不过去,要在车 ...
- linux下如何使用vnstat查看服务器带宽流量统计
因为很多vps或者服务器都是限流量的,但是又很多服务商并没有提供详细的流量表,比如每天的流量表,所以肯定有人很想知道自己服务器到底跑了多少流量. vnstat就是一个很好用的服务器流量统计命令.我截几 ...
- DapperHelper,SqlHelper
using System;using System.Collections.Generic;using System.Data.Common;using System.Linq;using Syste ...
- Java中三种常见的注释(注解) Annotation
Java为我们提供了三种Annotation方便我们开发. 1 Override-函数覆写注解 如果我们想覆写Object的toString()方法,请看下面的代码: class Annotation ...
- 利用Fiddler抓取websocket包
一.利用fiddler抓取websockt包 打开Fiddler,点开菜单栏的Rules,选择Customize Rules... 这时会打开CustomRules.js文件,在class Handl ...
- 基于Bootstrap的炫酷jQuery slider插件
简要教程 这是一款在原生bootstrap slider的基础上制作效果非常炫酷的jQuery slider插件.该slider插件可以自定义slider的颜色.形状.透明度和tooltip等属性,美 ...
- 四大类NoSQL数据库
http://blog.sina.com.cn/s/blog_636415010101945l.html 原文:http://blog.monitis.com/index.php/2011/05/22 ...