Spring之路(46)–缓存:提升性能的大杀器,用与不用缓存区别就是这么大

简介: 本文目录1. 啥是缓存2. 缓存在哪里3. 到底能提升多少4. 总结

1. 啥是缓存

首先,缓存重要前提,就是内存远远快于硬盘,这两者的访问速度根本不在一个数量级上。


如果说硬盘访问速度是驴车,内存可能相当于高铁,让你做高铁跑100公司跟玩似的,让你做驴车,你试试呗。


所以如果要频繁访问硬盘,速度比较会慢,如果能把经常访问的东西放到内存中,速度必然实现飞跃。


所谓缓存,就是把数据存储在一个访问更快的地方,以便加快访问速度的存储机制。


2. 缓存在哪里

我们平时所做的项目,大部分是需要操作数据库的,数据库中的存储是持久化存储,也就是会存储到硬盘上。


而我们使用Java代码创建的对象,Spring容器管理的bean(归根结底也是对象)等都是在内存上运行的。


所以如果能将数据库中频繁被访问的内容,缓存到我们Java项运行内存中,那性能提升绝对是大大的。


3. 到底能提升多少

如果用四个字来总结,那就是触目惊心!


我编写了一个程序,当采用线程池发起100个线程请求数据库时,打印耗时时间如下。可见有的执行时间长达14秒,说实话要等

这么久,客户要摔茶缸子了!可想而知当并发请求达到1000个、10000个时会发生什么。


耗时(毫秒):1528

耗时(毫秒):1528

耗时(毫秒):1602

耗时(毫秒):1621

耗时(毫秒):1621

耗时(毫秒):1631

耗时(毫秒):1637

耗时(毫秒):1648

耗时(毫秒):2270

耗时(毫秒):2391

//中间省略80个打印信息

耗时(毫秒):13507

耗时(毫秒):13701

耗时(毫秒):13874

耗时(毫秒):13935

耗时(毫秒):13963

耗时(毫秒):14033

耗时(毫秒):14242

耗时(毫秒):14263

耗时(毫秒):14275


使用缓存后,同样发起100个线程请求数据库,打印耗时时间如下,说实话,惊呆了,几乎毫无等待时间。


耗时(毫秒):1

耗时(毫秒):1

耗时(毫秒):1

耗时(毫秒):1

耗时(毫秒):0

耗时(毫秒):1

耗时(毫秒):0

耗时(毫秒):0

耗时(毫秒):0

//中间省略80个打印信息耗时(毫秒):15

耗时(毫秒):0

耗时(毫秒):0

耗时(毫秒):0

耗时(毫秒):0

耗时(毫秒):0

耗时(毫秒):0

耗时(毫秒):0

耗时(毫秒):1

耗时(毫秒):1


虽然上面的实验比较简陋,难以体现出真实项目的复杂应用场景。但是毫无疑问的是,对于访问量高、负载压力大的项目而言,合理的使用缓存,将极大的缓解数据库等持久化存储的压力,降低硬件成本,同时极大的提高系统的反应速度。


4. 总结

缓存就是这么重要,效果就是这么显著。


但是缓存一点都不难,自己编写代码实现也好,使用Spring封装的也好,都很容易。


接下来就讲下Spring缓存具体的实现方式,当然最后也会给出本文测试程序的源代码。

相关文章
|
2月前
|
缓存 NoSQL Java
什么是缓存?如何在 Spring Boot 中使用缓存框架
什么是缓存?如何在 Spring Boot 中使用缓存框架
61 0
|
2月前
|
缓存 监控 前端开发
在资源加载优化中,如何利用浏览器缓存提升性能?
通过以上这些方法,可以有效地利用浏览器缓存来提升资源加载的性能,减少网络请求次数,提高用户体验和应用的响应速度。同时,需要根据具体的应用场景和资源特点进行灵活调整和优化,以达到最佳的效果。此外,随着技术的不断发展和变化,还需要持续关注和学习新的缓存优化方法和策略。
101 53
|
1月前
|
Java 关系型数据库 数据库
京东面试:聊聊Spring事务?Spring事务的10种失效场景?加入型传播和嵌套型传播有什么区别?
45岁老架构师尼恩分享了Spring事务的核心知识点,包括事务的两种管理方式(编程式和声明式)、@Transactional注解的五大属性(transactionManager、propagation、isolation、timeout、readOnly、rollbackFor)、事务的七种传播行为、事务隔离级别及其与数据库隔离级别的关系,以及Spring事务的10种失效场景。尼恩还强调了面试中如何给出高质量答案,推荐阅读《尼恩Java面试宝典PDF》以提升面试表现。更多技术资料可在公众号【技术自由圈】获取。
|
1月前
|
缓存 NoSQL Java
Spring Boot中的分布式缓存方案
Spring Boot提供了简便的方式来集成和使用分布式缓存。通过Redis和Memcached等缓存方案,可以显著提升应用的性能和扩展性。合理配置和优化缓存策略,可以有效避免常见的缓存问题,保证系统的稳定性和高效运行。
48 3
|
1月前
|
缓存 Java 数据库连接
深入探讨:Spring与MyBatis中的连接池与缓存机制
Spring 与 MyBatis 提供了强大的连接池和缓存机制,通过合理配置和使用这些机制,可以显著提升应用的性能和可扩展性。连接池通过复用数据库连接减少了连接创建和销毁的开销,而 MyBatis 的一级缓存和二级缓存则通过缓存查询结果减少了数据库访问次数。在实际应用中,结合具体的业务需求和系统架构,优化连接池和缓存的配置,是提升系统性能的重要手段。
63 4
|
2月前
|
缓存 监控 测试技术
如何利用浏览器的缓存来优化网站性能?
【10月更文挑战第23天】通过以上多种方法合理利用浏览器缓存,可以显著提高网站的性能,减少网络请求,加快资源加载速度,提升用户的访问体验。同时,要根据网站的具体情况和资源的特点,不断优化和调整缓存策略,以适应不断变化的业务需求和用户访问模式。
112 7
|
2月前
|
存储 缓存 Java
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
357 2
|
3月前
|
监控 Java 应用服务中间件
Spring和Spring Boot的区别
Spring和Spring Boot的主要区别,包括项目配置、开发模式、项目依赖、内嵌服务器和监控管理等方面,强调Spring Boot基于Spring框架,通过约定优于配置、自动配置和快速启动器等特性,简化了Spring应用的开发和部署过程。
83 19
|
3月前
|
缓存 JavaScript 前端开发
Vue 3的事件监听缓存如何优化性能?
【10月更文挑战第5天】随着前端应用复杂度的增加,性能优化变得至关重要。Vue 3 通过引入事件监听缓存等新特性提升了应用性能。本文通过具体示例介绍这一特性,解释其工作原理及如何利用它优化性能。与 Vue 2 相比,Vue 3 可在首次渲染时注册事件监听器并在后续渲染时重用,避免重复注册导致的资源浪费和潜在内存泄漏问题。通过使用 `watchEffect` 或 `watch` 监听状态变化并更新监听器,进一步提升应用性能。事件监听缓存有助于减少浏览器负担,特别在大型应用中效果显著,使应用更加流畅和响应迅速。
117 1
|
3月前
|
Java 编译器 Spring
Spring AOP 和 AspectJ 的区别
Spring AOP和AspectJ AOP都是面向切面编程(AOP)的实现,但它们在实现方式、灵活性、依赖性、性能和使用场景等方面存在显著区别。‌
117 2

热门文章

最新文章