• paip.cache 缓存架构以及性能提升总结


    paip.cache 缓存架构以及性能提升总结

    1         缓存架构以及性能(贯穿读出式(LookThrough) 旁路读出式(LookAside) 写穿式(WriteThrough) 回写式(CopyBack)1

    2     Cache的分级体系设计(L1—L3,mem>file)以及性能... 2

    3     Cache分类架构(业务cache);提升性能... 2

    4     Cache应该设置多大... 2

    5     内存以及文件缓存(Ehcache,,Oscache)2

    6     Memcache. 3

    7     EhCache 总结使用... 3

    8     PHP Cache缓存机制与文件缓存原理... 5

    9     参考... 5

    作者Attilax 艾龙,  EMAIL:1466519819@qq.com
    来源:attilax的专栏
    地址:http://blog.csdn.net/attila

    1       缓存架构以及性能(贯穿读出式(Look Through) 旁路读出式(Look Aside) 写穿式(Write Through) 回写式(Copy Back)

    在增加了Cache之后,便存在数据在Cache及存储之间如何存取的问题。读写各有2种方式。
      贯穿读出式(LookThrough)


       该方式将Cache隔在调用者与存储之间,调用者对存储的所有数据请求都首先送到Cache,由Cache自行在自身查找。如果命中,则切断调用者对主 存的请求,并将数据送出;不命中,则将数据请求传给存储。该方法的优点是降低了调用者对存储的请求次数,缺点是延迟了调用者对存储的访问时间。
      旁路读出式(LookAside)
       在这种方式中,调用者发出数据请求时,并不是单通道地穿过Cache,而是向Cache和存储同时发出请求。由于Cache速度更快,如果命中,则 Cache在将数据回送给调用者的同时,还来得及中断调用者对存储的请求;不命中,则Cache不做任何动作,由调用者直接访问存储。它的优点是没有时间 延迟,缺点是每次调用者对存储的访问都存在,这样,就占用了一部分总线时间。
      写穿式(WriteThrough)
      任一从调用者发出的写信号送到Cache的同时,也写入存储,以保证存储的数据能同步地更新。它的优点是操作简单,但由于存储的慢速,降低了系统的写速度并占用了总线的时间。
      回写式(CopyBack)
       为了克服贯穿式中每次数据写入时都要访问存储,从而导致系统写速度降低并占用总线时间的弊病,尽量减少对存储的访问次数,又有了回写式。它是这样工作的:数据一般只写到Cache,这样有可能出现Cache中的数据得到更新而存储中的数据不变(数据陈旧)的情况。但此时可在Cache 中设一标志地址及数据陈旧的信息,只有当Cache中的数据被再次更改时,才将原更新的数据写入存储相应的单元中,然后再接受再次更新的数据。这样保证了 Cache和存储中的数据不致产生冲突

    2      Cache的分级体系设计(L1—L3,mem>file)以及性能

    Cache分级结构的主要优势在于,对于一个典型的一级缓存系统的80%的申请都发生在内部,只有20%的申请是与外部打交道。而这20%的外部申请中的80%又与二级缓存打交道。因此,只有4%的申请定向到存储中。

    一级Cache的容量, 使 性能随之成正比例地提高,还需设置二级Cache。直到L3 Cache。

    不同的缓存使用不同的框架。。L1cache一般可用编程语言内部hashmap来实现...L2使用本地cache 框架,,L3 使用远程cache..

    3       Cache分类架构(业务cache);提升性能

    比如mysql一系列小缓存组成的  。比如表缓存,记录缓存,key缓存,权限缓存等  。

    4       Cache应该设置多大

    Cache与存储的空间比为4:1000,即128kB Cache可映射32MB数据;256kB Cache可映射64MB。在这种情况下,命中率都在90%以上

    5       内存以及文件缓存(Ehcache,, Oscache)

    以上就是内存级别的缓存,但是很多情况下是满足不了企业应用的,大数据量的缓存肯定 还是要保存到文件,这个时候光用JDK来实现就比较复杂了,这里当然要用到第三方开源框架来实现了,,推荐还是与,,hibernate采用了 Ehcache做为其缓存机制默认实现,Oscache没深入研究,但是Ibatis推荐的缓存为这个。
    为什么要缓存,无非就是节省访问时间已经大并发量带来的访问上资源的消耗,这个资源有软资源和硬资源,做java的几乎每天都在有意识或者无意识的跟缓存打交道,最常见的缓存,Connection Pool,还有IOC其实也算一个。

    6       Memcache

    7       EhCache 总结使用

           for (int n = 0; n < 20; n++) {

               System.out.println(" nowsize:" + n);

               String f =  filex.read("c:\\main.dmg", "gbk");      

               String string = "v" + f + n;

               SoftReference sr=new SoftReference (string);

    //         ObjectWrap ow=new ObjectWrap();

    //         ow.item=sr;

               cache.put(new Element("key" + n, sr));

               try {

                  Thread.sleep(200);

               } catch (InterruptedException e) {

                  // TODO Auto-generatedcatch block

                  e.printStackTrace();

               }

           }

           System.out.println("ff");

           // cache.flush();

     

           //System.out.println("---------" +cache.get("key2").getValue());

     

    =============== ehcache.xml============

    <ehcache>

     

       <diskStore path="/atitmpdir"/>

    <!--java.io.tmpdir

     maxElementsInMemory:内存中最大缓存对象数。

     

    ·          maxElementsOnDisk:磁盘中最大缓存对象数,若是0表示无穷大。

    开启diskPersistent功能,只要使用的是CacheManager单例模式,下一次启动的时候就会调用上一次运行的缓存。因为我们每次重启程序,谁也不希望之前的缓存会消除,所以,这个功能是针对,当项目DOWN掉的时候,缓存依旧存在,项目开启后,继续引用缓存,不必要重新写入

    -->

       <defaultCache

     

               maxElementsInMemory="10000"

     

               eternal="false"

     

               timeToIdleSeconds="300"

     

               timeToLiveSeconds="10"

     

               overflowToDisk="true"

     

            

     

               diskPersistent="true"

     

               diskExpiryThreadIntervalSeconds="120"

     

               memoryStoreEvictionPolicy="LRU"

     

               />

              <cache name="mycache

                maxElementsInMemory="30"

     

               eternal="false"

     

               timeToIdleSeconds="300"

     

               timeToLiveSeconds="500"

     

               overflowToDisk="true"        

     

               diskPersistent="true"

     

               diskExpiryThreadIntervalSeconds="120"

     

               memoryStoreEvictionPolicy="LRU"

              />

     

    </ehcache>

    8    PHP Cache缓存机制与文件缓存原理

    PHP Cache缓存机制与文件缓存原理 - derrck - 博客园.htm

    9       参考

    ehcache常用API整理 - 李哥在javaeye - ITeye技术网站.htm

    Ehcache和MemCached比较分析 - 踏雪无痕 - 博客频道 - CSDN.NET.htm

    ehcache memcache redis 三大缓存男高音 - 滴水穿石,厚积薄发 - 博客频道 - CSDN.NET.htm

    ehcache参数简介 - 天道酬勤 - 博客频道 - CSDN.NET.htm

    ehcache常用API整理 - 李哥在javaeye - ITeye技术网站.htm

    EHcache的配置与使用 - 小梦想的小脚印的日志 - 网易博客.htm.lnk

    Ehcache缓存配置 - mgoann的专栏 - 博客频道 -CSDN.NET.htm

    Java缓存框架 EhCache - liudaoru - 悟 - ITeye技术网站.htm

    oscache ehcache oscache与ehcache的区别 - hjm4702192的专栏 - 博客频道 - CSDN.NET.htm

    oscache 与 ehcache的对比 - kissjava的专栏 - 博客频道 -CSDN.NET.htm

    【EhCache】Java缓存框架使用EhCache结合Spring AOP - OPEN 开发经验库.htm

    关于JCS,OSCache, EHCache这三个缓存方案? -CSDN论坛 -CSDN.NET.htm

    缓存之ehcache 之使用 - Java - 学习交流 - 私塾在线 - 只做精品视频课程服务.htm.lnk

  • 相关阅读:
    ES各种错误解决
    ES 父子文档查询
    logstash jdbc 各种数据库配置
    ruby 疑难点之—— attr_accessor attr_reader attr_writer
    ruby 疑难点之—— yield 和 yield self
    aggregation 详解2(metrics aggregations)
    logstash multiline 把文件处理为单个 event
    aggregation 详解4(pipeline aggregations)
    aggregation 详解3(bucket aggregation)
    C++内存字节对齐规则
  • 原文地址:https://www.cnblogs.com/attilax/p/15199327.html
Copyright © 2020-2023  润新知