spring数据jpa做缓存

问题描述 投票:0回答:1

我有一个看起来像这样的简单存储库

public interface PlayerLevelRepository extends CrudRepository<PlayerLevel, Integer> {
    @Query("FROM PlayerLevel WHERE exp <= :exp ORDER BY exp DESC")
    List<PlayerLevel> findClosestToExperienceLevel(@Param("exp") long exp);
}

我正在分析休息时间的响应时间,并发现第一次休息执行速度比下一次慢十倍。

所以我决定检查一下存储库方法的时间(我没有任何其他耗时的操作),就像这样

@Override
public int findClosestLevel(long exp) {
    long startTime = System.nanoTime();

    int closestLevel = levelRepository.findClosestToExperienceLevel(exp).get(0).getLevel();

    long endTime = System.nanoTime();
    LOGGER.info("Execution time: {}", endTime - startTime);
    return closestLevel;
}

我看到第一次调用花费35012440 aka 35 ms。第二次,第三次和其他调用时间减少十倍 - 21947122ms30584213ms等等。

我的问题是 - Spring Data JPA缓存查询结果的东西吗?

java spring caching spring-data-jpa
1个回答
3
投票

Spring Data JPA“仅仅”是JPA的一个包装器(或者很好的外观),因此在下面你仍然具有标准的JPA功能。你在EntityManager / Session级别有1lvl缓存,在EntityManagerFactory / SessionFactory级别有2lvl缓存。有更多类型的缓存,如:查询结果缓存等。您可以阅读更多关于它们here(它是旧的Hibernate版本,但它应该仍然有效)。

© www.soinside.com 2019 - 2024. All rights reserved.