首页 > 语言 > 关键词  > .NET最新资讯  > 正文

.Net平台下的分布式缓存设计

2009-02-10 10:34 · 稿源:51CTO.com

缓存真是个好东西,在大型的系统中可以有效地提升系统的速度,此乃废话就不多说了,在.Net 平台下面我把缓存从功用大致分为两类,数据对象缓存和页面输出缓存。对于数据缓存来讲是由System.Web.Caching.Cache这个类来实现,可以从上下文对象Context.Cache 来获取这个对象的引用。而页面/控件输出缓存则是由.Net环境在运行时依据头部的缓存申明来控制缓存策略。本文主要论证与数据缓存相关的一些应用与问题。

有人提到了"无法跨Web园共享数据的问题",虽然提到解决方案就是使用XML文件来存放缓存的键值,这里有一个疑惑,就是.Net的Web园既然是进程独立的又何来共享之说呢,真要是这样的话即便是通过XML文档写入缓存键值缓存的对象也不能同时在两个进程中共享,而这里获得的好处仅是避免了在其它的进程中读到了已在当前进程中失效的“脏”缓存数据,这样的话开几个Web园就会产生几个缓存的对象对系统资源的利用系就比较低了. 如果是用Web场布署的话浪费就更多了,也许是还少有论坛达到这样的规模故不在设计能力的范围中吧。CommunityServer也是使用了这个系统对象,并对它作了一些包装形成了CommunityServer.Components.CSCache这个类,还是不错的,可以在项目中选择使用。

基于这个类的应注实现还有EnterpriseLibrary的CacheBlock里面的NullBackingStore方式,但是为了满足多进程/服务器共程缓存数据的需求EntLib还提供了将SQL SERVER作为后端存储设备的方案,这样在性能要求不是太严,客户端连接不是太多的情况下也可以使用这种方式.只需要将EntLib 配置为共享数据库分区的工作方式即可,所有的CacheManager实例都有对缓存块的读写权,当然你也可配置为只允许一个实例写,其它的来读。

那么还有没有更好的办法呢,其实是有的。不过我很奇怪在.Net平台下居然没有“原生态”的分布式缓存解决方案,也许是俺孤陋寡闻吧,有哪位达人知道的请分享。还好我们有Memcached这东西,它在PHP平台上已经取得了巨大的成功,是优秀的分布式缓存解决方案,可以参看这篇文章 , 大型的站点上应该必不可少吧.有举的同学可以去看看, 另外还想好一个思路, 就是在EntLib的基础上作扩展实现IBackingStore 接口从BaseBackingStore派生一个实现出来,再经由Remoting或者ICE这样的分布式中间件技术应该也可以实现的类似的功能吧。

用XML作为缓存键的存储方式倒是一个不错的想法,这样在批量移除缓存项的时候就不需要作扫描而直接得到相应的缓存键值,跟分布式缓存作一个整合应当是一个不错的方案。

好了,让我们再回头看看Discuz!NT在页面缓存上有些什么高招。

总的说来我是不怎么喜欢.Net2.0提供的页面输出缓存功能,主要是不能手动地控制页面缓存的过期,而使有缓存依赖项似乎也有点不爽。事实上使用数据绑定控件相对来说是比较消耗资源的,同样的数据我用StringBuilder直接拼出来输出速度要快不少,测试代码比较简单我这里就不给了,大家可以自己去测去,Discuz!NT在设计中也大量地采用了这样的方法(怪不得速度这么快呢;))。一般来讲模版被保存后后台会在aspx目录生成对应的页面文件, 比如你有一个页面,上面需要显示一个来访者的姓名,它的伪代码看起来可能是这个样子。

模版文件内容show.html:

以下为引用的内容:

<html>

<body>

Hello, Your name is <% yourname %>

</body>

</html>

生成的文件 show.aspx

以下为引用的内容:

templateBuilder.AppendLine("<html>");

templateBuilder.AppendLine("<body>");

templateBuilder.AppendLine("Hello, Your name is " + this.yourname); templateBuilder.AppendLine("</body>");

templateBuilder.AppendLine("</html>");

生成的文件 show.aspx

以下为引用的内容:

templateBuilder.AppendLine("");

templateBuilder.AppendLine("");

