• Java缓存学习之一:缓存


    一、缓存

    1、什么是缓存?

          缓存是硬件,是CPU中的组件,CPU存取数据的速度非常的快,一秒钟能够存取、处理十亿条指令和数据(术语:CPU主频1G),而内存就慢很多,快的内存能够达到几十兆就不错了,可见两者的速度差异是多么的大 ,缓存是为了解决CPU和内存两者速度差异问题的中间媒体,将CPU访问频率较高的数据从内存读入缓存,从而提高软件执行效率。

      以上是硬件中缓存,软件中的缓存的定义更为广泛一些,实现的方式也更多一些,但目的是一样的,都是复制常用的数据到内存中方便CPU的快读读取(注意:通过java的原理可以看出java不能操作缓存,不过可以给缓存建议存储那些数据)。缓存的基本思想是以空间换时间。我们知道,IO的读写速度相对内存来说是比较慢的,通常一个web应用的瓶颈就出现在磁盘IO的读写上。那么,如果我们在内存中建立一个存储区,将数据缓存起来,当浏览器端由请求到达的时候,直接从内存中获取相应的数据,这样一来可以降低服务器的压力,二来,可以提高请求的响应速度,提升用户体验。

    2、java项目中常用的实现缓存的发方式有哪些?

    2.1 数据库数据缓存

          一般来说,web应用业务逻辑业务逻辑比较复杂,数据库繁多,要获取某个完整的数据,往往要多次读取数据库,或者使用极其复杂效率较低的SQL查询语句。为了提高查询的性能,将查询后的数据放到内存中进行缓存,下次查询时,直接从内存缓存直接返回,提高响应效率。

    比如mysql、oracle等本身的缓存机制可以实现数据缓存,有时页面同样的请求,后面的请求时间比第一次请求明显短,就是数据库数据缓存的作用,另外通过调正数据库的字段类型和索引、序列等可以优化查询效率。

    2.2 应用层缓存
          应用层缓存是指我们在代码层面上做的缓存。通过代码逻辑,把曾经请求过的数据或资源等,缓存起来,再次需要数据时通过逻辑上的处理选择可用的缓存的数据。应用层缓存主要针对某个业务方法进行缓存,有些业务对象逻辑比较复杂,可能涉及到多次数据库读写或者其他消耗较高的操作,应用层缓存可以将复杂的业务逻辑解放出来,降低服务器压力。

    2.3 页面缓存(浏览器缓存)
          除了IO外,web应用的另一大瓶颈就是页面模板的渲染。每次请求都需要从业务逻辑层获取相应的model,并将其渲染成对应的HTML。一般来说,web应用读取数据的需求比更新数据的需求大很多,大多数情况下,某个请求返回的HTML是一样的,因此直接将HTML缓存起来也是缓存的一个主流做法。

    2.4 代理服务器缓存
          正向代理需要用户浏览器进行配置,反向代理需要先配置DNS服务器,然后接受用户浏览请求,转发请求给远程服务器。反向代理服务器是浏览器和源服务器之间的中间服务器,浏览器先向这个中间服务器发起Web请求,经过处理后(比如权限验证,缓存匹配等),再将请求转发到源服务器。代理服务器缓存的运作原理跟浏览器的运作原理差不多,只是规模更大。可以把它理解为一个共享缓存,不只为一个用户服务,一般为大量用户提供服务,因此在减少相应时间和带宽使用方面很有效,同一个副本会被重用多次。常见的反向代理服务器:Nginx是软件。

     

    2.5 CDN缓存
          CDN( ContentDeliveryNetwork 内容分发网络)缓存,也叫网关缓存、反向代理缓存。浏览器先向CDN网关发起Web请求,网关服务器后面对应着一台或多台负载均衡源服务器,会根据它们的负载请求,动态将请求转发到合适的源服务器上。虽然这种架构负载均衡源服务器之间的缓存没法共享,但却拥有更好的处扩展性。CDN是一集群服务器网络,不是软件。

    2.6 基于spring的缓存

    spring作为一个成熟的java web 框架,自身有一套完善的缓存机制,同时,spring还未其他缓存的实现提供了扩展。接下来,让我们在一个简单的学生管理系统中尝试spring的数据库缓存、应用层缓存、页面缓存的实现。

    参考:

    https://zhuanlan.zhihu.com/p/20885740

    http://blog.clzg.cn/blog-248258-814385.html

    http://wenku.baidu.com/link?url=2_LqZF0lkuipJYsx_42e6DDvMSdCoxgy3rWKsPzSi-tktlUcGffa0dSG3vdhAEVs4BxAFfCEJwvA6XxjNSKrnUhh2OPpbl_IiipUvehSiWK

    (JCS)http://wenku.baidu.com/link?url=hI7n10NVXGL2nFU1J66yltuhA_illv_7N4OEykd_anOqeGFZpHRY4ENEgNBWddBOyPA1hfbem7-EZ8v8oGcbaogKRWb3CLduIwkPcefk0fa

  • 相关阅读:
    重磅官宣:Nacos2.0发布,性能提升10倍
    埃森哲携手阿里云共建基于云原生的消费者运营中台解决方案
    3. Windows根据端口查进程---ADB 相关报错 ADB server didn't ACK cannot bind ':5037'
    2.Could not open Selected VM debug port (8700). Make sure you do not have another instance of DDMS or of the eclipse plugin running
    1.运行Android Studio,一直提示:Error running app: Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled.
    SpringBoot_配置-yaml配置文件值获取
    SpringBoot_入门-使用向导快速创建Spring Boot应用
    SpringBoot_入门-HelloWorld细节-自动配置
    SpringBoot_入门-微服务简介
    SpringBoot_入门-Spring Boot简介
  • 原文地址:https://www.cnblogs.com/cac2020/p/6015253.html
Copyright © 2020-2023  润新知