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

Spring Boot可缓存-缓存空值

姚兴安
2023-03-14

我正在使用@Cacheable注释来缓存我的方法的结果。出于性能原因,我想缓存从方法返回的null和非null值。

但是这里的问题是Spring缓存非空值,但由于某种原因没有缓存空值。

这是我的密码:

@Cacheable(
            cacheManager = "promoCacheManager",
            value = "promos:campaign",
            key = "'promos:campaign:'.concat(#currencyId)"
    )
    public PromosDto getPromosByCurrency(Integer currencyId) {

...

我什么都试过了。就连我

除非="#结果!=null||#结果==null"

但这也没什么帮助。有关于这个的指示吗?

共有2个答案

方博
2023-03-14

为什么不返回可选

宦飞
2023-03-14

检查缓存管理器设置。

例如:RedisCacheManager有一个重载构造函数,您可以在其中指定cacheNullValues;默认情况下这是false-请尝试将其设置为true。

https://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/cache/RedisCacheManager.html#RedisCacheManager-组织。springframework。数据雷迪斯。果心RedisOperations java。util。集合布尔-

还要记住:

注意:启用CacheNullValue时,请确保RedisOperations使用的重新序列化程序能够序列化NullValue。

 类似资料:
  • 我正在寻找集成Hazelcast到我的应用程序... 我的要求是将所有数据加载到缓存并从缓存中提取。。 我有两个选择。 1) Hazelcast IMap 2)因为我使用的是Spring启动,所以我可以使用(@Cacheable/@CacheEvict)。 我能得到一些建议吗... 提前谢谢你。。

  • 我在Spring3.1中使用@Cacheable。我对Cacheable中的值和键映射参数有点混淆。以下是我正在做的: 这里发生的情况是,第二个方法依赖于第一个方法的选定值,但问题是假设当我传递zoneMastNo=1和areaMastNo=1时,第二个方法返回第一个方法结果。事实上,我有很多服务,因此,我希望使用公共值来缓存特定的用例。现在我的问题是: 我如何解决这个问题 对每个服务都使用cac

  • 当你使用本地(在内存中)缓存时,服务器可以缓存一些信息并快速地检索它,但是其他服务器不能访问这个缓存数据,他们需要到数据库中查询同样的信息。 如果你喜欢使用分布式缓存让其他服务器访问缓存的数据,由于它有一些序列化/反序列化和网络延迟开销,则需要注意:在某些情况下,它可能会降低性能。 缓存需要处理的另一个问题:缓存失效。 There are only two hard things in Compu

  • Serenity 提供一些缓存抽象和实用功能让你更容易地使用本地缓存。 术语 本地(local) 的意思是指在本地内存中缓存项目(因此没有涉及到序列化)。 当你的应用程序在网站群(web farm) 中部署时,本地缓存可能还不够或者有时合适。我们将在 分布式缓存 章节中讨论该场景。

  • 我有一个Spring应用程序,它使用MyBatis进行持久化。我使用ehcache是因为速度对于这个应用程序很重要。我已经设置并配置了MyBatis和Ehcache。我使用一个名为“mybatis”的单一缓存,因为否则为每个实体创建单独的缓存将是荒谬的。 这是我的电子缓存。xml。 这是我的mybatis映射器界面的一个示例。 因为我有一个共享缓存,所以我需要一种方法使我的密钥对域对象是唯一的。作

  • Web 应用程序可能需要为成百上千甚至更多的用户同时提供服务。如果你没有采取必要的措施,在这种负载下,你的网站可能会崩溃或变得没有响应。 假设在主页显示最后 10 条新闻,并且平均每分钟有上千名用户访问此页面。你可能为每个用户通过查询数据库来显示页面视图信息: SELECT TOP 10 Title, NewsDate, Subject, Body FROM News ORDER BY NewsD