缓存----学习总结


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是刚刚满足要求的做法。

 

原文地址:https://www.cnblogs.com/baiduligang/p/4247593.html