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));
    }
}
时间: 2024-11-25 08:41:43

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

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

Mongodb官方提供的Java驱动,保存与读取,需要的者是DBObject对象,这是一个接口,实现put,get等方法,跟map类似,如果我们要直接把普通的java对象保存到mongodb,就需要先转换成DBObject对象,或者直接实现DBObject接口,操作起来相当复杂.还好,monodb驱动带了把json转换成DBObject对象的功能,加上Google的Gson,就可以实现把普通的对象保存到mongodb中.如果要从mogodb中读出对象,反过来操作即可,但有一点需要注意的是,mon

Java 开发中的对象拷贝

前言 在 Java 开发中,很多时候需要将两个属性基本相同的对象进行属性复制,比如 DO 转 VO等等. 本文主要介绍自己实现的简易拷贝工具类与 Spring 提供的属性拷贝的对比. Spring 提供的属性拷贝 在 Spring 中直接调用 BeanUtils.copyProperties();即可. 它的核心通过循环 target 的所有方法名,然后在 source 中找到对应的方法名,最后通过反射从 source 中获取并写入 target 中. Spring 没有通过 java.lang

atitit.spring hibernate的事务机制 spring不能保存对象的解决

atitit.spring hibernate的事务机制 spring不能保存对象的解决 sessionFactory.openSession() 不能. . log黑头马sql语言.. sessionFactory.getCurrentSession().update(user); 中间走ok兰..log黑头也有累.. 在Spring中使用Hibernate.假设我们配置了TransactionManager.那么我们就不应该调用SessionFactory的openSession()来获得S

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

GC是什么? 为什么要有GC? GC是垃圾收集的意思(Garbage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的. 有向图垃圾回收机制 .NET的垃圾回收采用引用计数,java的垃圾回收机制采取的是有向图的方式来实现,具体的说,java程序中的每个线程对象就可以看作是一个有向图的起点,有向边从栈中的引用者指向堆中的引用对象.在这个有向图中,如果

深入理解Java类型信息(Class对象)与反射机制(干货)

[版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/70768369 出自[zejian的博客] 本篇主要是深入对Java中的Class对象进行分析,这对后续深入理解反射技术非常重要,这篇有点偏向内功类文章,主要内容如下: 深入理解Class对象 RRTI的概念以及Class对象作用 Class对象的加载及其获取方式 Class对象的加载 ClassforName方法 Class字面常

Java中几种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)

一.j2ee中,经常提到几种对象(object),理解他们的含义有助于我们更好的理解面向对象的设计思维. ORM是Object Relational Mapping[对象关系映射]的缩写 通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据.在O/RMapping的世界里, 有一系列的重要对象,常见的有VO,PO,DTO,POJO,DAO,BO. 1.Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分 (一).POJO(

保存对象

在接触redits的时候,看到项目许多对象继承了Serializable,序列化对象.其实际作用就是将对象保存起来.参考http://developer.51cto.com/art/201202/317181.htm我觉得写得通俗易懂. 1. 什么是Java对象序列化 Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长.但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定

hibernate第一个例子-保存对象

3.hibernate第一个例子-保存对象 使用hibernate框架需要导入的jar包: antlr-2.7.6 backport-util-concurrent c3p0-0.9.1 commons-collections-3.1    apache集合帮助的包 commons-logging-1.1.1日志 dom4j-1.6.1解析XML ehcache-1.5.0缓存框架 hibernate3hibernate核心包 javassist-3.9.0.GA代理模式工具包,解决懒加载问题

Java中List<E>对象赋值问题(深浅拷贝)

Java中List<E>对象赋值操作问题 业务需求是:取2个集合中的交集对象并返回.如下代码,busMap中key值和stocks中Map中的key值相等的对象则返回继续操作,也就是说剔除stocks中的不存在于busMap中的对象,就是一个过滤操作. 实现代码 ① bug版报错:java.util.ConcurrentModificationException ; at java.util.ArrayList$Itr.checkForComodification(ArrayList.java