`
lsw521314
  • 浏览: 6780 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

缓存的详解

 
阅读更多
以前感觉一直困惑着我,今天花点时间对缓存做了理解,首先看详细的配置文件吧:ehcache.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 二级缓存 -->
<ehcache>
<!-- <diskStore>表示当缓存中对象数量超过类设置内存缓存数量时,将缓存对象写到硬盘,path=”java.io.tmpdir”表示把数据写到这个目录下。Java.io.tmpdir目录在运行时会根据相对路径生成。 -->
   <diskStore path="java.io.tmpdir"/>
   <!-- maxElementsInMemory="10000"
            //缓存中最大允许创建的对象数
             eternal="false"
            //缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期
             timeToIdleSeconds="120"
            //缓存数据钝化时间(设置对象在它过期之前的空闲时间)
             timeToLiveSeconds="120"
             //缓存数据的生存时间(设置对象在它过期之前的生存时间)
             overflowToDisk="true"
             //内存不足时,是否启用磁盘缓存 -->
             <!-- <defaultCache>表示设定缓存的默认数据过期策略。 -->
      <defaultCache
              maxElementsInMemory="100000"
              eternal="false"
              timeToIdleSeconds="3600"
              timeToLiveSeconds="3600"
              overflowToDisk="true"
              diskPersistent="false"
              //运行disk终结线程的时间,默认为120秒
              diskExpiryThreadIntervalSeconds="120"
              />
<!-- <cache>表示设定用具体的命名缓存的数据过期策略。
  name表示具体的缓存命名。
  eternal表示cache中数据是否为常量。缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期 -->
      <cache name="Test"
             maxElementsInMemory="100000"
             eternal="false"
             overflowToDisk="true"
             timeToIdleSeconds="2"
             timeToLiveSeconds="600"
              /> 
</ehcache>
下边是在网上找到的俗语理解:
许多人认为,“缓存”是内存的一部分

许多技术文章都是这样教授的

但是还是有很多人不知道缓存在什么地方,缓存是做什么用的

其实,缓存是CPU的一部分,它存在于CPU中

CPU存取数据的速度非常的快,一秒钟能够存取、处理十亿条指令和数据(术语:CPU主频1G),而内存就慢很多,快的内存能够达到几十兆就不错了,可见两者的速度差异是多么

的大

缓存是为了解决CPU速度和内存速度的速度差异问题

内存中被CPU访问最频繁的数据和指令被复制入CPU中的缓存,这样CPU就可以不经常到象“蜗牛”一样慢的内存中去取数据了,CPU只要到缓存中去取就行了,而缓存的速度要比内

存快很多

这里要特别指出的是:
1.因为缓存只是内存中少部分数据的复制品,所以CPU到缓存中寻找数据时,也会出现找不到的情况(因为这些数据没有从内存复制到缓存中去),这时CPU还是会到内存中去找数

据,这样系统的速度就慢下来了,不过CPU会把这些数据复制到缓存中去,以便下一次不要再到内存中去取。

2.因为随着时间的变化,被访问得最频繁的数据不是一成不变的,也就是说,刚才还不频繁的数据,此时已经需要被频繁的访问,刚才还是最频繁的数据,现在又不频繁了,所以

说缓存中的数据要经常按照一定的算法来更换,这样才能保证缓存中的数据是被访问最频繁的

3.关于一级缓存和二级缓存
为了分清这两个概念,我们先了解一下RAM (随机访问内存(random-access memory的缩写);随机存取存储器(random access memory的缩写))

ram和ROM相对的,RAM是掉电以后,其中才信息就消失那一种,ROM在掉电以后信息也不会消失那一种

RAM又分两种,

一种是静态RAM,SRAM(静态随机存储器(Static Random Access Memory));一种是动态RAM,DRAM。前者的存储速度要比后者快得多,我们现在使用的内存一般都是动态RAM。

有些人该说了:为了增加系统的速度,把缓存扩大不就行了吗,扩大的越大,缓存的数据越多,系统不就越快了吗

缓存通常都是静态RAM,速度是非常的快,

但是静态RAM集成度低(存储相同的数据,静态RAM的体积是动态RAM的6倍),

价格高(同容量的静态RAM是动态RAM的四倍),

由此可见,扩大静态RAM作为缓存是一个非常愚蠢的行为,

但是为了提高系统的性能和速度,我们必须要扩大缓存,

这样就有了一个折中的方法,不扩大原来的静态RAM缓存,而是增加一些高速动态RAM做为缓存,

这些高速动态RAM速度要比常规动态RAM快,但比原来的静态RAM缓存慢,

我们把原来的静态ram缓存叫一级缓存,而把后来增加的动态RAM叫二级缓存。

一级缓存和二级缓存中的内容都是内存中访问频率高的数据的复制品(映射),它们的存在都是为了减少高速CPU对慢速内存的访问。
通常CPU找数据或指令的顺序是:先到一级缓存中找,找不到再到二级缓存中找,如果还找不到就只有到内存中找了!
希望以上内容对你也很有用·······
分享到:
评论

相关推荐

    Android WebView 缓存详解

    Android WebView 缓存详解 一. 两种缓存类型: 页面缓存:加载一个网页时的html、JS、CSS等页面或者资源数据,这些缓存资源是由于浏览器 的行为而产生,开发者只能通过配置HTTP响应头影响浏览器的行为才能间接地...

    Hibernate缓存详解

    **Hibernate缓存详解** 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。为了提高数据访问性能,Hibernate引入了缓存机制,它可以减少对数据库的直接访问,从而提升应用的...

    二级缓存详解

    以下是关于"二级缓存详解"的详细知识: 二级缓存是指在SessionFactory级别上维护的数据缓存,它不同于一级缓存(Session级别),一级缓存在每个Session实例中保存对象,而二级缓存则跨越多个Session,甚至整个应用...

    java缓存详解[借鉴].pdf

    Java 缓存详解 Java 缓存是指在 Java 应用程序中使用缓存机制来提高系统性能的一种技术。缓存是指将频繁访问的数据存储在内存中,以便快速访问和减少数据库查询次数。Java 缓存可以分为两种:一级缓存和二级缓存。...

    Nginx配置负载均衡和缓存详解

    ### Nginx配置负载均衡和缓存详解 #### 负载均衡概念解析 随着互联网技术的迅猛发展,网络服务的访问量与日俱增,单一服务器已经难以满足大规模访问需求。为此,**负载均衡**作为一种高效且经济的解决方案应运而生...

    架起CPU与内存桥梁——缓存详解(上).pdf

    架起 CPU 与内存桥梁——缓存详解(上).pdf 缓存是计算机系统中的一种高速存储器,它扮演着 CPU 和内存之间的桥梁角色。为了理解缓存在系统中的重要角色,我们必须了解缓存、CPU 和内存子系统之间的相互关系。 在...

    hibernate 缓存详解

    **hibernate 缓存详解** 在Java的持久化框架Hibernate中,缓存是一个至关重要的概念,它极大地提升了数据访问的效率。缓存分为一级缓存和二级缓存,每级缓存都有其特定的作用和优化策略。 1. **一级缓存(Session ...

    hibernate 二级缓存详解

    Hibernate 二级缓存是针对SessionFactory级别的全局缓存,与一级缓存(Session级别)不同,一级缓存只在单个Session生命周期内有效。二级缓存则允许不同Session之间共享数据,提高了数据访问效率,减少了对数据库的...

    关于vue里页面的缓存详解

    只有匹配的组件会被缓存 exclude: 字符串或正则表达式。任何匹配的组件都不会被缓存。 结合router缓存部分页面: 比较实用的例子: 思路:通过beforeRouterLeave这个钩子来对路由里面的keepAlive进行赋值。从而动态...

    hibernate缓存详解

    hibernate 缓存 详解 一级缓存 二级缓存 应用

    web浏览器-缓存详解

    Web浏览器的缓存机制是网络性能优化的重要组成部分,它能够显著提高网页加载速度,减少服务器压力,提升用户体验。本文将深入解析浏览器缓存的工作原理、类型、以及如何控制和利用缓存来优化网站性能。 一、浏览器...

    Java缓存详解,降低系统开销,提高效率

    Java缓存技术是提高系统性能的关键手段之一,它通过存储常用数据或计算结果,避免了重复的数据库查询或计算,从而降低了系统开销并提升了响应速度。本文将深入讲解Java缓存的原理、缓存策略以及如何在实际应用中实现...

    hibernate二级缓存 详解

    详细描述了,Hibernate中一级缓存和二组缓存的思想思路,以及使用方法,使用情况。

    Hibernate缓存详解[文].pdf

    Hibernate缓存机制是Java开发中使用Hibernate框架进行数据库操作时非常关键的一个部分,它能够显著提升应用程序的性能。本文将详细解析Hibernate的一级缓存和二级缓存。 **一级缓存** 一级缓存是SessionFactory创建...

    IOS网络图片缓存详解

    在开发移动应用的时候比如Android,IOS,因为手机流量、网速、内存等这些因素,当我们的移动应用是针对互联网,并要频繁访问网络的话,对网络优化这块就显得尤为重要了

    Hibernate一级缓存和二级缓存详解

    Hibernate一级缓存和二级缓存详解 Hibernate是一种流行的基于Java的持久化框架,它提供了两种缓存机制:一级缓存和二级缓存。了解这两种缓存机制是非常重要的,因为它们可以极大地提高应用程序的性能。 一级缓存 ...

    高吞吐、线程安全的LRU缓存详解

    高吞吐、线程安全的LRU缓存详解 LRU 缓存是一种常用的缓存策略,旨在提高系统的性能和吞吐量。高吞吐、线程安全的 LRU 缓存详解是对 LRU 缓存的深入研究和实现,以下是对该主题的详细知识点。 1. LRU 缓存的原理 ...

Global site tag (gtag.js) - Google Analytics