文章目录
- 一、缓存的产生和发展
- 1.1什么是缓存?
- 1.2缓存的发展?
- 1.3缓存概念的扩展
- 1.4应用服务中缓存的开发
- 二。缓存的应用
- 2.1缓存的分类
- 本地缓存
- 分布式缓存
- 2.2通用框架组件在缓存中的应用
- 2 . 2 . 1 my batis的缓存
- 一级缓存
一、缓存的产生和发展
1.1什么是缓存?
缓存,本义是指一种比普通随机存取存储器(RAM)存取速度更快的高速存储器。Cache一词来源于1967年的一篇电子工程期刊论文,用于计算机工程领域。
1.2缓存的发展?
问题:起初PC处理器的CPU中没有缓存,CPU直接访问内存数据,访问数据的速度跟不上CPU的处理速度。
意思是:后来Intel公司给CPU增加了可选缓存的支持。当CPU处理数据时,它将首先在缓存中查找数据。如果因为之前的操作而将数据临时存储在其中,则没有必要从主存储器中读取数据,从而加快了数据读取的速度。
优化:增加L2缓存(二级深圳生活网缓存),甚至三级缓存,超级缓存等。在CPU内核中。
1.3缓存概念的扩展
现在,我们知道缓存的概念不仅限于CPU和主存之间,还包括硬盘和网络之间,软件和硬件之间,系统应用和数据库之间。
总之,任何位于两种不同数据处理速度的介质之间,用来协调它们之间数据传输速度差异的结构,都可以称为Cache。
1.4应用服务中缓存的开发
随着网络的发展和普及,用户的增加,我们的应用服务器和数据库服务器需要同时处理大量的请求和数据计算。但是我们的应用服务器资源有限,数据库可以同时处理请求,存在瓶颈。如何利用有限的资源承载更高的并发,提高应用的吞吐量?比较有效的方法之一就是引入缓存。即通过缓存,快速访问并返回所需数据,减少了系统交互,提高了计算响应能力。
简而言之,深圳生活网,尽可能把数据放在最近、最直接、最快的地方,协调应用数据获取和存储数据返回的速度差。
二。缓存的应用
2.1缓存的分类
在目前的应用服务框架中,根据应用服务与缓存的耦合程度,常见的有本地缓存和远程缓存两种。
本地缓存
存在于应用程序中的存储介质,可以直接访问数据而无需网络开销。
优点:它的存储位置和应用在同一个上下文或者进程中,没有过多的网络开销,访问速度非常快。
缺点:1)每个应用实例都要维护一组缓存数据,不共享;2)数据一致性问题,由于更新不及时,缓存中维护的数据可能不正确;3)大数据无法存储,没有持久性的数据会随着应用重启而丢失。
应用场景:1)缓存的数据通常是不经常变化的静态只读数据;2)短时间内改变对业务影响不敏感的数据;
本地缓存的实现:
缓存一般是一种key-value的键值对数据结构,所以需要使用字典数据结构来实现,在 Java 编程中,常用的字典实现包括 HashMap 和 ConcurretHashMap。如果本地缓存需要被不同的服务端线程并发读写,则需要保证线程安全。一般会使用线程安全的ConcurrentHashMap 来作为 Java 编程中的本地缓存实现。除此之外,也有其他更加智能的本地缓存实现,如可以定时失效,访问重新加载等特性,典型实现如 Google 的 guava 工具包的 Cache 实现。
分布式缓存
缓存和应用是分离的,缓存本身就是一个应用。比如美团常见的Redis、Memcached、Cellar都属于共享缓存或者共享缓存的实现。
优点:1)数据共享保证数据一致性,所有节点通过统一的分布式缓存访问数据,从而保证不同节点应用进程的数据一致性;2)数据读写分离,高性能高可用;3)支持大数据量存储,不受应用进程重启影响;
缺点:1)数据跨网络传输,性能低于本地缓存。
应用场景:具体场景分析一般适用于数据结构简单、高性能读写、分布式共享的数据存储。
2.2通用框架组件在缓存中的应用
2 . 2 . 1 my batis的缓存
一级缓存
一级缓存:在执行多次查询条件完全相同的SQL时,MyBatis提供了一级缓存的方案优化查询性能,如果是相同的SQL语句,会优先命中一级缓存,避免直接对数据库进行查询,提高性能。一级缓存的共享级别:在MyBatis中共有两个选项,SESSION或者STATEMENT,默认是SESSION级别,即在一个MyBatis会话中执行的所有语句,都会共享这一个缓存。一种是STATEMENT级别,可以理解为缓存只对当前执行的这一个Statement有效。开启配置: