是否可以自定义 Spring 缓存抽象使用的序列化



我有一个使用 Redis 进行缓存的 Java Web 服务。 最初,我创建了一个直接访问 Redisson 客户端以处理缓存的 CacheService。 我最近重构了缓存处理以使用 Spring 缓存抽象,这使得代码更加清晰并鼓励模块化设计。 不幸的是,Spring 使用 Jackson 来序列化/反序列化缓存的对象,由于类型信息存储在 JSON 中,导致缓存的值比以前大得多。 这导致从缓存读取的响应时间增加,这是不可接受的。 有没有办法自定义 Spring 序列化和反序列化缓存内容的方式? 我想用我自己的逻辑替换它,但在文档中看不到任何内容。 如果可能的话,我宁愿不必滚动我自己的 AspectJ 缓存实现。

RedisCacheManager需要RedisOperations,您可以在其中配置序列化的工作方式。您可以调整键和值的序列化,尽管我怀疑键应该使用StringRedisSerializer

> Redisson 还提供了 Spring Cache 集成。它支持许多流行的编解码器: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);
}

最新更新