首页 > 数据库 >【Java】Redis保存Java对象

【Java】Redis保存Java对象

时间:2022-11-21 23:02:32浏览次数:38  
标签:Java Ecache 对象 Redis 保存 接口 byte

1. 前言

这是一篇来自2018年的文章,当时已经在现在这家公司工作。公司刚起步是购买外包公司产品做定制化开发,在开发微信版的过程中遇到了一个问题。由于微信端需要通过H5的入口进行账号的绑定,同时需要在会话过期之前定时轮询保持会话有效。这个时候需要在系统中保存微信的ApiConfig对象。

这部分之前一直由外包团队开发,他们给出的解决方案是使用Ecache来将ApiConfig整个对象保存到缓存里面。

本来这样做也是没有问题的,但是系统之前一直使用Redis进行数据缓存的。至于当时为什么要用Redis来做数据缓存呢?外包团队给出的答案是使用Ecache在集群环境下存在一些bug,所以换成Redis。

现在又说要用回Ecache,给我的感觉是项目周期太长外包团队就不想思考,怎么快就怎么做了。看到了Ecache能够整个对象保存,因此又在Redis存在的基础上再加上一个缓存而已。

2. 封装

外包团队提供的Redis的接口都是通过jedis来注入redisTemplate,然后通过redisTemplate实现对Redis Server的操作的。

【Java】Redis保存Java对象_redis

从上图中可以看出,外包团队给出的封装内容对于Redis的基本操作是能够满足平常工作的需求。但是,对于本次面临的问题这里提供的方法是不够用的。

Redis的官方文档对于Java实体是没有直接保存的接口可以调用的。这个就需要我们先转化一下实体的类型再进行保存。

我们在上图给出接口中,随便找一个set的方法来看一下,如下图:

【Java】Redis保存Java对象_redis_02

可以看到在connection.hSet中保存的是序列化内容,接着再跟踪一下hSet的接口,如下图:

【Java】Redis保存Java对象_java_03

参数都是byte[]进行传入,这个很重要。也就是说传入的内容最终还是要转化成byte数组之后才可以保存,当然java对象也是可以先转成byte数组的形式的。

2.1 新建保存对象接口

【Java】Redis保存Java对象_java_04

2.2 保存对象接口实现

【Java】Redis保存Java对象_redis_05【Java】Redis保存Java对象_redis_06

2.3 编写对象序列化工具类

【Java】Redis保存Java对象_redis_07

3. 方法调用

【Java】Redis保存Java对象_java_08

获取的时候需要分成两步,先通过hGetByte的方法获取到byte数组,然后通过RedisSerializeUtil.unserialize反序列化成一个对象再将其强制转换成ApiConfig对象。而保存的时候直接使用hSetByte保存就可以了。

标签:Java,Ecache,对象,Redis,保存,接口,byte
From: https://blog.51cto.com/u_15761576/5875422

相关文章

  • Java自定义类加载器
    通过继承java.lang.ClassLoader可以自定义类加载器。步骤:1、继承ClassLoader。2、读取字节文件到字节数组中。3、使用defineClass(类名,字节数组,off,length):将字节数组转换......
  • Java开发学习(四十二)----MyBatisPlus查询语句之条件查询
    一、条件查询的类MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合。这个我们在前面都有见过,比如查询所有和分页查询的时候,都有看到......
  • Redis基础学习一
    1.redis简介RemoteDictionaryServer(远程字典服务器),是一个用C语言编写的、开源的、基于内存运行并支持持久化的、高性能的NoSQL数据库.也是当前热门的NoSQL数据库之一......
  • java期末
    java知识1.Javac.exejava.exejavap.exejavadoc.exe的含义和用法;JavacA.javajavaAJavap?Javadoc?javac.exe是编译程序,用于编译.java文件java.exe是执行程序,......
  • idea使用oracle数据库报错《java.sql.SQLRecoverableException: IO 错误: Undefined E
    错误描述java.lang.RuntimeException:java.sql.SQLRecoverableException:IO错误:UndefinedError atcom.baomidou.mybatisplus.generator.config.DataSourceConfig.......
  • Java配置jdk环境变量
     配置:1、进入系统环境变量设置。  2、点击环境变量 3、如图所示:  4、如图所示:   5、点击确定退出配置界面检验:1、win+r,输入cmd,点击确定。 ......
  • jenkins配置从节点后运行报错java.net.ConnectException: Connection timed out: conn
    修改jenkins配置中的ip系统管理-系统配置  修改ip与访问地址相同 ......
  • 微信小程序ios保存文件预览打不开的问题
    需求:微信小程序能下载xls文件到手机容易出错的点:1、没有配置域名,因为我的文件地址是阿里云的,小程序下载的时候会报没有配置域名,(因为我本地跑的时候勾选了不效验域名,所以......
  • Java方法基础学习
    方法Java方法是语句的集合,它们在一起执行一个功能方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用设计方法的原则:原......
  • 基于Swing+Java的影院购票系统,GUI界面
    基于Swing+Java的影院购票系统基于Swing+Java的电影院院购票系统基于Swing+Java的影院售票管理系统基于Swing+Java的电影院管理系统系统功能截图1.登录2.忘记密码......