[原创]关于Cache的工作原理_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
2
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3039 | 回复: 1   主题: [原创]关于Cache的工作原理        下一篇 
lei.zhang
注册用户
等级:少校
经验:989
发帖:7
精华:0
注册:1970-1-1
状态:离线
发送短消息息给lei.zhang 加好友    发送短消息息给lei.zhang 发消息
发表于: IP:您无权察看 2015-10-9 14:16:23 | [全部帖] [楼主帖] 楼主

关于在项目中使用缓存,相信做过一到两年开发的人员都不陌生。在这里谈谈我对缓存的理解吧,有错误的地方,还请大牛们指出。

Cache的使用条件:访问比较频繁,且内容不经常变动的数据;

                 访问比较频繁,且内容经常变动要视情况而定。

Cache的原理:使用缓存,就是将一些访问率较高的数据,从数据库中取出,放入缓存中。在使用数据的时候,先查找缓存中是否有相关记录,有,则返回查询到的数据;

                无,则查询数据库,数据库中有数据,则将查询到的数据放入缓存,同时返回获取到的数据。

Cache的分类: Cache分为在内存中的,和在硬盘上的。即内存缓冲、索引式硬盘缓冲。

             一般活跃的数据会放在内存中,不活跃的数据,且需要放在缓存中的,则存放在,缓存的配置文件中指定的位置。

Cache的配置:#WEB-INF/classes/cache.ccf

-----------------------------------------------------------------------------------------------------------------------    

cache.cff配置中,关于一些重要配置的含义:

 1.常规配置

#定义一个硬盘缓冲区产生器(Factory),取名为DC 

jcs.auxiliary.DC=org.apache.stratum.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory  

#指明缓冲文件存放到那里去:

jcs.auxiliary.DC.attributes=org.apache.stratum.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes jcs.auxiliary

jcs.default=DC 表示所有未特别指定属性的缓冲区都会自己使用一个硬盘缓冲区,缓冲文件会以缓冲区的名字来命名存放在指定的目录下。

#下面配置了默认缓冲属性:

jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes

jcs.default.cacheattributes.MaxObjects=1000

jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache

     一个应用中,由于对象类型的不同,可能会使用多个缓冲区,每个缓冲区都会有一个名字,如果在配置文件中没有指明特定的缓冲区的属性,所有的缓冲区都会根据默认属性来构建。上面的内容,指明缓冲区的大小为存放1000个对象,内存缓冲器使用LRUMemoryCache对象。可选的还有MRUMemoryCache,应该可以自定义新的内存缓冲区。1000个缓冲对象这个容量,是指每个缓冲区都缓冲1000个,而不是指所有缓冲区总容量。以上配置,就可以让应用运行起来。

2.其他配置

----------------------------------------------------------------------------------------------------------------------

jcs.auxiliary.DC=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory

jcs.auxiliary.DC.attributes=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes

jcs.auxiliary.DC.attributes.DiskPath=D:/apps/cache/jbbs

jcs.auxiliary.DC.attributes.MaxRecycleBinSize=7500

jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount=300000

jcs.auxiliary.DC.attributes.MaxKeySize=10000

jcs.auxiliary.DC.attributes.MaxPurgatorySize=10000

----------------------------------------------------------------------------------------------------------------------

(1)磁盘备用缓存的配置

jcs.auxiliary.DC=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory

jcs.auxiliary.DC.attributes=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes

jcs.auxiliary.DC.attributes.DiskPath=D:/apps/cache/jbbs

     表示创建了一个被DC引用的磁盘备用缓存,它使用的文件放在”DiskPath”目录中。

(2)jcs.auxiliary.DC.attributes.MaxKeySize=10000

     磁盘索引采用了LRU存储限定,通过maxKeySize参数配置了键的最大数量,如果最大键的大小小于0,将不限定键的数量,默认的最大键数是5000.

      此处定义的是10000,表示磁盘索引键的最大数量是10000。

(3)jcs.auxiliary.DC.attributes.MaxPurgatorySize=10000(磁盘缓存的写处理是异步,并且通过使用一个叫做炼狱(purgatory)内存区域来提高效率)

磁盘缓存的purgatory的大小是用LRU规则进行存储限定。通过MaxPurgatorySize参数来设定purgatory中所允许的最大元素的数量,默认最大的purgatory的大小是5000.

此处定义的是10000,表示炼狱(purgatory)内存区域中所允许的最大元素的数量是10000。

(4)jcs.auxiliary.DC.attributes.MaxRecycleBinSize=10000

     如果所有放入磁盘缓存中项目的大小是相同的,那么回收站就将总是返回与磁盘缓存完全相同的匹配。但是,如果项目的大小不同,那么磁盘缓存将使用不小于,并且最接近准备写入

     磁盘的项目的大小的自自由位置,因此被回收的位置的大小将比实际写入磁盘的项目的大小要大,这样将有空白位置不能被使用。

     优化的目的就是删除这种缺陷,通过MaxRecycleBinSize参数来优化。

(5)jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount=300000

    通过配置OptimizeAtRemoveCount参数,磁盘缓存能够在运行时整理数据文件。因为整理处理只是在项目被删除时才需要,所以整理的间隔时间是由删除处理的次数来决定的。

    当前没有方法在规定的时间来运行整理处理。如果把OptimizeAtRemoveCount参数设定为-1,那么直到缓存被关闭时才进行数据文件的优化处理,默认值是-1.

    在JCS的1.2.7.0版本中,优化处理被明显的改善,在处理发生时不需要借助临时文件。







赞(0)    操作        顶端 
arcona
注册用户
等级:少校
经验:1100
发帖:10
精华:0
注册:2015-6-1
状态:离线
发送短消息息给arcona 加好友    发送短消息息给arcona 发消息
发表于: IP:您无权察看 2016-6-29 9:24:02 | [全部帖] [楼主帖] 2  楼

不错,感谢分享



赞(0)    操作        顶端 
总帖数
2
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论