Redis中并没有提供set(String key, Object obj)的方法,但提供了set(final byte[] key, final byte[] value) 的方法,可以通过把对象转化成字节数组的方式进行储存。

对象类

package redis;

import java.io.Serializable;

public class Goods implements Serializable {
/**
*
*/
private static final long serialVersionUID = 3870927632803751641L;
private String name;
private int num;
private int price; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getNum() {
return num;
} public void setNum(int num) {
this.num = num;
} public int getPrice() {
return price;
} public void setPrice(int price) {
this.price = price;
}
}

序列化工具类

package redis;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream; /**
* @author Administrator
*
*/
public class SerializeUtil {
public static byte[] serialize(Object object) {
ObjectOutputStream oos = null;
ByteArrayOutputStream baos = null;
try {
// 序列化
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(object);
byte[] bytes = baos.toByteArray();
return bytes;
} catch (Exception e) { }
return null;
} public static Object unserialize(byte[] bytes) {
ByteArrayInputStream bais = null;
try {
// 反序列化
bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
return ois.readObject();
} catch (Exception e) { }
return null;
}
}

redis保存对象扩展类

package redis;
import redis.clients.jedis.Jedis; /**
*
* @author ajun
*
*/
public class RedisClient {
private static final String ip = "192.168.77.135";
private static final int port = 6379;
protected static RedisClient redis = new RedisClient();
protected static Jedis jedis = new Jedis(ip, port);;
static { } protected RedisClient() {
System.out.println(" init Redis ");
} public static RedisClient getInstance() {
return redis;
} /** set Object */
public String set(Object object, String key) {
return jedis.set(key.getBytes(), SerializeUtil.serialize(object));
} /** get Object */
public Object get(String key) {
byte[] value = jedis.get(key.getBytes());
return SerializeUtil.unserialize(value);
} /** delete a key **/
public boolean del(String key) {
return jedis.del(key.getBytes()) > 0;
} }

测试类

package redis;

import redis.clients.jedis.Jedis;

public class SaveObjectTest {
/**
* Administrator
*
* @param args
*/
public static void main(String[] args) {
// 操作单独的文本串
Jedis redis = new Jedis("192.168.77.135", 6379);
redis.set("key", "value");
System.out.println(redis.get("key"));
System.out.println(redis.del("key"));
// 操作实体类对象
Goods good = new Goods(); // 这个Goods实体我就不写了啊
good.setName("洗衣机");
good.setNum(400);
good.setPrice(19);
redis.set("good".getBytes(), SerializeUtil.serialize(good));
byte[] value = redis.get("good".getBytes());
Object object = SerializeUtil.unserialize(value);
if (object != null) {
Goods goods = (Goods) object;
System.out.println(goods.getName());
System.out.println(goods.getNum());
System.out.println(goods.getPrice());
}
System.out.println(redis.del("good".getBytes()));
// 操作实体类对象2(实际上和上面是一样的)
String key = "goods-key";
Goods g = new Goods();
g.setName("电风扇--d");
g.setNum(200);
String temp = RedisClient.getInstance().set(g, key);
System.out.println(temp);
Object o = RedisClient.getInstance().get(key);
if (o != null) {
Goods g1 = (Goods) o;
System.out.println(g1.getName());
System.out.println(g1.getNum());
}
System.out.println(RedisClient.getInstance().del(key));
}
}

