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 ...
随机推荐
- 《精通CSS》——个人总结
[属性选择器] 属性选择器可以根据某个属性是否存在或属性的值来寻找元素. 只有在规定了 !DOCTYPE 时,IE7 和 IE8 才支持属性选择器.在 IE6 及更低的版本中,不支持属性选择. 事例: ...
- Paint Pearls
Paint Pearls 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5009 dp+双向链表优化 看到题目,很自然地可以定义状态:dp[i]表示涂好 ...
- Bullcow 牡牛和牝牛(bzoj 3398)
Description 约翰要带N(1≤N≤100000)只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛.牛们要站成一排.但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡 ...
- 利用H5新特性判断文件大小
HTML代码部分: 思路:下面代码中我利用css的z-index属性将input="file”标签隐藏在了id=btnSelect元素下面,通过触发a标签的点击后,弹出文件选择框.下面的ma ...
- HDU 1008 u Calculate e
Problem Description A simple mathematical formula for e is where n is allowed to go to infinity. Thi ...
- c# delegate的invoke和bejinInvoke的区别
先看下面实实例代码 private delegate void testdg(); private void button1_Click(object sender, EventArgs e) ...
- 点(.)运算符和箭头(->)运算符的区别
本机中,char类型数据占用1byte, unsigned int, int, long int, float类型的数据占用4 bytes, double类型的数据占用8bytes. 至于指向所有基本 ...
- 5.Hibernate实现全套增删改查和ajax异步分页
1.1 创建如下oracle数据库脚本 drop sequence seq_stu; create sequence SEQ_STU minvalue maxvalue start increment ...
- openwrt 的 inittab
文件位于 /etc/inittab, 内容如下: root@hbg:/# cat /etc/inittab ::sysinit:/etc/init.d/rcS S boot::shutdown:/et ...
- HDU 2514 Another Eight Puzzle(DFS)
题目链接 Problem Description Fill the following 8 circles with digits 1~8,with each number exactly once ...