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

在Spring或Spring引导下使用Redis时,默认缓存策略是什么?

柴赞
2023-03-14

有各种各样的缓存策略,比如:缓存在一边、读通过、写通过、写在后面、写在周围。

当使用spring boot starter data Redisdependency将Redis与spring boot一起使用时,默认的缓存策略是什么。如何改变这一点。如有任何参考,将不胜感激。

共有1个答案

越学博
2023-03-14

默认情况下,将缓存放在一边,我们在Spring boot应用程序中的缓存使用情况与此类似

@Cacheable(cacheNames = "someCache")
public String cacheThis(String id){
    return "this Is it";
}

在spring boot应用程序的大多数场景中,我们缓存JPA或其他DB查询的结果。在这种情况下,我们在查询方法上添加了Cacheable,这为我们提供了cache-aside特性。

应用程序可以通过实现缓存搁置策略来模拟直通缓存的功能。这种策略会根据需要将数据加载到缓存中。

参考:https://docs.microsoft.com/en-us/azure/architecture/patterns/cache-aside

使用缓存备用模式并不总是问题的解决方案,根据您的用例,您可能必须更改缓存策略。改变缓存策略并不简单,除了一些我们从Spring框架中知道的注释,比如

  • 可缓存的

您需要更新应用程序代码以使用其他缓存策略,尽管您可以使用这些注释构建任何缓存策略。如果您不喜欢使用这些注释,那么使用实际的缓存对象,您可以随时调用缓存方法来修改缓存。

Cache myCache = cacheManager.getCache("myCache"); 

一旦有了缓存对象,就可以调用所有相关的方法,有些方法可能会因为底层缓存的限制而无法按预期工作。

 类似资料:
  • 我有以下一个批处理的Spring配置。我在生产批处理中遇到过一个问题,当一个特定的用例抛出一个不可跳过的异常时。当我在集成测试中复制用例时,批处理行为仍然很奇怪。当我的batch.commit-interval属性大于1时,将触发重试机制,回滚未提交的块,并再次处理所有以前的记录。当batch-commit-interval设置为1时,一旦抛出不可跳过的异常,批处理就会失败。 我尝试了batch-

  • 默认情况下,身份认证并不需要访问资源。当安全约束(如果有)包含的url-pattern 是请求 URI 的最佳匹配,且结合了施加在请求的 HTTP 方法上的 auth-constraint(指定的角色),则身份认证是需要的。同样,一个受保护的传输是不需要的,除非应用到请求的安全约束结合了施加在请求的HTTP方法上的 user-data-constraint(有一个受保护的transport-gua

  • 我有一个简单的Spring Boot Application结构,如下所示 pplication.java注释为 SpringConfig。java用@Configuration注释,并有一个返回DBService新实例的方法。该方法用@Bean注释 DBService类中包含了自动加载的存储库。这些存储库来自另一个项目依赖项,并提供到RDBMS/数据存储的连接。 我在applicationCon

  • 我想问一个关于spring缓存注释和存储库创建的问题。 我正在尝试使用Spring Boot在redis中缓存我的值。(我有一个值,如果它不在缓存里,我需要缓存它,如果它在缓存里,我需要从那里获取它) null 我的问题是:如果我使用了上面的注释(@Cacheable、@CachePut和@CacheEvict),我是否应该通过扩展CrudRepository来为我感兴趣存储的类对象创建一个存储库

  • 我的spring boot项目有以下配置。 此外,我还关注maven对POM的依赖。 我有一个单独的redis服务器运行在我的本地机器上的定义端口。另外,在我的服务类中,我有像@cacheable、@cacheput这样的注释来支持缓存。

  • 使用@Caching注释,spring允许向单个方法添加多个@Cacheable注释。由于可以使用@Cacheable进行条件缓存,因此注释和条件的计算顺序是什么?如果多个缓存的计算结果为true,则值是否存储在多个缓存中?同样,在缓存获取期间,是否并行计算所有条件,并从条件计算为true的任何缓存中获取值? 例如: