文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

springboot如何集成spring cache

2023-06-19 12:10

关注

这篇文章给大家分享的是有关springboot如何集成spring cache的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

声明式缓存

Spring 定义 CacheManager 和 Cache 接口用来统一不同的缓存技术。例如 JCache、 EhCache、 Hazelcast、 Guava、 Redis 等。在使用 Spring 集成 Cache 的时候,我们需要注册实现的 CacheManager 的 Bean。

Spring Boot 为我们自动配置了 JcacheCacheConfiguration、 EhCacheCacheConfiguration、HazelcastCacheConfiguration、GuavaCacheConfiguration、RedisCacheConfiguration、SimpleCacheConfiguration 等。

默认使用 ConcurrenMapCacheManager

在我们不使用其他第三方缓存依赖的时候,springboot自动采用ConcurrenMapCacheManager作为缓存管理器。

环境依赖

在pom文件引入spring-boot-starter-cache环境依赖:

<dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-cache</artifactId></dependency>

创建一个book数据访问层

先创建一个实体类

 public class Book {    private String isbn;    private String title;    public Book(String isbn, String title) {        this.isbn = isbn;        this.title = title;    }  ....getter  ....setter   }

创建一个数据访问接口

public interface BookRepository {    Book getByIsbn(String isbn);}

这个你可以写一个很复杂的数据查询操作,比如操作mysqlnosql等等。为了演示这个栗子,我只做了一下线程的延迟操作,当作是查询数据库的时间。

实现接口类:

@Componentpublic class SimpleBookRepository implements BookRepository {    @Override    public Book getByIsbn(String isbn) {        simulateSlowService();        return new Book(isbn, "Some book");    }    // Don't do this at home    private void simulateSlowService() {        try {            long time = 3000L;            Thread.sleep(time);        } catch (InterruptedException e) {            throw new IllegalStateException(e);        }    }}

测试类

@Componentpublic class AppRunner implements CommandLineRunner {    private static final Logger logger = LoggerFactory.getLogger(AppRunner.class);    private final BookRepository bookRepository;    public AppRunner(BookRepository bookRepository) {        this.bookRepository = bookRepository;    }    @Override    public void run(String... args) throws Exception {        logger.info(".... Fetching books");        logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));        logger.info("isbn-4567 -->" + bookRepository.getByIsbn("isbn-4567"));        logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));        logger.info("isbn-4567 -->" + bookRepository.getByIsbn("isbn-4567"));        logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));        logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));    }}

启动程序,你会发现程序在控制台依次打印了:

2014-06-05 12:15:35.783  … : …. Fetching books

2014-06-05 12:15:40.783  … : isbn-1234 → >Book{isbn=’isbn-1234’, title=’Some book’}

2014-06-05 12:15:43.784  … : isbn-1234 →Book{isbn=’isbn-1234’, title=’Some book’}

2014-06-05 12:15:46.786  … : isbn-1234 →Book{isbn=’isbn-1234’, title=’Some book’}

你会发现程序依次3s打印一行日志。这时还没开启缓存技术。

开启缓存技术

在程序的入口中加入@ EnableCaching开启缓存技术:

@SpringBootApplication@EnableCachingpublic class DemoApplication {    public static void main(String[] args) {        SpringApplication.run(DemoApplication.class, args);    }}

在需要缓存的地方加入@Cacheable注解,比如在getByIsbn()方法上加入@Cacheable(“books”),这个方法就开启了缓存策略,当缓存有这个数据的时候,会直接返回数据,不会等待去查询数据库。

@Componentpublic class SimpleBookRepository implements BookRepository {    @Override    @Cacheable("books")    public Book getByIsbn(String isbn) {        simulateSlowService();        return new Book(isbn, "Some book");    }    // Don't do this at home    private void simulateSlowService() {        try {            long time = 3000L;            Thread.sleep(time);        } catch (InterruptedException e) {            throw new IllegalStateException(e);        }    }}

这时再启动程序,你会发现程序打印:

isbn-1234 →Book{isbn=’isbn-1234’, title=’Some book’}
2017-04-23 18:17:09.479  INFO 8054 —- [           main] forezp.AppRunner                         : isbn-4567 →Book{isbn=’isbn-4567’, title=’Some book’}
2017-04-23 18:17:09.480  INFO 8054 —- [           main] forezp.AppRunner                         : isbn-1234 →Book{isbn=’isbn-1234’, title=’Some book’}
2017-04-23 18:17:09.480  INFO 8054 —- [           main] forezp.AppRunner                         : isbn-4567 →Book{isbn=’isbn-4567’, title=’Some book’}
2017-04-23 18:17:09.481  INFO 8054 —- [           main] forezp.AppRunner                         : isbn-1234 →Book{isbn=’isbn-1234’, title=’Some book’}
2017-04-23 18:17:09.481  INFO 8054 —- [           main] forezp.AppRunner                         : isbn-1234 →Book{isbn=’isbn-1234’, title=’Some book’}

只有打印前面2个数据,程序等了3s,之后的数据瞬间打印在控制台上了,这说明缓存起了作用。

感谢各位的阅读!关于“springboot如何集成spring cache”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