我使用的是Spring数据缓存,使用Redis作为缓存管理器。配置如下:
return RedisCacheManager.builder(redisConnectionFactory)
.cacheDefaults(
RedisCacheConfiguration.defaultCacheConfig()
.serializeKeysWith(SerializationPair.fromSerializer(RedisSerializer.string()))
.serializeValuesWith(SerializationPair.fromSerializer(RedisSerializer.json()))
)
.build()
让我们想象一个使用spring数据缓存的非常简单的例子:
@Cacheable(...)
MyPOJO compute() { ... }
但是,RedisSerializer.json()确实是一个GenericJackson2JsonRedisSerializer。因此,恕我直言,它将存储像{"Hello":"world","@class":"com.my.name.some.package.MyPOJO"}
这样的东西。@class:...
部分很长,在Redis中浪费了宝贵的内存。此外,恕我直言Spring Data Cache应该足够聪明,能够意识到值类型确实是MyPOJO
,因此它不应该需要存储那个"@class"
。
因此,我的问题是:在Spring Data Cache Redis CacheManager中,如何避免在序列化JSON中存储类名,这会浪费大量空间?
谢谢你的建议!
您研究过GenericJackson2JsonRedisSerializer的实现吗?看起来默认的对象映射器配置为使用Jacksons多态类型功能。但也有一个选项可以像这样传递自定义ObjectMapper:
SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer(objectMapper))
您可以配置并传递自定义Jacksons对象映射器,包括或不包括类型信息。有几种方法可以配置类型信息的存储方式(如果您确实需要):https://github.com/FasterXML/jackson-docs/wiki/JacksonPolymorphicDeserialization
在早期版本中,Spring没有配置类型信息,如图所示:如何使用GenericJackson2JsonRedisSerializer在较新的版本中,这一点似乎有所改变。但是,仍然可以根据需要配置序列化程序。
问题内容: 我使用hibernate方式检索兄弟列表 Hibernate是在兄弟列表中使用惰性选择配置的,在Java端这是可行的,但是问题是当我想将Brother对象序列化为JSON时。 例如,布莱恩(Bryan)可以将马克(Mark)当作兄弟,反之亦然… 我该如何解决?有什么办法可以指示对杰克逊库的最大递归次数? 我的代码,真的很简单。 问题答案: 由于 循环参考出现问题 。 由于您可以使用两个
我正在使用Jackson 2库,我正在尝试反序列化JSON响应,如下所示: 出于某些原因,我的员工数组中有一个空元素。在反序列化过程中,是否可以丢弃该元素并避免反序列化它?目前,我的代码将空员工反序列化为具有空字段的员工 POJO 类。 我的代码如下所示: 附言。我不能碰JSON响应。它就是这样…
问题内容: 最近,我被分配创建拍卖系统的任务。在我的工作中,我遇到了无数次由于列名不明确而导致包含联接的SQL查询无法执行的情况。考虑以下(简化的)拍卖表结构: 表: (创建拍卖的用户的ID) 表: (添加项目的用户的ID) (有该物品的拍卖的ID) (初始价格) 表: 表: (出价的用户的ID) (已提高价格的项目) (优惠价格) 如您所见,有许多列具有冲突的名称。连接这些表需要采取一些措施来消
我试图在Laravel中加入3个表后查看特定表的日期。但是它只显示一个表的信息。 下面是连接3个表的代码: 路由文件: 下面是查看刀片模板中信息的脚本 刀片中的代码: 这里我想查看发票的创建日期,但它显示了subscribers表中订户的创建日期。但我想从发票表中查看发票的具体日期。 我该怎么做?当做
我有一个错误: 我一直试图避免导致此被序列化的字段,但错误没有得到纠正。我试图把@JsonIgnore放在任何地方,在getter、setter、属性和所有可能的组合中。 谢啦 - 我无法导入com。谷歌。阿彭金。重新包装。组织。科德豪斯。杰克逊。注释JsonIgnoreProperties说,“使用com.google.appengine.repacked可能会导致你的应用程序在没有警告的情况下
我有一个由Spring MVC框架构建的RESTful项目,使用Mybatis ORM。 我启用了延迟加载,这样当我查询 Book 时,它不会查询 Author,除非我调用 book.getAuthor() 方法,并且一切正常。 但是,当 RESTful 控制器返回 Book 对象时,它使用 Jackson 将 Book 对象传输到 json,并触发 mybatis 加载 Author 对象。 有