今天用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. 微信企业号调用js-sdk注意事项

    企业号应用必须添加可信域名,域名必须通过备案,可以是子域名,如果网站带端口,一定也要加上端口号...踩坑记

  2. MYSQL之数据库初窥

    mysql数据库 1.数据库简单介绍    数据库概念:是依照数据结构来组织.存储和管理数据的仓库. 2.经常使用术语    数据库:是一些关联表的集合    数据表:表是数据的矩阵,在数据库中看起来 ...

  3. GoodUI:页面布局的技巧和设计理念

    http://goodui.org/ 中文翻译:http://www.cnblogs.com/Wayou/p/goodui.html 一年了,小小少年从幼年期过渡到成长期要开始加速冲刺了.毕竟钻头就是 ...

  4. Webdriver中关于driver.navigate().to()和driver.get()使用的区别

    先是有一个父页上button弹开一个子页,总共有4个子页,必须前一个页上的必填信息录完,才能在这个页面触发下一个子页. 用driver.navigate().to(baseUrl2),直接跳转到第2个 ...

  5. hihocoder 第二十五周 spfa 最短路

    其实hihocoder里的题目目前大都是模板题啊-.- 这周的是SPFA,暑假的时候有看过SPFA,不过一直用的都是Dijkstra,感觉spfa要更加简洁一点~~,今天找了一份之前一直都看不太懂所以 ...

  6. HDU - 4333 Revolving Digits(拓展kmp+最小循环节)

    1.给一个数字字符串s,可以把它的最后一个字符放到最前面变为另一个数字,直到又变为原来的s.求这个过程中比原来的数字小的.相等的.大的数字各有多少. 例如:字符串123,变换过程:123 -> ...

  7. 【ZJOI 2008】 生日聚会

    [题目链接] 点击打开链接 [算法] 动态规划 f[i][j][x][y]表示当前选了i个男生,j个女生,男生与女生差最大为x,女生与男生差最大为y的方案数 转移很显然,笔者不再赘述 [代码] #in ...

  8. 分布式缓存一致性hash算法

    当服务器不多,并且不考虑扩容的时候,可直接使用简单的路由算法,用服务器数除缓存数据KEY的hash值,余数作为服务器下标即可. 但是当业务发展,网站缓存服务需要扩容时就会出现问题,比如3台缓存服务器要 ...

  9. ubuntu 12.04 samba 配置(转载)

    转自:http://blog.sina.com.cn/s/blog_a5b607f801013av9.html 首先当然是要安装samba了,呵呵: 代码: sudo apt-get install ...

  10. MySQL基础 -- 关系代数

    MySQL基础 -- 关系代数 关系代数是一种抽象的查询语言,它用对关系的运算来表达查询.  任何一种运算都是将一定的运算符作用于一定的运算对象上,得到预期的结果.所以运算对象.运算符.运算结果是运算 ...