java使用Redis2--保存对象
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--保存对象的更多相关文章
- Java操作Mongodb 保存/读取java对象到/从mongodb
从http://central.maven.org/maven2/org/mongodb/mongo-java-driver/选择一个版本进行下载,这里选择的是3.0.0版本,具体下载以下jar包: ...
- Java GC机制和对象Finalize方法的一点总结
GC是垃圾收集的意思(Garbage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超 ...
- Java基于文件的对象存储
工作中经常需要处理对象的处理,有的时候还需要将对象保存到文件中做持久化. 特别是当不能使用数据库的时候就特别需要一个简单的对象集合的增删改查操作, 于是就有了下面这个文件DB的工具类 package ...
- java源码剖析: 对象内存布局、JVM锁以及优化
一.目录 1.启蒙知识预热:CAS原理+JVM对象头内存存储结构 2.JVM中锁优化:锁粗化.锁消除.偏向锁.轻量级锁.自旋锁. 3.总结:偏向锁.轻量级锁,重量级锁的优缺点. 二.启蒙知识预热 开启 ...
- Java内存区域与对象创建过程
一.java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则 ...
- Java基础 -- 深入理解Java类型信息(Class对象)与反射机制
一 RTTI概念 认识Claa对象之前,先来了解一个概念,RTTI(Run-Time Type Identification)运行时类型识别,对于这个词一直是 C++ 中的概念,至于Java中出现RT ...
- Java——构造方法和匿名对象
前言 在编写程序时不安全的初始化会导致程序发生发生重大错误.为了使程序可以被安全地初始化,C++引入了构造器(也可以成为构造方法)的概念,这是一个在创建对象时被自动调用的特殊方法.Java中也采用了构 ...
- 【Java并发.4】对象的组合
到目前为止,我们已经介绍了关于线程安全与同步的一些基础知识.然而,我们并不希望对每一系内存访问都进行分析以确保程序是线程安全的,而是希望将一些现有的线程安全组件组合为更大规模的组件或程序. 4.1 设 ...
- Java 开发中的对象拷贝
前言 在 Java 开发中,很多时候需要将两个属性基本相同的对象进行属性复制,比如 DO 转 VO等等. 本文主要介绍自己实现的简易拷贝工具类与 Spring 提供的属性拷贝的对比. Spring 提 ...
- Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream)
Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.对象的序 ...
随机推荐
- Motion Blur
[Motion Blur] 此篇介绍最简单的全局Motion Blur.算法是将当前帧与前一帧按某一比例混合.这是一个过程,例如有10帧,在第1帧中,只有第1帧原图,第2帧中有1.2帧原图,第3帧中会 ...
- VS2015解决方案资源管理器空白,不显示内容
解决方法: 1.先关闭vs: 2.把C:/Users/<users name>/AppData/Local/Microsoft/VisualStudio/14.0/ComponentMod ...
- Marshal.FreeHGlobal 方法 (IntPtr)
释放以前从进程的非托管内存中分配的内存. 命名空间: System.Runtime.InteropServices程序集: mscorlib(位于 mscorlib.dll) 下面的示例演示如何 ...
- Linux gcj命令
一.简介 GCJ是GNU的Java编译器,可以把java程序编译成本地代码,编译成功后的可执行文件不再需要jre就可直接运行,编译成本地后的程序运行速度有所提高,缺点是生成后的文件较大. 参考: ht ...
- git忽略某个文件夹
data/cache/* !data/cache/index.html !data/cache/smiOAuthToken.php
- Zookeeper 源码(六)Leader-Follower-Observer
Zookeeper 源码(六)Leader-Follower-Observer 上一节介绍了 Leader 选举的全过程,本节讲解一下 Leader-Follower-Observer 服务器的三种角 ...
- 常见的C语言内存错误及对策(转)
http://see.xidian.edu.cn/cpp/html/483.html 一.指针没有指向一块合法的内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内存.浅显的例子就 ...
- linux每天一小步---ls命令详解
1 命令功能: 列出当前目录下或者指定目录下的所有文件和目录,ls是list的缩写. 2 命令语法: ls [选项] [目录名] #注:[]中的内容为非必选项 3 命令选项: -a 列出目录下 ...
- Codeforces 768A Oath of the Night's Watch 2017-02-21 22:13 39人阅读 评论(0) 收藏
A. Oath of the Night's Watch time limit per test 2 seconds memory limit per test 256 megabytes input ...
- Ubuntu的常识使用了解2
1. 在linux系统中,所有的目录(分区)都是挂靠在/跟目录下. 使用「cd」这个指令来切換目录.切换目录的方式:(1)绝对路径,以根目录做开头/, (2)相对目录, 没有以根目录开头. 注意:插补 ...