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缓存具体的实现方式,当然最后也会给出本文测试程序的源代码。

相关文章
|
4月前
|
存储 机器学习/深度学习 缓存
性能最高提升7倍?探究大语言模型推理之缓存优化
本文探讨了大语言模型(LLM)推理缓存优化技术,重点分析了KV Cache、PagedAttention、Prefix Caching及LMCache等关键技术的演进与优化方向。文章介绍了主流推理框架如vLLM和SGLang在提升首Token延迟(TTFT)、平均Token生成时间(TPOT)和吞吐量方面的实现机制,并展望了未来缓存技术的发展趋势。
性能最高提升7倍?探究大语言模型推理之缓存优化
|
1月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
117 8
|
2月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
517 5
|
2月前
|
存储 缓存 Java
Spring中@Cacheable、@CacheEvict以及其他缓存相关注解的实用介绍
缓存是提升应用性能的重要技术,Spring框架提供了丰富的缓存注解,如`@Cacheable`、`@CacheEvict`等,帮助开发者简化缓存管理。本文介绍了如何在Spring中配置缓存管理器,使用缓存注解优化数据访问,并探讨了缓存的最佳实践,以提升系统响应速度与可扩展性。
305 0
Spring中@Cacheable、@CacheEvict以及其他缓存相关注解的实用介绍
|
6月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
237 32
|
4月前
|
存储 缓存 NoSQL
Spring Cache缓存框架
Spring Cache是Spring体系下的标准化缓存框架,支持多种缓存(如Redis、EhCache、Caffeine),可独立或组合使用。其优势包括平滑迁移、注解与编程两种使用方式,以及高度解耦和灵活管理。通过动态代理实现缓存操作,适用于不同业务场景。
422 0
|
6月前
|
缓存 搜索推荐 CDN
HTTP缓存策略的区别和解决的问题
总的来说,HTTP缓存策略是一种权衡,需要根据具体的应用场景和需求来选择合适的策略。理解和掌握这些策略,可以帮助我们更好地优化网页性能,提高用户的浏览体验。
194 11
|
8月前
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
11月前
|
缓存 NoSQL Java
Spring Boot中的分布式缓存方案
Spring Boot提供了简便的方式来集成和使用分布式缓存。通过Redis和Memcached等缓存方案,可以显著提升应用的性能和扩展性。合理配置和优化缓存策略,可以有效避免常见的缓存问题,保证系统的稳定性和高效运行。
339 3