方式一:序列化操作

  1.  
    public class SerializeUtil {
  2.  
    /*
  3.  
    * 序列化
  4.  
    * */
  5.  
    public static byte[] serizlize(Object object){
  6.  
    ObjectOutputStream oos = null;
  7.  
    ByteArrayOutputStream baos = null;
  8.  
    try {
  9.  
    baos = new ByteArrayOutputStream();
  10.  
    oos = new ObjectOutputStream(baos);
  11.  
    oos.writeObject(object);
  12.  
    byte[] bytes = baos.toByteArray();
  13.  
    return bytes;
  14.  
    } catch (Exception e) {
  15.  
    e.printStackTrace();
  16.  
    }finally {
  17.  
    try {
  18.  
    if(baos != null){
  19.  
    baos.close();
  20.  
    }
  21.  
    if (oos != null) {
  22.  
    oos.close();
  23.  
    }
  24.  
    } catch (Exception e2) {
  25.  
    e2.printStackTrace();
  26.  
    }
  27.  
    }
  28.  
    return null;
  29.  
    }
  30.  
    /*
  31.  
    * 反序列化
  32.  
    * */
  33.  
    public static Object deserialize(byte[] bytes){
  34.  
    ByteArrayInputStream bais = null;
  35.  
    ObjectInputStream ois = null;
  36.  
    try{
  37.  
    bais = new ByteArrayInputStream(bytes);
  38.  
    ois = new ObjectInputStream(bais);
  39.  
    return ois.readObject();
  40.  
    }catch(Exception e){
  41.  
    e.printStackTrace();
  42.  
    }finally {
  43.  
    try {
  44.  
     
  45.  
    } catch (Exception e2) {
  46.  
    e2.printStackTrace();
  47.  
    }
  48.  
    }
  49.  
    return null;
  50.  
    }
  51.  
    }

获取jedis实例

  1.  
    public class RedisConnection {
  2.  
    private static String HOST = "127.0.0.1";
  3.  
    private static int PORT = 6379;
  4.  
    private static int MAX_ACTIVE = 1024;
  5.  
    private static int MAX_IDLE = 200;
  6.  
    private static int MAX_WAIT = 10000;
  7.  
     
  8.  
    private static JedisPool jedisPool = null;
  9.  
     
  10.  
    /*
  11.  
    * 初始化redis连接池
  12.  
    * */
  13.  
    private static void initPool(){
  14.  
    try {
  15.  
    JedisPoolConfig config = new JedisPoolConfig();
  16.  
    config.setMaxTotal(MAX_ACTIVE);//最大连接数
  17.  
    config.setMaxIdle(MAX_IDLE);//最大空闲连接数
  18.  
    config.setMaxWaitMillis(MAX_WAIT);//获取可用连接的最大等待时间
  19.  
     
  20.  
    jedisPool = new JedisPool(config, HOST, PORT);
  21.  
    } catch (Exception e) {
  22.  
    e.printStackTrace();
  23.  
    }
  24.  
    }
  25.  
     
  26.  
    /*
  27.  
    * 获取jedis实例
  28.  
    * */
  29.  
    public synchronized static Jedis getJedis() {
  30.  
    try {
  31.  
    if(jedisPool == null){
  32.  
    initPool();
  33.  
    }
  34.  
    Jedis jedis = jedisPool.getResource();
  35.  
    jedis.auth("redis");//密码
  36.  
    return jedis;
  37.  
    } catch (Exception e) {
  38.  
    e.printStackTrace();
  39.  
    return null;
  40.  
    }
  41.  
    }
  42.  
    }

redis操作

  1.  
    public class RedisOps {
  2.  
    public static void set(String key,String value){
  3.  
    Jedis jedis = RedisConnection.getJedis();
  4.  
    jedis.set(key, value);
  5.  
    jedis.close();
  6.  
    }
  7.  
    public static String get(String key){
  8.  
    Jedis jedis = RedisConnection.getJedis();
  9.  
    String value = jedis.get(key);
  10.  
    jedis.close();
  11.  
    return value;
  12.  
    }
  13.  
    public static void setObject(String key,Object object){
  14.  
    Jedis jedis = RedisConnection.getJedis();
  15.  
    jedis.set(key.getBytes(), SerializeUtil.serizlize(object));
  16.  
    jedis.close();
  17.  
    }
  18.  
    public static Object getObject(String key){
  19.  
    Jedis jedis = RedisConnection.getJedis();
  20.  
    byte[] bytes = jedis.get(key.getBytes());
  21.  
    jedis.close();
  22.  
    return SerializeUtil.deserialize(bytes);
  23.  
    }
  24.  
    }

实体类

  1.  
    public class User implements Serializable{
  2.  
    private static final long serialVersionUID = -3210884885630038713L;
  3.  
    private int id;
  4.  
    private String name;
  5.  
    public User(){
  6.  
     
  7.  
    }
  8.  
    public User(int id,String name){
  9.  
    this.id = id;
  10.  
    this.name = name;
  11.  
    }
  12.  
    //setter和getter方法
  13.  
    }

测试用例

  1.  
    public class RedisTest {
  2.  
     
  3.  
    @Test
  4.  
    public void testString(){
  5.  
    RedisOps.set("user:1", "sisu");
  6.  
    String user = RedisOps.get("user:1");
  7.  
    Assert.assertEquals("sisu", user);
  8.  
    }
  9.  
     
  10.  
    @Test
  11.  
    public void testObject(){
  12.  
    RedisOps.setObject("user:2",new User(2,"lumia"));
  13.  
    User user = (User)RedisOps.getObject("user:2");
  14.  
    Assert.assertEquals("lumia", user.getName());
  15.  
    }
  16.  
     
  17.  
    }

