【定义】:a collection of temporary data with either duplicates data located elsewhere or is the result of a computation.数据缓存、处理缓存、页面缓存
【原则】:基于“空间换时间”,通过将数据缓存起来,减少计算和获取的时间。[来自http://coolfiry.iteye.com/blog/1197385]
关键点
【命中率】:
【最大元素,粒度】:对象、查询、页面
【清空策略】:FIFO, LFU(最少被使用,缓存元素有一个hit属性,hit值最小的将会被清除), LRU(最近最少使用,缓存元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素时,则现有缓存元素中时间戳离当前时间最元的元素将被清出缓存);轮询策略;随机策略;SIZE(根据对象的大小进行替换,替换占用磁盘容量最大的对象,大小相同的情况下,时间作为第二决定因素)
【数据过期|周期】:cache创建->cacheEntity创建->L2命中->L1超时->L2移除->null。
【同步并发】:刷新更新时
【一致性】:
【缓存键】:
【缓存对象】:对象、序列化
【缓冲区域|内容划分|分级】:
【缓存区】:内存缓存(LinkedHashMap)和磁盘缓存,分布式缓存机制
【数据结构】:Map[OSCache、Ehcache], Tree[JBossCache],强引用与软引用存储对象
【预存数据】:
【API接口】:
最简单实现:map+软引用
【缓存分类】:[来自http://ooft.iteye.com/blog/1262608]
①客户端缓存: 即浏览器缓存,可以通过http的head头告诉浏览器该资源是否需要缓存,缓存多久.客户端缓存直接保存在本地,所以速度最快,而且对服务器没有访问压力.
②CDN:全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。
比如sina,把中心服务器的内容分发到各个省市的cache服务器,根据用户所在的网络(ip段)来确定用户拉去最近服务器上的内容,达到访问速度最快。
③前段缓存:主要用于缓存一些静态资源文件.代表性的有:(apache mod_cache、squid)
④应用缓存:主要通过一些缓存框架对一些动态的数据进行缓存,以减少计算量或减少对数据库的访问次数.应用缓存又分为本地缓存和远程缓存.
本地缓存是指缓存内容保存在本地jvm堆内存钟,访问速度极快,但不能跨越机器共享数据.典型的有OSCache,EHCache
远程缓存是指缓存数据被集中保存在远端的缓存服务器上,应用服务器通过网络访问缓存数据.访问速度比本地缓存慢,但缓存内容不受应用服务器重启影响,多台应用服务器可以共享缓存数据.典型的有memcached
⑤数据库缓存oracle,mysql等数据库系统都带有自己的缓存,将一些与编译的sql语句,热点数据进行缓存,提高访问速度.
对象池(Object PooI)技术
【定义】:对象池是管理与共享系统资源的一种缓存机制。对象池技术的基本思路是:系统在初始化时就建立一个对象池,通常会预先创建一定数量的对象放入池中;当某一个客户程序申请对象时,对象池可将这些预先创建的资源分配给客户程序;当对象使用完毕后,对象池再将这些对象回收并可分配给其他客户程序。
【好处】:①可以降低资源创建与撤销的成本,从而提高系统整体性能;②有效控制系统资源的使用总量,避免系统因资源耗尽而崩溃,从而提高系统的可伸缩性。
【关键点】:①初始化;②预置策略;③分配、释放策略;④并发问题;⑤命中率;⑥对象生命周期;⑦一致性;
Ehcache
【缓存对象】:对象、序列化
【最大元素,粒度】:对象、查询、页面
【清空策略】:LRU、LFU、FIFO
【缓存区】:内存缓存(LinkedHashMap)和磁盘缓存,分布式缓存机制
【其他】:快速、简单、低消耗、依赖性小(需要的jar包)、扩展性强
【应用】:
1)页面、页面片段缓存:net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter
2)hibernate默认的缓存provider
【API接口】:CacheManageà*Cacheà*Element
CacheManager: create(…), getCache(..), addCache(..), removeCache(…), shutdown()
Cache: put(k,v), get(..), remove(..)
Element:getvalue(), getObjectValue()
【使用方法】:ehcache.xml配置文件
name:缓存的名字
maxElementsInMemory:内存中name缓存中元素的最大数量
maxElementsOnDisk:硬盘中name缓存中元素的最大数量
diskStore:指定数据再磁盘中的存储位置
eternal:是否永久,不过期
overflowToDisk:当缓存中元素的数量超过限制时,是否把这些元素持久化到硬盘上
timeToIdleSeconds:多长时间不访问该缓存,则清除该缓存,过期
timeToLiveSeconds:缓存的存活时间
memoryStoreEvictionPolicy:缓存清空策略
cacheEventListenerFactory:注册相应的缓存监听类,用于处理缓存事件:put, remove, update, expire。