【Java】Redis 保存 Java 对象_redis保存数据

createh54个月前 (02-05)技术教程28

1. 前言

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

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

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

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

2. 封装

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

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

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

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

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

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

2.1 新建保存对象接口

2.2 保存对象接口实现

2.3 编写对象序列化工具类

3. 方法调用

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

相关文章

浅析Java反射_java反射的用处

前言上篇文章我们提到了可以使用反射机制破解单例模式。这篇文章我们就来谈一谈什么是反射,反射有什么用,怎么用,怎么实现反射。概述Java的反射(reflection)机制:是指在程序的运行状态中,可以构...

求你了,别再说 Java 对象都是在堆内存上分配空间了

作者 l Hollis本文经授权转载自Hollis(ID:hollischuang)Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点,所以,即使是一个Java的初学者,也一定...

详解 java.util.Arrays 的使用技巧

创建我们来看看,使用Arrays 怎么创建一个新的数组,一般来说,我们可以使用Arrays 的 copyOf , copyOfRange 和 fill 方法。copyOf 和 copyOfRange要...

JVM对象的创建过程_java创建对象的语句

对象的创建过程new对象image-202302261445419191:首先判断这个类有没有加载过,没有加载过的先加载到我们JVM内存中。2:分配内存指针碰撞:默认使用,如果JVM堆中内存绝对规整,...

JVM的内存模型详解_jvm内存模型及作用

总体架构图中,JVM内存模型主要包括三个系统:类加载系统:负责加载Java类的字节码文件,并将其转换为JVM内部的数据结构。运行时数据区:用于存储JVM运行时需要的各种数据方法区:存储类的结构信息(如...