我有一个使用Redis进行缓存的Java Web服务。最初我创建了一个CacheService,它直接访问Redisson客户端以处理缓存。我最近重构了缓存处理以使用Spring Cache抽象,这使得代码更加清晰并鼓励模块化设计。不幸的是,Spring使用Jackson来序列化/反序列化缓存的对象,导致缓存的值比以前大得多,因为类型信息存储在JSON中。这导致从高速缓存读取的响应时间的不可接受的增加。有没有办法自定义Spring序列化和反序列化缓存内容的方式?我想用我自己的逻辑替换它,但在文档中看不到任何内容。如果可能的话,我宁愿不必滚动自己的AspectJ缓存实现。
答案 0 :(得分:2)
RedisCacheManager
需要RedisOperations
,您可以在那里配置序列化的工作原理。您可以调整键和值的序列化,但我怀疑键应该使用StringRedisSerializer
。
答案 1 :(得分:0)
Redisson也有Spring Cache integration。它支持许多流行的编解码器:Jackson JSON,Avro,Smile,CBOR,MsgPack,Kryo,FST,LZ4,Snappy和JDK Serialization。
以下是一个例子:
@Bean
CacheManager cacheManager(RedissonClient redissonClient) {
Codec codec = new JsonJacksonCodec();
Map<String, CacheConfig> config = new HashMap<String, CacheConfig>();
config.put("testMap", new CacheConfig(24*60*1000, 12*60*1000));
return new RedissonSpringCacheManager(redissonClient, config, codec);
}