无名 发表于 2022-5-8 17:02:31

【LSP】Spring Boot 2.x基础教程:EhCache


http://cdn.u1.huluxia.com/g4/M01/66/00/rBAAdl91ajOAd8hKAACt4WdlvYs776.jpg
上一篇我们学会了如何使用Spring Boot使用进程内缓存在加速数据访问。可能大家会问,那我们在Spring Boot中到底使用了什么缓存呢?

在Spring Boot中通过@EnableCaching注解自动化配置合适的缓存管理器(CacheManager),Spring Boot根据下面的顺序去侦测缓存提供者:

Generic
JCache (JSR-107) (EhCache 3, Hazelcast, Infinispan, and others)
EhCache 2.x
Hazelcast
Infinispan
Couchbase
Redis
Caffeine
Simple
除了按顺序侦测外,我们也可以通过配置属性spring.cache.type来强制指定。我们也可以通过debug调试查看cacheManager对象的实例来判断当前使用了什么缓存。在上一篇中,我们也展示了如何去查看当前使用情况。

当我们不指定具体其他第三方实现的时候,Spring Boot的Cache模块会使用ConcurrentHashMap来存储。而实际生产使用的时候,因为我们可能需要更多其他特性,往往就会采用其他缓存框架,所以接下来我们会分几篇分别介绍几个常用优秀缓存的整合与使用。

使用EhCache
本篇我们将介绍如何在Spring Boot中使用EhCache进程内缓存。这里我们将沿用上一篇的案例结果来进行改造,以实现EhCache的使用。

先回顾下这个基础案例的三个部分:

User实体的定义

@Entity
@Data
@NoArgsConstructor
public class User {

    @Id
    @GeneratedValue
    private Long id;

    private String name;
    private Integer age;

    public User(String name, Integer age) {
      this.name = name;
      this.age = age;
    }
}
User实体的数据访问实现(涵盖了缓存注解)

@CacheConfig(cacheNames = "users")
public interface UserRepository extends JpaRepository<User, Long> {

    @Cacheable
    User findByName(String name);

}
测试验证用例(涵盖了CacheManager的注入,可用来观察使用的缓存管理类)

@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class Chapter51ApplicationTests {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private CacheManager cacheManager;

    @Test
    public void test() throws Exception {
      // 创建1条记录
      userRepository.save(new User("AAA", 10));

      User u1 = userRepository.findByName("AAA");
      System.out.println("第一次查询:" + u1.getAge());

      User u2 = userRepository.findByName("AAA");
      System.out.println("第二次查询:" + u2.getAge());
    }

}
接下来我们通过下面的几步操作,就可以轻松的把上面的缓存应用改成使用ehcache缓存管理。http://cdn.u1.huluxia.com/g4/M01/66/00/rBAAdl91ajSAFmJ5AAIPhr5UCg0646.jpg
页: [1]
查看完整版本: 【LSP】Spring Boot 2.x基础教程:EhCache