Redis学习笔记二
学习Redis添加Object时,由于Redis只能存取字符串String,对于其它数据类型形容:Int,long,double,Date等不提供支持,因而需要设计到对象的序列化和反序列化.java序列化的过程就是将对象转变为byte,字节码的过程. Java的反序列过程就是就是将字节码恢复成对象的过程。
一正一逆,也迎合了电脑存储数据的特点。
关于Java的序列化和反序列化的Demo:
package hbut.base; import org.junit.Test; import java.io.*; /**
* @Author XiJun.Gong
* @DATE 2016/6/12.
* aim: hbut.base
* function: 对象的序列化和反序列
*/
public class serializableDemo { private User user = null;
private ByteArrayOutputStream byteArrayOutputStream = null;
private ObjectOutputStream outputStream = null;
private ObjectInputStream inputStream = null;
private ByteArrayInputStream byteArrayInputStream = null;
private byte[] result; @Test
public void test() {
user = new User();
user.setUsername("huifeidmeng");
user.setAge(); try {
byteArrayOutputStream = new ByteArrayOutputStream();
outputStream = new ObjectOutputStream(byteArrayOutputStream);
outputStream.writeObject(user);
result = byteArrayOutputStream.toByteArray();
} catch (IOException e1) {
e1.printStackTrace();
} finally {
try {
if (outputStream != null) outputStream.close();
if (byteArrayOutputStream != null) byteArrayOutputStream.close();
} catch (IOException e2) {
e2.printStackTrace();
}
}
/*tmp sout*/
System.out.println(result);
User tmpUser = new User();
try {
byteArrayInputStream = new ByteArrayInputStream(result);
inputStream = new ObjectInputStream(byteArrayInputStream);
tmpUser = (User) inputStream.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e3) {
e3.printStackTrace();
} finally {
try {
if (byteArrayInputStream != null) byteArrayInputStream.close();
if (inputStream != null) inputStream.close();
} catch (IOException e4) {
e4.printStackTrace();
} }
System.out.println(tmpUser.getUsername() + ": " + tmpUser.getAge());
} } class User implements Serializable {
private static final long serialVersionUID = -1941046831377985500L;
String username;
Integer age; public User() {
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
}
}
在编写demo的过程中,发现一个问题,当使用内部类作为对象的的时候,序列化总是抛出异常,但是一旦将User类迁出的时候,又恢复正常。
关于序列化和反序列工具类Dmeo:
package com.hbut.util; import java.io.*; /**
* @Author XiJun.Gong
* @DATE 2016/6/13.
* aim: com.hbut.util
*/
public class SerializableTool { private ByteArrayOutputStream byteArrayOutputStream = null;
private ObjectOutputStream outputStream = null;
private ObjectInputStream inputStream = null;
private ByteArrayInputStream byteArrayInputStream = null; public byte[] serializable(Object object) {
byte[] result = null;
try {
byteArrayOutputStream = new ByteArrayOutputStream();
outputStream = new ObjectOutputStream(byteArrayOutputStream);
outputStream.writeObject(object);
result = byteArrayOutputStream.toByteArray();
} catch (IOException e1) {
e1.printStackTrace();
} finally {
try {
if (outputStream != null) outputStream.close();
if (byteArrayOutputStream != null) byteArrayOutputStream.close();
} catch (IOException e2) {
e2.printStackTrace();
}
}
return result;
} public Object unSerializable(byte[] bytes) {
Object object = null;
try {
byteArrayInputStream = new ByteArrayInputStream(bytes);
inputStream = new ObjectInputStream(byteArrayInputStream);
object = inputStream.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e3) {
e3.printStackTrace();
} finally {
try {
if (byteArrayInputStream != null) byteArrayInputStream.close();
if (inputStream != null) inputStream.close();
} catch (IOException e4) {
e4.printStackTrace();
}
}
return object;
}
}
Redis存取对象和读取对象Demo
 class UserModel implements Serializable {
     private String username;
     private String password;
     private Integer age;
     @Override
     public String toString() {
         return "UserModel{" +
                 "username='" + username + '\'' +
                 ", password='" + password + '\'' +
                 ", age=" + age +
                 '}';
     }
     public UserModel() {
     }
     public Integer getAge() {
         return age;
     }
     public void setAge(Integer age) {
         this.age = age;
     }
     public String getUsername() {
         return username;
     }
     public void setUsername(String username) {
         this.username = username;
     }
     public String getPassword() {
         return password;
     }
     public void setPassword(String password) {
         this.password = password;
     }
 }
该是这部分的继续:
启动Redis服务器,后运行如下代码:
package com.hbut.util; import com.google.common.collect.Maps;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig; import java.io.Serializable;
import java.util.Iterator;
import java.util.List;
import java.util.Map; /**
* Created by XiJun.Gong on 14-2-28.
*/
public class TestRedis { JedisPool pool;
Jedis jedis; /**
* connection
*/
@Before
public void init() {
pool = new JedisPool(new JedisPoolConfig(), "localhost");
jedis = pool.getResource();
//jedis.auth("*******"); //密码验证
} /**
* for object*
*/
@Test
public void testObject() { SerializableTool serializableTool = new SerializableTool();
UserModel userModel = new UserModel();
userModel.setAge(123);
userModel.setUsername("huifeidmeng");
userModel.setPassword("******");
byte[] bytes = serializableTool.serializable(userModel);
jedis.set("useModel".getBytes(), bytes);
byte[] result = jedis.get("useModel".getBytes());
Object object = serializableTool.unSerializable(result);
UserModel tmpUser = (UserModel) object;
System.out.println(tmpUser.toString());
} }
运行结果:
UserModel{username='huifeidmeng', password='******', age=123}
Redis学习笔记二的更多相关文章
- Redis学习笔记二 (BitMap算法分析与BitCount语法)
		
Redis学习笔记二 一.BitMap是什么 就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身.我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省 ...
 - redis 学习笔记二 (简单动态字符串)
		
redis的基本数据结构是动态数组 一.c语言动态数组 先看下一般的动态数组结构 struct MyData { int nLen; char data[0]; }; 这是个广泛使用的常见技巧,常用来 ...
 - StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用
		
ConnectionMultiplexer ConnectionMultiplexer 是StackExchange.Redis的核心对象,用这个类的实例来进行Redis的一系列操作,对于一个整个应用 ...
 - redis 学习笔记二
		
redis启动: 直接 redis-server.exe 启动服务,是按照redis默认配置启动的,如果想按照自己的配置文件启动,要加上 redis-server.exe redis.windows ...
 - redis学习笔记(二)——java中jedis的简单使用
		
redis怎么在java中使用,那就是要用到jedis了,jedis是redis的java版本的客户端实现,原本原本想上来就直接学spring整合redis的,但是一口吃个胖子,还是脚踏实地,从基础开 ...
 - Redis学习笔记二:单机数据库的实现
		
1. 数据库 服务器中的数据库 Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每个项都是一个redis.h/redisDb结构,每个r ...
 - 2019/1/10 redis学习笔记(二)
		
本文不涉及集群搭建操作 关于在lua脚本中操作redis的应用场景 大家都知道redis对于单个集合的操作是原子性的;但是有可能有一种场景是这样.比如说抢红包,现在有十个人抢五份红包,抽象到我们jav ...
 - redis 学习笔记(二)
		
1. 在centos下安装g++,如果输入 yum install g++,那么将会提示找不到g++.因为在centos下g++安装包名字叫做:gcc-c++ 所以应该输入 yum install g ...
 - Redis学习笔记(二):Redis集群
		
集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能. 1.节点 一个节点就是一个运行在集群模式下的Redis服务器.启动Redis服务器时,通过判断cluster-enabl ...
 
随机推荐
- C#委托和事件
			
委托和事件都可以用来调用跟自己方法签名一样的方法,两者在使用中主要有以下区别: 委托和事件没有可比性,因为委托是类型,事件是对象: 委托可以在声明它的类外部进行调用,而事件只能在类的内部进行调用: 委 ...
 - 搭建基于Jenkins salt-api的运维工具
			
1. 安装salt-master和salt-minion 安装过程不再赘述,请参考http://docs.saltstack.com/en/latest/topics/installation/ind ...
 - oracle函数,游标,视图使用总结0.000000000000000000001
			
oracle函数或者叫存储过程,在实际的开发过程中对于复杂的业务需求是非常有用的,非常有效率的也是非常好玩儿的一个技术点. 平常在开发过程中对于CRUD功能较多.一般SQL即可应付,大不了就是长一点而 ...
 - Raytracer
			
http://www.cnblogs.com/miloyip/archive/2010/03/29/1698953.html http://www.scratchapixel.com/lessons/ ...
 - 如何在Python中实现这五类强大的概率分布
			
R编程语言已经成为统计分析中的事实标准.但在这篇文章中,我将告诉你在Python中实现统计学概念会是如此容易.我要使用Python实现一些离散和连续的概率分布.虽然我不会讨论这些分布的数学细节,但我会 ...
 - java中的泛型和sql中的索引
			
sql中的索引 索引:好处查询的速度快,被删除,修改,不会对表产生影响,作用是加速查询: 一种典型的数据库对象 作用:提交数据的查询效率,尤其对一些数据量很大的表 索引是用来为表服务的 索引是orac ...
 - 处理session跨域几种的方案
			
常用跨域共用session的是登录模块,我相信很多开发的朋友的都遇到过,只需要一个地方登录,相关联的网站也是处于登录状态.两种情况:一种9streets.cn和a.9streets.cn之间,另一种是 ...
 - Organize Your Train part II-POJ3007模拟
			
Organize Your Train part II Time Limit: 1000MS Memory Limit: 65536K Description RJ Freight, a Japane ...
 - [ASM C/C++] C语言的main 函数
			
C语言有两种可能的运行环境 1. 独立(freestanding) 在独立环境中,C程序执行不需要操作系统的支持,因此只具有最小的链接库能力. 2. 宿主(hosted) 在宿主的环境中,C程序会在操 ...
 - Chapter 2: 随机变量
			
1. 随机变量, 离散型随机变量,连续型随机变量 设$\Omega$为随机试验的样本空间,$X:\Omega \rightarrow R$是定义在样本空间$\Omega$上的实值函数,则称$X$为随机 ...