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 ...
随机推荐
- .net(C#)中结构和类的区别
static void Main(string[] args) { //类型 //结构:值类型 //类:引用类型 //声明的语法:class struct //在类中,构造函数里,既可以给字段赋值,也 ...
- 使用dom4j操作XML
DOM4J介绍 DOM4J是使用Java语言编写的,用于读写及操作XML的一套组件,DOM4J同时具有DOM修改文件的优点和SAX读取快速的优点. DOM4J的使用 首先下载dom4j的JAR包,我用 ...
- QT网络编程
bool QAbstractSocket::waitForReadyRead(int msecs = 30000) bool QAbstractSocket::waitForDisconnected( ...
- MHA故障切换和在线手工切换原理
一.故障切换的过程 当master_manager监控到主库mysqld服务停止后,首先对主库进行SSH登录检查(save_binary_logs -command=test),然后对mysqld服务 ...
- CryptoJS DES加密
<!DOCTYPE html><html><head><meta charset="utf-8"><meta http-equ ...
- 根据osdid 查询磁盘是ssd盘还是sas盘
前置条件: 1.安装LSI的Megacli软件包 Megacli64 2.安装scsi设备的查询工具lsscsi apt-get install lsscsi 步骤: 1.根据osdid 查找 盘 ...
- winform常用的属性(listview),常用容器(二者结合)
ListVies控件主要用于展示数据(非常实用和重要的控件) FullRowSelect:设置是否行选择模式.(默认为false) (开启之后一下选中一行数据) ___________________ ...
- tomcat7+jdk1.8一键安装脚本
#!/bin/bash #--------------------------------------------------------------------- # # Author : 大象无形 ...
- Oracle建表
1.oracle数据库中的多种数据结构: 1.表结构 存储数据 2.视图 一张表或多张表中数据的字节 3.sequence 主要用来生成主键值 4.index 提高检索性能 我们 ...
- HDU 5968 异或密码
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...