当前位置: 首页 > 知识库问答 >
问题:

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

宰父远
2023-03-14

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

共有2个答案

凌轶
2023-03-14

Redisson还提供了Spring缓存集成。它支持许多流行的编解码器:Jackson JSON、Avro、Smile、CBOR、MsgPack、Kryo、FST、LZ4、Snappy和JDK序列化。

下面是一个示例

@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);
}
燕志学
2023-03-14

RedisCacheManager采用RedisOperations,您可以在那里配置序列化的工作方式。您可以调整键和值的序列化,尽管我认为键应该使用StringRedisSerializer。

 类似资料:
  • 也许我跑错了方向,但我有一个元素列表,我想读。 我有一个抽象基类,让我们称之为: 现在我有两个可能的实现:

  • 问题内容: 我有一些需要经常打印的结构。现在,我正在围绕该结构使用经典的打印包装器: 此功能很方便,但实际上也很有限。如果不进行新包装,则无法添加或添加一些文本。我知道我可以使用 va_arg 系列添加或添加一些文本,但是我觉得我会重新实现。 我想知道是否有可能向printf编写自定义函数。我希望能够写这样的东西: 这可能吗 ?我怎样才能做到这一点 ? 注意:我在Ubuntu Linux 10.0

  • 问题内容: 我了解是可序列化的。因此,这样做是安全的。(selectedCountry是) 没有客户成员变量的原始枚举 分段 但是,如果我在自定义枚举类中有不可序列化的成员,该怎么办?例如, 原始枚举客户成员变量 我测试了 有用。(我通过在序列化之前和之后打印出所有成员变量的值进行了测试。它们在前后均相同) 但是,我不明白为什么会起作用? 由于我没有提供适当的和,因此需要界面提供。 如有效Java

  • 问题内容: 我有协议(如http),其方案由在Mac OS XIe中注册的第3方应用程序,x-someapp:// someaction或类似的东西管理。 如何使用Google Chrome浏览器打开此URL?默认情况下,Chrome开始在Google引擎中搜索,而不是启动App并将URL处理传递给它。 Safari启动一些已注册的应用程序。这是对的。 Firefox和Opera问该怎么办…,我也

  • 这是我的代码(简单但有效),它是一个计算引擎,通过按特定顺序应用规则进行试验: 我想用自定义注释对此进行编码,因为我的目标是统计哪些引擎调用哪些规则,我认为这会更容易: 然后我可以用org扫描。springframework。上下文注释。ClassPathScanningCandidateCom使统计更容易。 这可能吗(怎么可能?)?这是好办法吗?我还有别的办法吗?

  • 问题内容: 例如,我的csv具有以下列: 我需要以相同的顺序写回列。该立即搅乱秩序,所以我相信它更与读者的问题。 问题答案: Python的不会在3.6之前保持顺序(但是,无论该版本如何,该类都被修改为返回s)。 然而,实例您使用(你读过的第一行后- !) 确实 有一个字符串列表,其中 IS 秩序。 所以, 会告诉你的是,为了确实维护(中当然, 千万不要 在-这是在Python本质上是不可能的-