没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|其它|编辑:郝浩|2010-01-18 10:40:14.000|阅读 589 次
概述:假设我们有一个会员管理系统,需要向各方提供查询会员基础资料的功能。会员一经注册,其基础资料就将不再发生变化(如会员帐号、身份证ID、注册时间等等)。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
1.缘起:
假设我们有一个会员管理系统,需要向各方提供查询会员基础资料的功能。会员一经注册,其基础资料就将不再发生变化(如会员帐号、身份证ID、注册时间等等)。
基于这样的需求,我们可以将会员的基础资料“永久地”缓存在内存中,从而提升对任何一个会员基础资料的查询速度。
我设计了ESBasic.ObjectManagement.Cache.ISmartDictionaryCache来对这种性质的对象进行缓存。
职能字典缓存的形象示意图如下:
2.适用场合:
在使用ISmartDictionaryCache之前,必须满足以下条件:
(1)将要被缓存的每个对象都有唯一的ID。
(2)被缓存的对象一旦“出生”就是恒定不变的。
(3)对象永远不会被销毁,或者说即使被销毁了在缓存中仍然存在也无关紧要。
3.设计思想与实现
ISmartDictionaryCache的接口定义如下:
ISmartDictionaryCache依赖于我们前面介绍的IObjectRetriever接口,这就表示智能字典缓存是通过IObjectRetriever来将对象加载到缓存中来的。
Initialize方法执行时,会将所有对象都加载到内存中。
当外部调用Get方法时,如果目标对象在缓存中不存在,缓存则会调用IObjectRetriever加载目标对象。如果目标对象在持久化存储中都不存在,就会返回null。
注意,ISmartDictionaryCache并没有提供任何将对象移除缓存的方法,这表明对象一旦加载到缓存中,就将一直存在直到系统停止运行。
ISmartDictionaryCache接口的实现是简单的。同样的,SmartDictionaryCache可以在多线程的环境中使用,因为我们在实现时对内部集合ditionary进行了加锁控制。
4. 使用时的注意事项
(1)在使用智能字典缓存时,要考虑到对象的数量和对象的尺寸大小的问题。因为如果对象的数量巨大,而且对象的个头也很大,那将占用很多的内存空间。
(2)如果缓存中的对象被访问的概率不是一样的,而是由明显的差别,比如有绝大部分对象从来不被访问,有的对象被密集访问,那这个时候可以考虑使用我们后面即将介绍的“热缓存”IHotCache来代替智能字典缓存。
(3)智能字典缓存在初始化时调用了IObjectRetriever接口的RetrieveAll方法,但是正如我们在介绍IObjectRetriever时提到的,在实现IObjectRetriever接口的RetrieveAll方法,不一定要真正的返回所有的对象,你可以只返回那些你认为将会被使用到的对象。甚至,你可以返回一个不包含任何元素的集合,这样,智能字典缓存就只会缓存那些至少被访问过一次的对象了。在某些系统中,这也许可以有效地节省一些内存空间。
5.扩展
智能字典缓存ISmartDictionaryCache只能缓存恒定不变的对象?嗯,这一点是千真万确的。但是,有些情况我们可以灵活处理。
还是以我们在缘起部分提到的那个例子继续讲解,让我们在其基础上,再假设一个会员(Member)的绝大部分资料是在注册时就确定下来不会发生改变的,但是有小部分资料(比如对应这数据库中Member表中的几个列)是会发生变化的,比如会员的额度、密码、最后一次访问时间等这样的信息。当外部向系统请求这些非恒定信息时,我们就无法从智能字典缓存中获取了,因为智能字典缓存中的目标会员的这些字段可能已经不是正确的值了。
基于这样的情况,我们仍然是可以使用智能字典缓存的。这里我提出一个SubObject(“子对象”)的概念。所谓“子对象”就是由某对象的一部分属性构成的一个新的对象。
所以,我们可以将Member中恒定不变的部分抽出来形成一个子对象,如SubMember,那么SubMember就符合了使用ISmartDictionaryCache进行缓存条件。当外部要查询会员的基础资料属于恒定部分时,我们就可以非常快速地从ISmartDictionaryCache获取返回。
对于像Member这样由恒定部分和非恒定部分构成的对象来说,除了使用这种方式进行缓存之外,还有其它的办法。但由于超出了本节的主题,我们会在其它小节进行介绍。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:博客园面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号