Spring之路(46)–缓存:提升性能的大杀器,用与不用缓存区别就是这么大
2020/2/19 8:17:33
本文主要是介绍Spring之路(46)–缓存:提升性能的大杀器,用与不用缓存区别就是这么大,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
兄弟们,今日头条搜索
三线城市程序员老陈
关注我,我将持续不断推出视频教程。
啥是缓存
首先,缓存重要前提,就是内存远远快于硬盘,这两者的访问速度根本不在一个数量级上。
如果说硬盘访问速度是驴车,内存可能相当于高铁,让你做高铁跑100公司跟玩似的,让你做驴车,你试试呗。
所以如果要频繁访问硬盘,速度比较会慢,如果能把经常访问的东西放到内存中,速度必然实现飞跃。
所谓缓存,就是把数据存储在一个访问更快的地方,以便加快访问速度的存储机制。
缓存在哪里
我们平时所做的项目,大部分是需要操作数据库的,数据库中的存储是持久化存储,也就是会存储到硬盘上。
而我们使用Java代码创建的对象,Spring容器管理的bean(归根结底也是对象)等都是在内存上运行的。
所以如果能将数据库中频繁被访问的内容,缓存到我们Java项运行内存中,那性能提升绝对是大大的。
到底能提升多少
如果用四个字来总结,那就是触目惊心!
我编写了一个程序,当采用线程池发起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
虽然上面的实验比较简陋,难以体现出真实项目的复杂应用场景。但是毫无疑问的是,对于访问量高、负载压力大的项目而言,合理的使用缓存,将极大的缓解数据库等持久化存储的压力,降低硬件成本,同时极大的提高系统的反应速度。
总结
缓存就是这么重要,效果就是这么显著。
但是缓存一点都不难,自己编写代码实现也好,使用Spring封装的也好,都很容易。
接下来就讲下Spring缓存具体的实现方式,当然最后也会给出本文测试程序的源代码。
这篇关于Spring之路(46)–缓存:提升性能的大杀器,用与不用缓存区别就是这么大的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行