设置缓存的大小
目录
1 CacheManager级别
2 Cache级别
3 大小衡量
4 配置大小示例
缓存大小的限制可以设置在CacheManager上,也可以设置在单个的Cache上。我们可以设置缓存使用内存的大小,也可以设置缓存使用磁盘的大小,但是使用堆内存的大小是必须设置的,其它可设可不设,默认不设就是无限制。在设置缓存大小的时候,我们可以设置缓存使用某一个存储器的最大字节数,也可以设置缓存在某一个存储器上最多存放元素的数量。
1 CacheManager级别
CacheManager级别有三个属性可以分别用来限制三种存储器缓存信息的大小,其控制的都是字节数,分别是maxBytesLocalHeap、maxBytesLocalOffHeap和maxBytesLocalDisk。CacheManager级别限制的大小是其内所有的Cache共享的。
maxBytesLocalHeap是用来限制缓存所能使用的堆内存的最大字节数的,其单位可以是K、M或G,不区分大小写。默认是0,表示不限制。但是当我们没有指定CacheManager级别的maxBytesLocalHeap时,我们必须在每一个Cache上指定maxBytesLocalHeap或maxEntriesLocalHeap。
maxBytesLocalOffHeap是用来限制缓存所能使用的非堆内存的最大字节数,其单位也可以是K、M或G。默认是0,表示不限制。但是当我们在CacheManager级别指定了maxBytesLocalOffHeap时就会隐式的使所有Cache级别的overflowToOffHeap为true,在Cache级别使用该属性时只会使当前Cache的overflowToOffHeap为true。如果此时不需要overflowToOffHeap的话,那么我们需要在Cache级别显示的指定overflowToOffHeap为false。只有企业版的Ehcache才能使用非堆内存存储缓存信息。
maxBytesLocalDisk是用来限制缓存所能使用的磁盘的最大字节数的,其单位可以是K、M或G。默认是0,表示不限制。只有在单机环境下才可以使用本地磁盘,分布式环境下是不可以使用的。另外,这个设置只适用于临时将缓存内的信息写入到磁盘的情况,对于持久化缓存信息到磁盘的情况是不适用的。Cache级别的maxBytesLocalDisk同样如此。当我们在CacheManager级别指定了maxBytesLocalDisk时会隐式的指定所有Cache的overflowToDisk为true,而Cache级别只会使当前Cache的overflowToDisk为true。
下面是一个在CacheManager级别指定缓存大小限制的示例,在该示例中我们指定了该CacheManager所能使用的最大堆内存是500M,最大非堆内存是2G,使用本地磁盘的最大字节数是50G。
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" maxBytesLocalHeap="500M" maxBytesLocalOffHeap="2G" maxBytesLocalDisk="50G"> </ehcache>
2 Cache级别
在CacheManager上能够指定的限制大小的参数在Cache级别都能使用。当我们在Cache级别指定了某种类型的限制大小后,该Cache将不再共享CacheManager内的该种限制了。如我们在CacheManager级别限制了堆内存的最大使用数maxBytesLocalHeap为1G,意味着CacheManager内的所有的Cache将共享这1G的堆内存,如果这个时候我们指定CacheManager内的cache1的最大使用堆内存数maxBytesLocalHeap为200M,那就意味着cache1的堆内存最大使用数只能是其自身设置的200M了,而其它Cache只能共享剩余的824M了。
与CacheManager不同的是我们在Cache级别上指定maxBytesLocalHeap、maxBytesLocalOffHeap和maxBytesLocalDisk时还可以使用百分比的形式,前提是对应的限制在CacheManager上有指定。打个比方,我们的CacheManager有如下配置,我们指定了其最多使用的堆内存是500M,那么这个时候我们在其中定义了一个Cache,在指定其maxBytesLocalHeap时我们可以指定其值为百分比形式,如50%,表示我们的Cache最多使用CacheManager级别的maxBytesLocalHeap的50%,即250M。而如果我们试图在该Cache上使用百分比的时候指定maxBytesLocalDisk时则会出错,因为我们没有在CacheManager级别上指定maxBytesLocalDisk,Ehcache也就无法知道你这个百分比到底是多少了。需要注意的是我们所有Cache上指定的字节数大小之和不能超过CacheManager上对应的限制大小;所有Cache上对应限制以百分比形式指定的和不能超过100%。
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" maxBytesLocalHeap="500M"> </ehcache>
此外,在Cache级别我们还可以利用两个属性来限制在堆内存或者是磁盘上缓存元素的最大数,这两个属性是maxEntriesLocalHeap和maxEntriesLocalDisk,而对于非堆内存OffHeap的话是不能指定元素的最大数量的。
maxEntriesLocalHeap是用来限制当前缓存在堆内存上所能保存的最大元素数量的。Ehcache规定如果在CacheManager上没有指定maxBytesLocalHeap时必须在各个Cache上指定maxBytesLocalHeap或者maxEntriesLocalHeap,但maxEntriesLocalHeap和maxBytesLocalHeap不能同时出现。也就是说我们不能在一个Cache上同时指定maxBytesLocalHeap和maxEntriesLocalHeap,当然我们也不能在Cache上指定maxEntriesLocalHeap的同时在CacheManager上指定maxBytesLocalHeap。但同时在CacheManager和Cache上指定maxBytesLocalHeap则是允许的。
maxEntriesLocalDisk是用来限制在磁盘上所能保存的元素的最大数量的。(暂时觉得这种保存的数量限制应该是对应于持久化的保存?)。
3 大小衡量
放在Cache里面的元素将会使用net.sf.ehcache.pool.sizeof.SizeOf来衡量其大小,当然这种衡量只是针对于存在堆内存里面的元素而言的,因为非堆内存和磁盘上我们是直接存的字节,可以直接来计算字节。元素的大小包括元素的key和value,以及其它属性信息,而且在计算大小时这些信息都是递归计算的,即如果value关联了另外一个对象B,那么B的大小也会被计算在内。如果我们不想计算元素内部某部分内容的大小的话,我们可以通过使用net.sf.ehcache.pool.sizeof.annotations.IgnoreSizeOf注解来标记忽略该内容的大小。IgnoreSizeOf是不会考虑继承性的,也就是说如果你将IgnoreSizeOf标注在类型A上,那么将只会忽略A的大小,而不会忽略A的子类B的大小,如果也需要忽略B的大小的话,则需要在类B上也使用IgnoreSizeOf进行标注。
IgnoreSizeOf可以标记在三个地方。
(1)属性上:表示忽略某对象的对应属性。如下表示我们将忽略User对象的role属性。
public class User { @IgnoreSizeOf private Role role; }
(2)类上:表示将忽略该中类型。如下表示我们将忽略User类型。
@IgnoreSizeOf public class User { private String name; }
(3)包上:标记在包上的时候是标记在包对应的package-info.java上,表示将忽略该包下面所有的类型,如我们要忽略com.xxx.xxx包下的所有内容时可以在该包对应的package-info.java文件中的package上使用IgnoreSizeOf注解进行标注。
@net.sf.ehcache.pool.sizeof.annotations.IgnoreSizeOf package com.xxx.xxx;
此外,我们也可以通过全限定名的方式指定在计算Cache中元素的大小时哪些属性、类和包需要忽略,然后把这些信息写在一个属性文件里面,再将系统属性net.sf.ehcache.sizeof.filter指向该文件。系统属性可以通过java –Dnet.sf.ehcache.sizeof.filter来指定。
如上所述,我们的SizeOf在进行大小衡量的时候是进行递归衡量的,即会计算对象所持有的引用、引用的引用等。针对于此,我们可以来指定SizeOf在进行大小衡量时的一个策略,sizeOfPolicy。sizeOfPolicy有CacheManager级别的和Cache级别的,分别对应于ehcache子元素和cache子元素或defaultCache子元素。当Cache级别和CacheManager级别同时指定有sizeOfPolicy时,Cache级别的配置将覆盖CacheManager级别的配置。sizeOfPolicy元素有两个属性,maxDepth和maxDepthExceededBehavior。
l maxDepth表示链接的最大深度。
l maxDepthExceededBehavior表示当访问的深度超过指定的maxDepth后的行为,对应有continue和abort两种。continue将给出一个警告,然后继续计算大小,这是默认值;abort将给出警告,然后中止此次计算,并标记没有跟踪到内存的使用。
4 配置大小示例
(1)只在CacheManager级别指定大小限制,没有在Cache级别指定,这种情况下cache1、cache2、cache3将平分CacheManager级别的大小限制,即各自拥有CacheManager级别的heap、offHeap和disk三分之一的容量。
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" maxBytesLocalHeap="500M" maxBytesLocalOffHeap="5G" maxBytesLocalDisk="50G"> <cache name="cache1"/> <cache name="cache2"/> <cache name="cache3"/> </ehcache>
(2)CacheManager级别指定了大小限制,同时某些Cache也指定了大小限制。如下,我们指定了cache1的maxBytesLocalHeap为200M,这个时候cache1将可以使用到200M的堆内存,而cache2和cache3将平分CacheManager级别除去cache1所拥有的200M之外的堆内存,即各150M。而CacheManager级别的offHeap和disk容量将由cache1、cache2和cache3平分,各得三分之一。
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" maxBytesLocalHeap="500M" maxBytesLocalOffHeap="5G" maxBytesLocalDisk="50G"> <cache name="cache1" maxBytesLocalHeap="200M"/> <cache name="cache2"/> <cache name="cache3"/> </ehcache>
(3)CacheManager不指定大小限制,Cache级别指定大小限制。这个时候将各用各的,即各个Cache只能使用其自身指定好的大小。
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"> <cache name="cache1" maxBytesLocalHeap="200M"/> <cache name="cache2" maxBytesLocalHeap="300M"/> <cache name="cache3" maxBytesLocalHeap="200M"/> </ehcache>
(4)当我们在CacheManager级别指定了大小限制之后,我们可以在Cache级别通过百分比的形式来指定其可使用的对应大小限制。在下面示例中,我们的CacheManager拥有500M的heap内存,5G的offHeap内存,50G的disk容量。cache1拥有CacheManager 20%的heap内存,即100M,剩余的400M cache2和cache3平分,即各200M;cache2拥有CacheManager 20%的offHeap内存,即1G,剩余的4G将由cache1和cache3平分,即各2G;cache3拥有CacheManager 20%的disk容量,即10G,剩余的40G将由cache1和cache2平分,即各20G。所以最终cache1将拥有heap 100M、offHeap 2G、disk 20G;cache2将拥有heap 200M、offHeap 1G、disk 20G;cache3将拥有heap 200M、offHeap 2G、disk 10G。
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" maxBytesLocalHeap="500M" maxBytesLocalOffHeap="5G" maxBytesLocalDisk="50G"> <cache name="cache1" maxBytesLocalHeap="20%"/> <cache name="cache2" maxBytesLocalOffHeap="20%"/> <cache name="cache3" maxBytesLocalDisk="20%"/> </ehcache>
(5)当我们没有在CacheManager上指定某种资源的可用量时我们还可以在Cache级别进行指定。CacheManager只有600M的heap内存,cache1、cache2、cache3都没有显式的指定使用多少heap内存,所以将各得200M heap内存。而cache1还指定了可以使用2G的offHeap内存;cache2还指定了可以使用20G的磁盘;而cache3仅仅只能使用CacheManager分配下来的200M heap内存。
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" maxBytesLocalHeap="600M"> <cache name="cache1" maxBytesLocalOffHeap="2G"/> <cache name="cache2" maxBytesLocalDisk="20G"/> <cache name="cache3"/> </ehcache>
总之,当Cache自身设置了某种容量的限制时,在对应类型的容量限制上将使用自身的限制,如某Cache自身设置了maxBytesLocalHeap为100M,那么它能够使用的堆内存的最大量就是100M。而当Cache自身没有指定某种类型的容量限制时,如果在CacheManager级别有指定的话,那么该Cache将和其它同样没有指定该类型容量限制的Cache一起平分CacheManager级别该种类型的容量被指定了该类型容量限制的Cache瓜分后剩余的容量,否则其将没有该种类型的容量可用。如当CacheA没有指定maxBytesLocalDisk限制,而在CacheManager级别指定了maxBytesLocalDisk限制为10G,如果在该CacheManager内还有另外一个CacheB指定了maxBytesLocalDisk限制为5G,那么CacheA将能够使用的disk容量为5G,如果此时还有另外N个Cache也没有指定maxBytesLocalDisk限制的话,那么它们将和CacheA一起瓜分CacheManager的disk容量10G除去CacheB的disk容量5G后剩余的5G,即各5/(N+1)G。如果CacheManager级别也没有指定maxBytesLocalDisk的话,那么CacheA和其它同样没有指定maxBytesLocalDisk的Cache将不能使用disk进行Cache信息的存储(这里是假设这些Cache同样都没有指定maxEntriesLocalDisk)。关于这块如果还有不懂的,可以参考第四小节“配置大小示例”中示例。
(本文是基于Ehcache2.8.1所写)
相关推荐
5G通信行业、网络优化、通信工程建设资料。
299-煤炭大数据智能分析解决方案.pptx
使用说明: 1、各月工资表,已用公式设置完毕,请在AI1单元格填入月份本表自动显示数据,您再按实际情况稍加修正,工资就完成了! 2、使用时,请把一月份工资表中公式的数据,按你的实际情况修改,之后把一月份工资表复制到2至12月就行了。以后再用时参阅第一条说明。 3、养老保险、失业保险、医疗保险、住房公积金 自动生成,但各单位的比例不同,请自行修改公式中的参数。 4、AK 列至 BD 列是报税资料,自动生成。 5、“四联工资单”只须输入员工编号与选择月份,便可自动取数;请根据需要任选。 6、“工资条”全部自动生成;有单行与双行两种,请任选使用。使用工资条时,请在《个税报告》表的V9单元格选择月份。 7、《扣缴个人所得税报告表》自动生成,请在V9单元格选择月份。请不要随意改动。 8、加班工资、考勤应扣,按每月30天计算;养、失、医、房 项目提取基数与比例亦应按单位规定进行修改。 9、各表均设了保护,但未设密码,您尽可撤消,做您想作的事。 10、打印工资表时,可将不需用的列
5G通信行业、网络优化、通信工程建设资料
5G通信、网络优化与通信建设
网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。系统化是必要的,设计网上系统不仅会节约人力和管理成本,还会安全保存庞大的数据量,对于信息的维护和检索也不需要花费很多时间,非常的便利。 网上系统是在MySQL中建立数据表保存信息,运用SpringBoot框架和Java语言编写。并按照软件设计开发流程进行设计实现。系统具备友好性且功能完善。 网上系统在让售信息规范化的同时,也能及时通过数据输入的有效性规则检测出错误数据,让数据的录入达到准确性的目的,进而提升数据的可靠性,让系统数据的错误率降至最低。 关键词:vue;MySQL;SpringBoot框架 【引流】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
199-袁骏毅:新形势下医院数据安全治理应对实践.pdf
毕业设计:基于SSM的mysql_信息类课程教学知识管理系统(源码 + 数据库) ssm信息类课程教学知识管理系统开发 采用 ssm框架技术,java语言,mysql数据库 前台+后台的模式开发 前台界面:W1 后台界面:CC 内容页面:P4 前台: 用户注册(手机号,用户名,姓名,登录用户名,密码,备注) 用户登录,找回密码,设置新密码 网站公告查看 课程查看(注册用户登录后,可以查看非公开课,用户不登录,可以查看公开课),点击查看课程详情,课程名称,授课专业,课程简介等,可以下载课程,以word或者PDF形式 知识卡片查看:点击课程后,可以查看该课程里的知识卡片,知识卡片分为文本,图片,视频3种类型的知识卡片。登录后可以收藏知识卡片 后台: 管理员 管理员管理 教师信息管理(姓名,学校,职级,绑定邮箱,电话,用户名,密码等) 注册用户审核 网站公告管理 课程信息管理(可以上传课程,word或者pdf形式) 知识卡片管理 系统管理 教师 个人资料修改 创建课程 创建知识卡片 注册用户 个人资料修改 我收藏的知识卡片
网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。系统化是必要的,设计网上系统不仅会节约人力和管理成本,还会安全保存庞大的数据量,对于信息的维护和检索也不需要花费很多时间,非常的便利。 网上系统是在MySQL中建立数据表保存信息,运用SpringBoot框架和Java语言编写。并按照软件设计开发流程进行设计实现。系统具备友好性且功能完善。 网上系统在让售信息规范化的同时,也能及时通过数据输入的有效性规则检测出错误数据,让数据的录入达到准确性的目的,进而提升数据的可靠性,让系统数据的错误率降至最低。 关键词:vue;MySQL;SpringBoot框架 【引流】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
计算机二级备考资源丰富多样,可通过权威机构官网、在线教育平台、专业培训机构网站等获取学习资料。结合多种资源学习,备考更高效。
夭月.zi删除p
基于c语言的ktv歌曲系统.zip
6.docx
网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。系统化是必要的,设计网上系统不仅会节约人力和管理成本,还会安全保存庞大的数据量,对于信息的维护和检索也不需要花费很多时间,非常的便利。 网上系统是在MySQL中建立数据表保存信息,运用SpringBoot框架和Java语言编写。并按照软件设计开发流程进行设计实现。系统具备友好性且功能完善。 网上系统在让售信息规范化的同时,也能及时通过数据输入的有效性规则检测出错误数据,让数据的录入达到准确性的目的,进而提升数据的可靠性,让系统数据的错误率降至最低。 关键词:vue;MySQL;SpringBoot框架 【引流】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
基于提供的字段介绍,我们可以设计一个基础的工厂工资明细表Excel模板结构如下: | 序号 | 姓名 | 工种 | 工作天数 | 工时费/天 | 小计(正常工资) | 加班时间 | 加班费率/小时 | 小计(加班工资) | 预借 | 合计(实发工资) | 签字 | 备注 | | ---- | ---- | ---- | -------- | ---------- | -------------- | -------- | -------------- | --------------- | ---- | -------------- | ---- | ---- | | 1 | | | | | | | | | | | | | | 2 | | | | | =D2*C2
当前园区的主要工作是如何在资源 缺的背景下,创造更多的价值,实现园区经济转型、社会和谐。利用电子信息技术的深度应用与融合,提升园区政府的管理、服务、引导能力,提升企业的研发设计、生产制造、经营管理的效率,提升园区运行的智能、顺畅程度,提升园区居民生活的便利水平,是智慧园区建设的主要任务。 智慧园区由基础设施、信息资源、业务应用、运行保障四个层次组成 通过构建新一代信息基础设施,为园区内的组织和个人提供安全、高速、便捷的网络环境,实现园区内的部件、人员随时随地接入网络,奠定了泛在感知的网络基础。新一代的信息基础设主要包括两个层面,全面覆盖的感知层和泛在的传输网络层。 智慧应用体系是智慧园区建设重要的部分,也是可以直接提升园区管理服务能力、生产生活环境的重要构成,智慧应用体系分析、整合园区运行核心系统的各项关键信息,从而对于包括民生、环保、公共安全、城市服务、工商业活动在内的各种需求做出智能响应,使园区运行更加智慧顺畅,为人类创造更美好的城市生活。智慧应用体系包括一个支撑平台和四个应用体系。
5G通信行业、网络优化、通信工程建设资料
由ASAM组织提出的诊断数据交互格式,全称为Open Diagnostic Data Exchange。即ODX规范ISO-22901,主要用于描述整车以及ECU的诊断数据,方便供应商与OEM、产品开发与售后间的数据交互。ODX使用统一建模语言(UML)图描述,数据交互格式使用可扩展标记语言(XML)存储记录数据。便于承载从设计、开发、测试、生产及售后维护的全流程工作。
CSF405 EN 2001673 P0802183-01, Rev B CHAINSAW (TOP HANDLE) OPERATOR MANUAL
Gif动画录制软件是一款方便好用的小软件,使用此工具,您可以记录屏幕的选定区域,网络摄像头的实时提要或草图板上的实时图形。之后,您可以编辑动画并将其另存为gif,apng,视频,psd或png图像。