【*】什么是缓存
- 缓存就是将数据暂时存储在内存上,当用户需要数据时,可以直接从缓存中读取,不需要读取数据库
- 缓存是容器存放在内存中,为了保证持久化机制(关机会清空内存),将缓存中的值持久化到硬盘中(通过日志缓存文件的方式),缓存都会做持久化机制
【*】为什么使用缓存
使用缓存的目的就是为了减轻服务器的压力,减少网络传输请求
【*】缓存的分类
- 客户端缓存
- 页面缓存
- 浏览器缓存
- App客户端缓存
- 网络缓存
- 代理缓存
- cdn缓存
- 服务器缓存
- 数据库缓存
- 平台存级缓存
【*】缓存框架的分类
- 单点缓存框架(又叫jvm缓存框架,内置缓存框架)
只能针对于单个的jvm,缓存的容器存放在jvm中,重点,每个jvm互不影响 ehcache、oscache是单点缓存框架
ehcache详情请点击链接 https://blog.csdn.net/qq_39175358/article/details/104726499
- 分布式缓存框架
共享缓存,缓存需要跨语言,例如reids
reids详情请点击链接 https://blog.csdn.net/qq_39175358/article/details/104726679
【*】客户端缓存
- 1.客户端用到缓存的地方
浏览器,刚开始访问网站比较慢,因为没有缓存,当再次访问的时候速度就会变快,浏览器会自带缓存技术,比如缓存图片
- 2.使用cdn也会做一些图片静态资源的缓存
- 3.代理缓存
使用nginx实现缓存,使用cdn来做之后很少会使用内存来做缓存了,因为cdn是程序的入口
- 4.客户端缓存的目的
当请求到服务器端之后,那么请求的一些静态资源就会在本低文件缓存一份,当在次访问的时候,会直接读取本地文件,能够快速的响应 【APP客户端】,安卓,IOS底层也会有缓存技术,安卓最上层是Java语言,最底层是c语言
【*】如何写单个jvm缓存框架
Session其实也算是缓存,里面也有Key,Value和Map比较相似,所以可以根据Map写一个缓存框架
1.缓存的概念偏向于临时的概念,不会永久存储的
2.既然要做缓存所以需要一个容器,根据上面Map作为缓存的容器,推荐使用concrrentHashMap,因为线程是安全的
3.设置缓存有效期思路
需要两个线程,一个线程存储缓存的数据,一个线程做定时任务,判断缓存中那些数据超超出设置的有效期,并且将过期的缓存删除