templateBuilder.AppendLine("Hello, Your name is " + this.yourname); templateBuilder.AppendLine("");

templateBuilder.AppendLine("");

这里的this.yourname对应着相应页面后台类里面的一个属性,由程序在运行时进行初始化赋值,这样最后得到的页面执行结果就可以从这个templateBuilder对象的ToString()方法得到, templateBuilder也就是一个页面后台类里面的StringBuilder类的实例,最后在页面执行完毕后的OnLoad事件中根据不同的页面类型,如首页,频道首页,内容页等, 使用不同的缓存策略将页面执行结果的HTML代码插入到缓存中,下一个请求进来的时候在进入页面生命周期之前的HttpModule(这里面还包含地址重写功能代码)中判断这个缓存是否有效,直接从内存读取缓存发回客户端.这样速度当然就快了, 页面上看到的执行时间自然是0ms. 不过对于登陆用户来说由于要显示不同的登陆信息所以不能使用匿名的缓存文件版本,所以说一旦你登陆页面才会真正执行一次,但是上面要显示的数据都有独立的缓存项,所以仅仅是重新组装一次页面代码罢了,速度还是比较快的,在官方论坛上看到首页加载时间是15ms, 够快的了。

我以为连这个时间其实也是可以再节省节省的。比如用户登陆信息这部分东西可以生成一段JS, 在向浏览器发出了匿名用户的缓存版本时再判断如果用户登陆了就追加这样一段JS代码,在里面去把相应的HTML替换掉就可以了,也可以使用AJAX技术在客户端去取,这样就解决了已登陆用户和未登陆用户在共享缓存版本上的问题,至少在首页这一级是可以的吧,其它的主要页面不好说应该也差不多,我对论坛程序的流程不是很了解。

从另一个角度讲已登陆用户不应该速度比匿名用户还慢吧。

