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,Ecache,对象,Redis,保存,接口,byte From: https://blog.51cto.com/u_15761576/5875422