背景
以Spring boot 1.x为例,结合redis做数据缓存,下面将讲述Spring缓存与java对象缓存。
Spring缓存
@Cacheable方法,关于用法,网上已经有很多这样的例子,这里不展开了,主要要注意Spring boot 1.x与2.x的调用区别、统一命名格式的定义、默认使用JDK序列化还是JSON序列化。
- JDK序列化:
- 优点:反序列化不需指定类型
- 缺点:速度慢、无序列化类型不能使用
- JSON序列化(FastJSON/Jackson):
- 优点:速度快、根据getter/setter进行处理所有类型通用
- 缺点:反序列化需指定类型
所以,个人觉得JDK序列化更适合无严格性能要求的通用场景,而JSON序列化适用于性能要求较快的定制场景。
注解在DAO层
通过注解到DAO层的增删改查,使得业务层不需要在做修改就能使用,不用动业务层的大量方法,逻辑清晰,缺点是存储的是POJO对象,每次请求都需要额外转换成VO对象。
注解在Service层(推荐)
在业务层上进行注解,必须声明哪些方法需要缓存,哪些方法需要清理缓存,由于业务层开发时频繁改动,维护起来很麻烦,优点是缓存的直接是经过业务逻辑处理后的结果,无需再进一步处理,速度较注解在DAO层上更高。
JAVA对象缓存
这种就是最原始的缓存方式,也是最快的,因为没有转换,通过直接存入到对象里来进行使用。要注意堆内存和栈内存的区别,也要注意并发带来的问题,比较适合数据量少的核心数据存储,毕竟核心数据一般不适宜存redis里。