方式二:使用fastjson将对象转为json字符串后存储

  1.  
    public class RedisOps {
  2.  
    public static void setJsonString(String key,Object object){
  3.  
    Jedis jedis = RedisConnection.getJedis();
  4.  
    jedis.set(key, JSON.toJSONString(object));
  5.  
    jedis.close();
  6.  
    }
  7.  
    public static Object getJsonObject(String key,Class clazz){
  8.  
    Jedis jedis = RedisConnection.getJedis();
  9.  
    String value = jedis.get(key);
  10.  
    jedis.close();
  11.  
    return JSON.parseObject(value,clazz);
  12.  
    }
  13.  
    }

测试:

  1.  
    @Test
  2.  
    public void testObject2(){
  3.  
    RedisOps.setJsonString("user:3", new User(3,"xiaoming"));
  4.  
    User user = (User)RedisOps.getJsonObject("user:3",User.class);
  5.  
    Assert.assertEquals("xiaoming", user.getName());
  6.  

Redis:存储对象的两种方式(序列化和json字符串)的更多相关文章

  1. Redis 备份数据的两种方式

    既然是数据库,那就一定有数据备份方式了,而且 Redis 是内存形式的数据库,更需要数据备份了,要不然断电数据就全都丢失了. Redis 数据备份有两种方式: RDB(数据快照) AOF(记录操作日志 ...

  2. iOS:创建单例对象的两种方式

    单例模式:创建单例对象的两种方式 方式一:iOS4版本之前      static SingleClassManager *singleManager = nil;      +(SingleClas ...

  3. Python与数据库[2] -> 关系对象映射/ORM[2] -> 建立声明层表对象的两种方式

    建立声明层表对象的两种方式 在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 from sqlalchemy.sql.schema i ...

  4. Java反射02 : Class对象获取的三种方式和通过反射实例化对象的两种方式

    1.Class对象获取的三种方式 本文转载自:https://blog.csdn.net/hanchao5272/article/details/79361463 上一章节已经说过,一般情况下,Jav ...

  5. Redis数据持久化的两种方式RDB和AOF

    由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁 盘上,当redis重启后,可以从磁盘中恢复数据.redis提 ...

  6. Asp.net Web API 返回Json对象的两种方式

    这两种方式都是以HttpResponseMessage的形式返回, 方式一:以字符串的形式 var content = new StringContent("{\"FileName ...

  7. Redis的持久化的两种方式drbd以及aof日志方式

    redis的持久化配置: 主要包括两种方式:1.快照  2 日志 来看一下redis的rdb的配置选项和它的工作原理: save 900 1 // 表示的是900s内,有1条写入,则产生快照 save ...

  8. JS中访问对象的两种方式区别

    可以使用下面两种方式访问对象的属性和方法 1.对象名.属性名 对象名.方法名() 2.对象名["属性名"] 对象名["方法名"]() var obj = { n ...

  9. hibernate载入持久化对象的两种方式——get、load

    一.get与load对照 在hibernate中get和load方法是依据id取得持久化对象的两种方法.但在实际使用的过程中总会把两者混淆,不知道什么情况下使用get好,什么时候使用load方法效率更 ...

随机推荐

  1. c语言学习笔记 scanf和printf格式的问题

    int a =0; int b =0; scanf("%d %d",&,&b); 上面这种和下面这种哪种对? int a =0; int b =0; scanf(& ...

  2. 初识Servlet(JSP)

    Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层.  Servle ...

  3. 按失真类型分类整理TID2008

    对于图像质量评价(IQA)数据库,TID2008算是不大不小的数据集了.TID2008是由乌克兰国家航空航天大学的N504信号接收.传输与处理系建立,包括25幅参考图像,1700幅失真图像.失真类型有 ...

  4. Axure RP7.0移动互联网产品原型设计 中文pdf扫描版

    移动互联网原型设计,简单来说,就是使用建模软件制作基于手机或者平板电脑的App,HTML 5网站的高保真原型.在7.0 之前的版本中,使用Axure RP进行移动互联网的建模也是可以的.比如,对于桌面 ...

  5. [C# 线程处理系列]专题四:线程同步

    目录: 一.线程同步概述 二.线程同步的使用 三 .总结 一.线程同步概述 前面的文章都是讲创建多线程来实现让我们能够更好的响应应用程序,然而当我们创建了多个线程时,就存在多个线程同时访问一个共享的资 ...

  6. SqlServer学习笔记【暂】

    Sql学习笔记,暂时先保存在着,等不忙了再整理成章节,如果其中有问题的,还请各位大神不吝赐教! --------------------------------------所有的数据基于Northwi ...

  7. CentOS6.5上Zabbix3.0的RPM安装【一】-安装并配置Server

    一.Environment OS:CentOS6.5 64bit [桌面版安装] Server端:192.168.201.109 ServerName Clinet端:192.168.201.199 ...

  8. Python3 中hashlib及uuid的用法

    Python3 中hashlib及uuid的用法: 可以生成随机ID import uuid import hashlib import time def creat_uuid(): return s ...

  9. iOS 12中无法获取WiFi的SSID了?

    1.现象描述 2018年苹果升级iOS12之后,没有办法获取wifi名称等信息. 2.获取wifi信息 2.1 获取代码 /************ 控制器的view 加载完毕 的时候调用 ***** ...

  10. Mybatis环境搭建中的案例分析 及 如果自己编写DAO接口的实现类

    Mybatis环境搭建中的案例分析public static void main (String[] args) throws Exception { //读配置文件 //第一个: 使用类加载器,只能 ...