【定义】: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。
分享到:
相关推荐
"PoolManager"是一个专门管理对象池的组件,通常包含以下功能: 1. 初始化池:在游戏启动时,根据预设参数预先创建一定数量的游戏对象并存储到池中。 2. 获取对象:当需要使用对象时,从池中取出一个对象,如果池为...
主要是对象池的创建和获取封装
对象池是一种内存管理策略,它预先创建并维护一组对象,当程序需要对象时,可以从池中获取,而不是每次都在运行时创建新的对象。这样可以避免因频繁创建和销毁对象带来的开销,比如垃圾回收时间,以及可能的性能瓶颈...
对象池是预先创建并缓存一组对象的集合,当需要使用对象时,可以从池中获取,而不是每次需要时都去创建新的对象。当对象不再使用时,不是立即销毁,而是将其放回池中,等待下次使用。这种技术特别适用于生命周期短、...
在本项目中的"对象池管理器"实现了对对象的分级管理,这意味着它不仅提供了一般的对象池服务,还可能包括了缓存池和缓式加载功能。缓存池通常用于存储那些已被使用但可能在未来还会再次需要的对象,以便于快速复用,...
- **构造函数**: 在构造函数 `Create` 中初始化了对象池的几个关键成员,包括缓存列表 (`FCachedList`) 和缓存大小 (`FCacheSize`)。 - **析构函数**: 析构函数 `Destroy` 负责清理对象池中的所有对象,确保所有资源...
游戏开发中的对象池技术是一种优化资源管理的策略,它通过预先创建并缓存一组对象,以避免频繁地创建和销毁对象带来的性能开销。在这个"游戏对象池例子(兼容智能指针、工厂类)"中,我们将探讨如何利用C++实现这种...
《Go语言通用对象池的设计与实现》 在高性能和高并发的应用场景中,对象的创建和销毁往往成为系统性能的瓶颈。为了解决这一问题,程序员通常会采用对象池技术,Go语言也不例外。"Go Commons Pool"就是这样一个专门...
Unity3D GameObject对象通用的对象池。可以管理任意多个GameObject对象。支持延迟释放。可以设置缓存对象的最大数量。设置对象ID,通过ID快速查找对象。也可以通过派生接口,自动释放。
Unity3D资源 PoolManager 7.0.1 游戏对象池/缓存池性能优化插件 要求Unity2017.2.0或以上版本
因此,通过创建一个对象池,我们可以缓存一些已经实例化的XHR对象,供后续请求重复使用,从而减少资源消耗。 创建XMLHttpRequest对象池的步骤如下: 1. **初始化对象池**:在应用程序启动时,预先创建一定数量的...
学程序的应该都知道缓存池,不用的对象放入缓存池,需要创建对象时,从缓存池中取,提高效率和内存利用率,游戏开发必备
- **缓存池**:通过缓存池管理,可以批量操作多个缓存项,提高处理效率。 ### 5. 性能优化 - **缓存策略**:合理设置缓存策略,如LRU(Least Recently Used)或LFU(Least Frequently Used),可以提高缓存的命中...
### Oracle优化——缓存对象与数据 #### 一、引言 在Oracle数据库优化领域,缓存机制是一项关键的技术手段,旨在通过将频繁访问的数据和对象保留在内存中来提高系统的响应速度和整体性能。本篇文章将深入探讨Oracle...
《轻量级的对象池》 在软件开发中,对象池是一种优化资源管理的技术,它通过预先创建并维护一组对象,避免频繁地创建和销毁对象,从而提高系统的性能。本文将探讨对象池的设计原理、实现方式以及它在实际应用中的...
对象池通过预先创建并缓存对象,避免了反复创建和销毁,从而提高了游戏运行效率。 PoolManager V7.0 是一个专为Unity3D设计的对象池管理插件,它提供了一套完整的解决方案来管理和优化游戏中的对象生命周期。该插件...
对象缓存技术(也称为对象池)是一种可以显著提高性能和内存管理效率的技术。它的核心思想是在应用程序运行过程中,预先创建一组对象并将其存储在一个缓存池中。当需要使用这些对象时,可以从缓存池中获取已有的对象...
4. **对象池的缓存策略**:使用LRU(最近最少使用)等算法,确保常用对象优先被复用,减少新对象的创建。 在AS3中,我们可以创建一个`ObjectPool`类,其中包含`create()`、`release()`、`getAvailableObject()`等...