java使用Redis2--保存对象的更多相关文章

  1. Java操作Mongodb 保存/读取java对象到/从mongodb

    从http://central.maven.org/maven2/org/mongodb/mongo-java-driver/选择一个版本进行下载,这里选择的是3.0.0版本,具体下载以下jar包: ...

  2. Java GC机制和对象Finalize方法的一点总结

    GC是垃圾收集的意思(Garbage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超 ...

  3. Java基于文件的对象存储

    工作中经常需要处理对象的处理,有的时候还需要将对象保存到文件中做持久化. 特别是当不能使用数据库的时候就特别需要一个简单的对象集合的增删改查操作, 于是就有了下面这个文件DB的工具类 package ...

  4. java源码剖析: 对象内存布局、JVM锁以及优化

    一.目录 1.启蒙知识预热:CAS原理+JVM对象头内存存储结构 2.JVM中锁优化:锁粗化.锁消除.偏向锁.轻量级锁.自旋锁. 3.总结:偏向锁.轻量级锁,重量级锁的优缺点. 二.启蒙知识预热 开启 ...

  5. Java内存区域与对象创建过程

    一.java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则 ...

  6. Java基础 -- 深入理解Java类型信息(Class对象)与反射机制

    一 RTTI概念 认识Claa对象之前,先来了解一个概念,RTTI(Run-Time Type Identification)运行时类型识别,对于这个词一直是 C++ 中的概念,至于Java中出现RT ...

  7. Java——构造方法和匿名对象

    前言 在编写程序时不安全的初始化会导致程序发生发生重大错误.为了使程序可以被安全地初始化,C++引入了构造器(也可以成为构造方法)的概念,这是一个在创建对象时被自动调用的特殊方法.Java中也采用了构 ...

  8. 【Java并发.4】对象的组合

    到目前为止,我们已经介绍了关于线程安全与同步的一些基础知识.然而,我们并不希望对每一系内存访问都进行分析以确保程序是线程安全的,而是希望将一些现有的线程安全组件组合为更大规模的组件或程序. 4.1 设 ...

  9. Java 开发中的对象拷贝

    前言 在 Java 开发中,很多时候需要将两个属性基本相同的对象进行属性复制,比如 DO 转 VO等等. 本文主要介绍自己实现的简易拷贝工具类与 Spring 提供的属性拷贝的对比. Spring 提 ...

  10. Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream)

    Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.对象的序 ...

随机推荐

  1. Python3 abs() 函数

    Python3 abs() 函数  Python3 数字 描述 abs() 函数返回数字的绝对值. 语法 以下是 abs() 方法的语法: abs( x ) 参数 x -- 数值表达式,可以是整数,浮 ...

  2. OGNL概述

    -------------------siwuxie095 OGNL 概述 1.OGNL 即 Object-Graph Navigation Language,对象图导航语言, 它是一个应用于 Jav ...

  3. for 续7

    ----------siwuxie095                 for 中的变量:     FOR 变量参照的替换已被增强.您现在可以使用下列选项语法: ~I - 删除任何引号(" ...

  4. Web页面显示日期和动态时刻脚本

    <script language="JavaScript" type="text/JavaScript">    <!--        tm ...

  5. C/C++互相调用

    参考: http://www.cnblogs.com/Yogurshine/p/3913073.html http://blog.chinaunix.net/uid-24118190-id-29853 ...

  6. C语言Web service编程

    一.简介 Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配置这些应用程序,用 ...

  7. nginx 集群介绍

    nginx 集群介绍 完成一次请求的步骤 1)用户发起请求 2)服务器接受请求 3)服务器处理请求(压力最大) 4)服务器响应请求 缺点:单点故障 单台服务器资源有限 单台服务器处理耗时长 ·1)部署 ...

  8. Javascript 知识遗漏点梳理。

    先说一下我之前学习Javascript的学习经历,然后就是最近几天学到以前没有注意的知识遗漏点. 1.之前的学习经历和方法: 最开始是看了Javascript DOM编程与艺术这本书,把慕课网上的&l ...

  9. 23 DesignPatterns学习笔记:C++语言实现 --- 1.5 Prototype

    23 DesignPatterns学习笔记:C++语言实现 --- 1.5 Prototype 2016-07-21 (www.cnblogs.com/icmzn) 模式理解

  10. java复习小知识(基础不算,有反射,递归)

    顺序选择循环,三种 1.至于循环和递归 循环效率更高,但是递归在处理文件递归的时候更为常见快捷 在java中实现传多参 2.public static void main(String[]  args ...