zoukankan      html  css  js  c++  java
  • 缓存学习总结

    1:什么是缓存,缓存有什么作用,缓存在什么情况下使用?

         系统设计中,有一些比较耗时的操作,比如读取数据库,如果将数据库中的数据放到内存中,这样不用每次查询都去查询数据库。类似于这种将数据放到内存或者硬盘上的操作,我称之为缓存。

         目前,我能想到的缓存使用情景如下:1  页面访问较慢,并且页面访问的内容很少更新。2 页面访问较慢,并且页面对实时性的要求不高,维护的数据不要求能立刻看到,2分钟后看到,1小时后看到,1天后看到可以接受。3:页面访问较慢,并发量很大。

    2:java里的缓存解决方案,缓存如何实现?一些核心参数如何配置?

      Ehcache :Hibernate用它,Spring也提供对它的支持,网上说它也一直有人维护。所以咱也用它。

      学习一门技术从实例开始,一来容易建立信息,二来可操作可以看到的东西能够给人形象易懂的印象。Ehcache也是这样。

         这个demo模拟了一个查询,如果不使用缓存,大概需要3秒的时间(使用了sleep模拟),使用了缓存后就会变的很快。可以在页面上看到每次查询的时间,和服务器已经缓存的数据,也可以看到缓存的配置,界面如下:

        缓存的配置文件及注释如下:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!--  
    maxElementsInMemory: 缓存最大数目
    eternal:缓存是否持久
    overflowToDisk: 意思是表示当缓存中元素的数量超过限制时,就把这些元素持久化
    到硬盘,如果overflowToDisk 是false ,那么maxElementsOnDisk 的设置就没有什么意
    义了
    timeToIdleSeconds:当缓存闲置n 秒后销毁
    timeToLiveSeconds:当缓存存活n 秒后销毁
    memoryStoreEvictionPolicy:
    ehcache 中缓存的3 种清空策略:
    1 FIFO,first in first out,这个是大家最熟的,先进先出,不多讲了
    2 LFU, Less Frequently Used,就是上面例子中使用的策略,直白一点就是讲一直以来
    最少被使用的。如上面所讲,缓存的元素有一个hit 属性,hit 值最小的将会被清出缓存。
    2 LRU,Least Recently Used,最近最少使用的,缓存的元素有一个时间戳,当缓存容量
    满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时
    间最远的元素将被清出缓存。
    :
    -->
    
    <ehcache name="ColorCache">
      <defaultCache
          maxElementsInMemory="10000" 
          eternal="false"
          timeToIdleSeconds="120"
          timeToLiveSeconds="120"
          overflowToDisk="true"
          diskSpoolBufferSizeMB="30"
          maxElementsOnDisk="10000000"
          diskPersistent="false"
          diskExpiryThreadIntervalSeconds="120"
          memoryStoreEvictionPolicy="LRU"/>
      <cache name="colors"
             maxElementsInMemory="100"
             maxElementsOnDisk="0"
             eternal="false"
             timeToIdleSeconds="20"
             timeToLiveSeconds="0"
             memoryStoreEvictionPolicy="LFU">
      </cache>
    </ehcache>

    一些感悟:

       在工作中需要有一定的知识面,当需要某种东西,你需要知道它,问题的关键是你需要知道到什么程度。如果知道的太多,会花费大量的时间并且以后可能你也不会用得到而会忘记,如果知道的太少,则跟不知道没什么区别,提不出什么建设性的意见。所以一个基本的demo是刚刚满足要求的做法。

  • 相关阅读:
    Android使用百度地图定位并显示手机位置后使用前置摄像头“偷拍”
    JS传递参数时对中文进行编码和解码
    点击<a>标签,禁止页面自动跳到顶部的解决办法
    百度地图API用法(传地址)
    asp.net页面按Enter键IE不提交表单
    asp.net同时调用JS和后台的无效的解决
    QQ浏览器不支持JS问题
    html中opacity的使用
    c#中传递参数前加out
    IE下使用jquery ajax失效
  • 原文地址:https://www.cnblogs.com/duankaige/p/2909999.html
Copyright © 2011-2022 走看看