举报

  • 相关推荐
  • 微信朋友圈评论区能发表情包和图片:缓存可清理 不会太占用存储空间

    上个月,微信开始灰度测试朋友圈评论区带图功能,支持用户用表情包和图片进行评论。 有网友表示,微信现在评论可以带图了,我想知道评论区的图片会不会缓存下来占用我的手机空间。 对此,微信员工客村小蒋表示,在讨论微信占空间时,有两种需要区分的数据:可再生数据和非可再生数据。

  • 三喇叭对称设计,ALATS Q6音响打造立体音乐空间

    ALATS Q6音响以300W强劲功率重新定义听觉盛宴。采用三喇叭单元对称排列设计,低音醇厚震撼心灵,高音通透如穿透云层的阳光。配备高信噪比功放芯片,精准控制每个声音细节,即使最大音量也能保持清晰不失真。简约时尚的外观设计能完美融入各种家居环境。这款音响不仅带来前所未有的立体音效体验,更能满足音乐发烧友和影音爱好者的需求,是生活中不可或缺的音乐伴侣。选择ALATS Q6,就是选择一个充满音乐魅力的生活空间。

  • 超凡性能,卓越设计——三星Galaxy Watch Ultra的诞生之路

    三星Galaxy Watch Ultra智能手表全新升级,融合"天圆地方"设计美学与户外性能。采用圆形表盘与方形底座结合,配备专属快捷按键,支持一键切换运动模式。表带采用无表耳设计,提升佩戴舒适度,并提供水上运动、越野运动等专业表带选择。搭载超级模拟表盘,可显示9项运动数据,支持个性化设置。2025款新增"钛岭蓝"配色,7月25日正式发售,预约可享表带赠品或分期免息优惠。这款兼具设计美感与实用功能的智能手表,重新定义了户外运动装备标准。

  • 理想汽车成立十周年!李想真情难抑登台献唱《朋友》 台下欢呼

    今日,理想汽车迎来意义非凡的十周年里程碑时刻,创始人李想亲临周年庆活动现场,与全体员工共同庆祝这一重要时刻。 活动现场,李想真情难抑,携手理想汽车执行董事兼总裁马东辉、执行董事兼首席财务官李铁以及首席技术官谢炎一同登台,四位高管共同唱响《朋友》。 那熟悉的旋律响起,仿佛将时光回溯,十年间理想汽车历经的风雨坎坷、拼搏奋进,都浓缩在这悠�

  • 君乐宝威县一牧通过TPM优秀奖初审 牧业精益管理实现里程碑式突破

    君乐宝乳业集团威县第一牧场凭借系统性精益管理实践和显著提质增效成果,7月4日成功通过TPM(全面生产维护)优秀奖初审。作为君乐宝首家全面导入TPM管理体系的标杆牧场,该牧场构建了覆盖奶牛养殖、饲草管理、设备运维等全流程的精益管理体系,实现奶牛健康数据、产奶量等关键指标的实时监测,达到国际先进水平。评审专家对牧场TPM推进的系统性和创新性给予高度肯定,认为其为中国乳业树立了全产业链一体化管理创新典范。君乐宝将持续优化管理体系,对标国际打造世界级牧场。

  • 贵金属投资平台安全大考:2025炒黄金安全平台评比 TOP10榜单揭晓

    文章介绍了2025年国内贵金属交易平台安全榜TOP10,重点推荐了宝富金业等优质平台。贵金属交易因其避险属性和增值潜力成为投资者优选,而选择安全可靠的平台是关键。宝富金业凭借技术创新、严格风控和优质服务荣登榜首,其他上榜平台如盛世金典、金瑞祥和国泰金业等也各具特色,提供多样交易品种、先进技术和专业服务。文章强调,随着金融市场变化和投资者需求多样化,这些优质平台将继续秉持安全、稳健、创新的理念,为投资者提供高效便捷的贵金属交易服务,助力实现财富增值。

  • 2025十大贵金属投资平台安全排行榜 炒黄金正规平台TOP10揭晓

    2025年全球经济不确定性加剧背景下,贵金属作为避险资产配置价值凸显。文章重点分析了现货黄金与白银的投资优势,并发布《2025十大贵金属投资平台安全排行榜》,从合规资质、交易系统稳定性、资金安全等维度评估。安环球凭借多年深耕、合规资质和稳定交易系统位列榜首,富得贵金属、美建智汇等平台分列其后。文章提醒投资者需警惕"黑平台",选择具备监管资质、用户口碑良好的正规平台,特别在市场波动期更应关注系统稳定性和出入金效率。

  • 安德马丁创始人现场互动!斐雪派克“设计有说”活动成都启幕

    7月10日,斐雪派克联合国际室内设计大奖ANDREW MARTIN在成都举办设计师交流活动。活动聚焦厨房设计,探讨如何通过设计回应社会变迁与用户需求。多位设计师认为斐雪派克的"社交厨房"兼顾功能性与情感连接,创始人卢从周指出厨房体现的不仅是美学,更是人际关爱的美学。现代厨房已超越烹饪功能,成为家庭社交、休闲中心,开放式设计促进家人互动。斐雪派克将精密工艺与简约艺术融合,通过智能辅助提升下厨体验。设计师们展望未来厨房将融合科技与人文,成为自然自在的生活空间。活动深入探讨了厨房设计与用户需求的连接点,呈现了斐雪派克社交厨房理念如何应对现代生活挑战。

  • 墨刀AI生成原型图,产品设计快人一步

    国内原型设计平台墨刀发布"AI生成原型图2.0"功能,30秒即可生成可编辑原型图,大幅提升产品设计效率。该功能通过AI技术解决传统原型设计周期长、效率低、修改繁琐等痛点,支持文字描述或图片上传自动生成高保真原型图,并可二次编辑优化。这一创新不仅标志着墨刀AI能力的全面升级,更代表产品设计方式的一次革新,显著加快产品迭代速度。未来,AI原型设计有望成为行业标配,助力企业更快响应市场需求,提升产品竞争力。

  • 芯朋苏州办公室设计|Chipown20周年之礼|时象设计

    芯朋微电子(Chipown)在苏州设立新办公区,将古典园林美学与现代科技完美融合。这家专注功率半导体研发的高科技企业创立于2005年,总部位于无锡。新办公空间以"传统赋能创新"为理念,通过开放式设计、绿色生态与现代工艺的共生,打造出兼具人文性与自然性的工作环境。电梯间采用材质碰撞设计,会议室以苏州园林元素点缀,培训室配备灵活隔断,处处体现江南风