多语言展示
当前在线:139今日阅读:19今日分享:20

如何基于Spring提供的Cache抽象和Redis实现缓存

缓存从大的方向上可以分为进程内缓存(即JVM内部缓存)和进程外缓存(即第三方系统缓存),相比而言,前者因为无须Socket通信而更加高效,但在集群环境下会出现多个缓存不一致的问题,如果无法容忍这一点,则进程外缓存就是比较好的选择了。目前有很多第三方组件可以实现进程外缓存,比如Redis,Memcache等,本篇经验就分享一下如何基于 Spring Cache 抽象和Redis来实现进程外缓存系统。
工具/原料

Spring Boot,Eclipse,Redis

方法/步骤
1

准备环境,创建工程 通过 Spring Initializr 创建一个基于 SpringBoot 的应用,涉及的依赖有 Spring Cache Abstraction(Spring缓存抽象),Spring Data Redis(Spring封装的Redis相关依赖),Spring Data JPA,H2 Database,Lombok。工程导出后,导入到Eclipse中。

2

创建相关的实体类,Repository类和Service类图1示:实体类,需要使用 @Entity 注解,并且使用了 @Data @Builder @EqualsAndHashCode等Lombok注解简化代码开发图2示:Repository类,继承 Spring Data JPA 提供的 JpaRepository 即可图3示:Service类,使用 @CacheConfig 注解,定义缓存名称,注入 Repository类对象,定义一个用于获取所有实体类对象的方法,并使用 @Cacheable 注解,表明对该方法返回值进行缓存

3

application.properties中添加配置信息,主要添加的配置信息包括:1. JPA根据实体类自动建表,并在控制台输出SQL语句2. Redis服务器地址和端口信息3. Spring Cache相关信息,包括使用 redis 作为cache主体,并配置cache过期时间等

4

添加初始化数据在 resources 目录中添加 data.sql 文件,包含初始化数据,这些数据在Spring启动时,会自动添加到表中,注意,这种方式只适用于H2这种内存型数据库。

5

启动类编写测试代码启动类添加 @EnableJpaRepositories、@EnableCaching、@Slf4j 等注解,并实现 CommandLineRunner 接口,在实现的 run 方法中,调用注入的 Service 类实例多次查询数据,线程休眠一段时间(等待缓存过期),再次查询,观察控制台输出。

推荐信息