扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
提到缓存是每一个程序开发人员都绕不过去的一个话题,合理的使用缓存能够减少对数据的频繁IO,能够减少系统的压力从而增加系统的稳定性
假设应用程序将原始数据存储在 MySQL 数据库中。众所周知 MySQL 数据库会将数据存储在硬盘以防止掉电丢失,但是受制于硬盘的物理设计,即便是目前性能最好的企业级 SSD 硬盘,也比内存的这种高速设备 IO 层面差一个数量级,而互联网应用,大都是典型的 “读多写少” 的场景,因此我们需要在设计上进行数据的读写分离,在数据写入时直接落盘处理,而占比超过 90% 的数据读取操作时则从以 Redis 为代表的内存 NoSQL 数据库提取数据,利用内存的高吞吐瞬间完成数据提取,这里 Redis 的作用就是我们常说的缓存。
从系统设计层面来说缓存一般分为客户端缓存、应用层缓存和服务端缓存三类
客户端缓存:
浏览器端或者APP端缓存,此类缓存可以把不经常更换的资源存储在客户端,下次用户打开时不需要经过网络直接访问客户本地的已缓存资源
应用层缓存:
CDN服务
CDN 全称是 Content Delivery Network,即内容分发网络,是互联网静态资源分发的主要技术手段。
NGNIX服务缓存
设置proxy_cache_path
服务端缓存:
实际上就是存在内存中
例如 Hibernate、Mybatis 框架的一二级缓存、Spring MVC 的页面缓存都是进程内缓存的经典应用场景,这些进程内缓存在 Java 中也有着非常多优秀的开源实现,如 EhCache、Caffeine 都是代表性产品。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流