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

如何在Spring JPA中实现缓存

楮景明
2023-03-14

1)我想从缓存中获得数据,如果缓存中没有数据,那么应该从数据库中获取数据。

2)如果我点击/api/cacherefresh,控制器将刷新所有表。

共有1个答案

蓬野
2023-03-14

在一个典型的应用程序中,您将有如下图层:

  • 存储库,它们可以访问您的“存储”,例如db、nosql等,以及通过例如rest调用来自外部服务的数据
  • 服务,这些服务可能包含也可能不包含业务逻辑,并使用存储库收集应用该业务逻辑所需的所有数据

您通常不会在存储库层上放置缓存,而是应该在服务层上进行缓存。因此,为了回答您的问题,您应该让JPA存储库尽可能干净,并在访问存储库的服务上添加@cacheable/@cacheevict注释,例如:

public class MyService {

    private final MyRepository repository;

    public MyService(MyRepository repository) {
        this.repository = repository;
    }

    @Cacheable
    public MyItem findOne(Long id) {
        return repository.findOne(id);
    }

    @Cacheable
    public List<MyItem> findAll() {
        return repository.findAll();
    }

    @CacheEvict
    public void evict() {

    }

}
 类似资料:
  • 问题内容: 不要说EHCache或OSCache等。出于这个问题的目的,假设我想仅使用SDK实现自己的实现(边做边学)。考虑到缓存将在多线程环境中使用,你将使用哪些数据结构?我已经使用LinkedHashMap和Collections#synchronizedMap实现了一个,但是我很好奇是否有任何新的并发集合会更好。 更新:当我发现这个块时,我只是在阅读Yegge的最新文章: 如果你需要固定时间

  • 我正在开发一个Web应用程序,其中后端在Spring引导中开发,消耗公共API中返回JSON中数据的数据。搜索是通过术语、全文(像谷歌)完成的,后端从应用程序前端接收用户的查询,用户的查询反过来搜索公共应用编程接口,等待响应,处理信息并将其发送到前端。我想在后端Spring Boot中实现缓存系统。基本上,在Spring引导调用API发布并等待响应之前,它会检查键/值系统是否已经在过去完成了搜索,

  • 本文向大家介绍如何在 Java 中实现一个 redis 缓存服务,包括了如何在 Java 中实现一个 redis 缓存服务的使用技巧和注意事项,需要的朋友参考一下 缓存服务的意义 为什么要使用缓存?说到底是为了提高系统的运行速度。将用户频繁访问的内容存放在离用户最近,访问速度最快的地方,提高用户的响应速度。一个 web 应用的简单结构如下图。 web 应用典型架构 在这个结构中,用户的请求通过用户

  • 我在删除联接表中引用的实体时遇到问题。以下是三个链接的enitie。 当我尝试使用CrudRepository从来宾表中删除来宾时,它会给我这个错误。 错误:表“guest”上的更新或删除违反了表“guest\u group\u join”上的外键约束“FKKOUGVMCU860MOUACR1SHJXY”。键(id)=(4)仍然从表“guest\u group\u join”中引用。 有人能帮忙吗

  • 问题内容: 最少使用(LFU)是一种高速缓存算法,用于管理计算机内的内存。此方法的标准特性涉及系统跟踪内存中块被引用的次数。当缓存已满且需要更多空间时,系统将以最低参考频率清除项目。 例如,用Java来实现最近使用的对象缓存的最佳方法是什么? 我已经使用LinkedHashMap实现了一个(通过保持访问对象的次数),但是我很好奇是否有任何新的并发集合会更好。 考虑这种情况:假设缓存已满,我们需要为

  • vue3中使用keep-alive中include属性来缓存router-view 在第一层子级下缓存是生效得 但是在第二级缓存就不生效了 最终想实现得是在全局layout实现个页面缓存(不仅只有两级children还会有更多)、通过组件得name值配置或者路由信息配置 请求大佬指教������