关于在项目中使用缓存,相信做过一到两年开发的人员都不陌生。在这里谈谈我对缓存的理解吧,有错误的地方,还请大牛们指出。
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版本中,优化处理被明显的改善,在处理发生时不需要借助临时文件。