今天用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;
     }
}

转载于:https://www.cnblogs.com/firstdream/p/7802297.html

Redis 存储字符串和对象相关推荐

  1. Redis存储与取出对象

    Redis存储与取出对象 import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation. ...

  2. redis存储与读取对象和对象集合

    在生产过程中经常会用到redis这种nosql数据存储,以达到快速的查询等操作. 在参考网上与相关图书资料后,决定自己动手实践以下redis对对象的存储与读取,以便以后在工作中可以拿来主意. redi ...

  3. Redis存储优化--小对象压缩

    小对象压缩 Redis是一种内存数据库,内存是计算机中一种比较宝贵的资源,如果我们不注意节约,Redis很可能出现内存不足,最终导致崩溃.Redis为了优化数据结构的内存占用,增加了非常多的优化点,这 ...

  4. redis 存储数组和对象

    首先要使用redis必须要安装redis并开启 将jedis-2.9.0.jar包加入项目 这是一个最简单的redis插入和读取 // 连接本地的 Redis 服务 Jedis jedis = new ...

  5. startindex 不能大于字符串长度_玩转云端丨redis的5种对象与8种数据结构之字符串对象(下)...

    引言 本文是对<redis设计与实现(第二版)>中数据结构与对象相关内容的整理与说明.本篇文章只对对象结构,1种对象--字符串对象.以及字符串对象所对应的两种编码--raw和embstr, ...

  6. redis存储对象_redis内存优化总结

    本文主要参考<>一书,主要分为以下六个部分: 1.redisObject对象 2.缩减键值对象 3.共享对象池 4.字符串优化 5.编码优化 6.控制key的数量 一. redisObje ...

  7. redis存储对象和集合

    使用redis存储对象或集合时,不能直接存储.需要将对象或集 合通过序列化转换为可存储的json,这里使用了fastjson来转型 redis是一个key-value存储系统.和Memcached类似 ...

  8. redis存储对象(通过JSON方式)

    redis存储对象 在Java程序中,redis提供的方法插入的key,value要么是string,要么就是byte[]数组.那如果是要插入的value是个对象怎么办呢?网上的方法大多是对这个对象进 ...

  9. Redis存储对象的三种方式

    存储对象的三种方式分别为: 1.将对象序列化后保存到Redis 2.将对象用FastJSON转为JSON字符串后存储 3.将对象用Hash数据类型存储 序列化工具类SerializeUtil publ ...

最新文章

  1. 干掉 powerdesigner,设计数据库表用它就够了
  2. 大多数人都不知道,人类基因组正在衰败
  3. PowerDesigner 常用设置
  4. 《Redis设计与实现》阅读笔记(二)--简单动态字符串
  5. Java入门时的一些基本概念的理解(j2ee,j2se,j2me,jdk,sdk,jre,jvm,跨平台)
  6. hdu 杭电 1045 Fire Net
  7. Android Studio 1.1.0 导入eclipse android project
  8. c++:结构体的应用
  9. curl-loader介绍
  10. 网络知识:路由器要不要每天重启?很多人都做错了,难怪网速慢
  11. Hacker News 7 月编程语言招聘趋势榜:Python 稳居第一,Go 成功击败 Java
  12. 明解C语言(第3版)入门篇-【部分】第五章练习题解(练习5-9至5-12)
  13. Excel多个sheet导出pdf
  14. 干眼症久治不愈?反复发作,小心可能不是干眼症!
  15. 电脑硬件基础知识科普
  16. 全国大学的ftp及部分免费ftp地址
  17. 揪出手机耗电元凶——高德地图缓存数据
  18. 微博泄露个人信息,须加强信息安全意识
  19. 华为机试真题 Java 实现【不含 101 的数】【2022.11 Q4新题】
  20. MSDN for VS2005

热门文章

  1. 空气培养皿采样后保存_环境监测基础知识——环境空气监测技术之布点采样
  2. 频率分布直方图组距如何确定_吃透教材理解教参,《直方图》教学反思
  3. 二叉树查找python_二叉搜索树的python实现
  4. class ts 扩展方法_如使用Typescript撸Vue(Vue2 + TS +TSX+CSS module)
  5. synchronized不能锁静态变量_多线程编程不可错过——彻底理解synchronized
  6. java 线程状态_JAVA线程漫谈:线程状态与状态转换解析
  7. php使用redis分布式锁,php基于redis的分布式锁实例详解
  8. 网站推广收录少?网站推广专员浅析可能是蜘蛛抓取出现问题
  9. 网站建设需要抠好每一个细节
  10. 每个网站SEO优化人员都要熟知的三大图片优化技巧