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

相关文章
|
27天前
|
存储 缓存 算法
【C/C++ 性能优化】提高C++程序的缓存命中率以优化性能
【C/C++ 性能优化】提高C++程序的缓存命中率以优化性能
113 0
|
1月前
|
存储 缓存 Java
【Spring原理高级进阶】有Redis为啥不用?深入剖析 Spring Cache:缓存的工作原理、缓存注解的使用方法与最佳实践
【Spring原理高级进阶】有Redis为啥不用?深入剖析 Spring Cache:缓存的工作原理、缓存注解的使用方法与最佳实践
|
1月前
|
XML Java 开发者
深入解析 Spring 和 Spring Boot 的区别
深入解析 Spring 和 Spring Boot 的区别
|
25天前
|
存储 XML 缓存
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南(一)
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南
55 0
|
7天前
|
XML Java C++
【Spring系列】Sping VS Sping Boot区别与联系
【4月更文挑战第2天】Spring系列第一课:Spring Boot 能力介绍及简单实践
29 0
【Spring系列】Sping VS Sping Boot区别与联系
|
11天前
|
存储 缓存 自动驾驶
缓存策略与Apollo:优化网络请求性能
缓存策略与Apollo:优化网络请求性能
|
26天前
|
缓存 NoSQL Java
手撸的 SpringBoot缓存系统,性能杠杠的
手撸的 SpringBoot缓存系统,性能杠杠的
27 0
|
1月前
|
缓存 NoSQL Java
spring cache整合redis实现springboot项目中的缓存功能
spring cache整合redis实现springboot项目中的缓存功能
45 1
|
1月前
|
存储 缓存 算法
深入探究LRU缓存机制:优化内存利用与提升性能
深入探究LRU缓存机制:优化内存利用与提升性能
129 1
|
1月前
|
开发框架 前端开发 Java
Spring和Spring Boot:两者的区别与应用场景
Spring和Spring Boot:两者的区别与应用场景
52 1

热门文章

最新文章