今天用redis存储,发现客户端jedis提供的存储方法中存储的类型只有String和byte数据,没有能够存储对象的,网上发现可以序列化存储对象。这就开始了我第一次序列化之旅。

 
 
1 测试类
 
import redis.clients.RedisClinet;
import redis.clients.SerializeUtil;
import redis.clients.jedis.Jedis;
 
public class Test {
 
      /**
      * Administrator
      * @param args
      */
      public static void main(String[] args) {
           
            // 操作单独的文本串
           Jedis redis= new Jedis( "10.2.31.38", 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(19l);
           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=RedisClinet. getInstance().set(g, key);
           System. out.println(temp);
           
           Object o=RedisClinet. getInstance().get(key);
            if(o!= null)
           {
                Goods g1=(Goods)o;
                System. out.println(g1.getName());
                System. out.println(g1.getNum());
           }
          System. out.println(RedisClinet. getInstance().del(key));
           
     }
}
 
 
2 RedisClinet 客户端类
package redis.clients;
import redis.clients.jedis.Jedis;
/**
 *
 * @author ajun
 *
 */
public class RedisClinet {
      private static final String ip= "10.2.31.38";
      private static final int port=6379;
      protected static RedisClinet redis = new RedisClinet ();
      protected static Jedis jedis = new Jedis( ipport);;
      static {
           
     }
    protected RedisClinet(){
       System. out.println( " init Redis ");
    }
    public static RedisClinet 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;
     }
 
}
 
 
3 序列化工具类
 
/**
 *
 */
package redis.clients;
 
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 存储字符串和对象的更多相关文章

  1. Redis存储字符串

    1.set和get实现字符串存取: 键的名字相同,会对以前的值进行覆盖: 2.++操作: 3.--操作: 4.加任意数值的数字: 5.减任意数值的数字: 6.拼接字符串: 7.删除:

  2. redis 存储java对象 两种方式

    根据redis的存储原理,Redis的key和value都支持二进制安全的字符串 1.利用序列化和反序列化的方式存储java对象我们可以通过对象的序列化与反序列化完成存储于取出,这样就可以使用redi ...

  3. Redis 存储对象信息是用 Hash 还是 String

    Redis 内部使用一个 RedisObject 对象来表示所有的 key 和 value,RedisObject 中的 type,则是代表一个 value 对象具体是何种数据类型,它包含字符串(St ...

  4. redis存储对象

      redis主要存储类型最常用的五种数据类型: String Hash List Set Sorted set redis存储对象序列化和反序列化 首先来了解一下为什么要实现序列化 为什么要实现序列 ...

  5. redis存储对象与对象序列化详解

    redis主要存储类型最常用的五种数据类型: String Hash List Set Sorted set redis存储对象序列化和反序列化 首先来了解一下为什么要实现序列化 为什么要实现序列化接 ...

  6. Redis学习03——存储字符串(String)

    --------------------- 作者:愤怒的小明 来源:CSDN 原文:https://blog.csdn.net/qiwenmingshiwo/article/details/78118 ...

  7. Redis中的数据对象

    redis对象 redis中有五种常用对象 我们所说的对象的类型大多是值的类型,键的类型大多是字符串对象,值得类型大概有以下几种,但是无论哪种都是基于redisObject实现的 redisObjec ...

  8. redis数据类型-字符串类型

    Redis数据类型 字符串类型 字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据.你可以用其存储用户的邮箱.JSON化的对象甚至是一张图片.一个字符串类型键允许存储的 ...

  9. redis下操作hash对象

    redis下操作hash对象 hash用于存储对象,对象的格式为键值对 命令 设置 设置单个属性 HSET key field value 设置多个属性 HMSET key field value [ ...

随机推荐

  1. 2016/05/05 smarty ① 登录 ②主页面 ③删除 ④让缩略信息显示完整 (补:增加 修改 )

    共  八个页面 ①login.php <?php include("init.inc.php"); $smarty->display("login.html& ...

  2. NYOJ110 剑客决斗

    剑客决斗 来源:Polish Olympiad in Informatics(波兰信息学奥林匹克竞赛) 时间限制:5000 ms  |  内存限制:65535 KB 难度:5   描述 在路易十三和红 ...

  3. 阐述Linux操作系统之rpm五种基本操作

    Linux操作系统现在已经成为流行的操作系统,很多的人都开始学习,Linux操作系统包括了很多的专业知识,今天和大家讲讲Linux操作系统中的rpm基本操作.希望你学会本文中提到rpm的五种基本操作知 ...

  4. python 线程 进程 标识

    s = '%s%s%s%s%s%s%s%s' % ( time.strftime('%Y%m%d %H:%M:%S', time.localtime(time.time())), ' os.getpp ...

  5. What are some advantages of using Node.js over a Flask API?

    https://www.quora.com/What-are-some-advantages-of-using-Node-js-over-a-Flask-API Flask is a Python w ...

  6. jquery ajax 回调函数

    function test(callback){ $.ajax({ url:'/mall/credit', type: 'get', dataType:'json', processData: fal ...

  7. YTU 2845: 编程题AB-卡片游戏

    2845: 编程题AB-卡片游戏 时间限制: 1 Sec  内存限制: 128 MB 提交: 30  解决: 13 题目描述 小明对数字的序列产生了兴趣: 现有许多张不同的数字卡片,用这若干张卡片能排 ...

  8. appium学习【五】【转】appium实现屏幕向左滑动

    转自http://www.cnblogs.com/testhub/p/5949668.html 前些日子写一个滑动手机页面的小脚本,看到大家给的内容都是swipe方法,这里对swipe方法做一个小介绍 ...

  9. 【413】C 语言 Command line

    Command-Line Arguments All the executable programs above have a main(void) program more generally, e ...

  10. 【转载】CAS操作

    [本文转载]http://blog.csdn.net/hsuxu/article/details/9467651 CAS CAS:Compare and Swap, 翻译成比较并交换. java.ut ...