缓存子系统的设计方法

缓存子系统如何设计(Cachable tag, Memcache/redis support, xml config support, LRU/LFU/本地缓存命中率)

大家对这段代码肯定很熟悉吧:

public List<UserInfo> SearchUsers(string userName)
        {
            string cacheKey=string.Format("SearchUsers_{0}", 

userName);
            List<UserInfo>  users = cache.Find(cacheKey) as 

List<UserInfo>;
            if (users == null)
            {
                users = repository.GetUsersByUserName(userName);
                cache.Set(cacheKey, users);
            }
            return users;
        }

class HttpRuntimeCache
    {
        public object Find(string key)
        {
            return HttpRuntime.Cache[key];
        }
        public void Set(string key, object value)
        {
            HttpRuntime.Cache[key] = value;
        }
    }

导致了如下这些问题:

业务逻辑函数中引入了很多无关的缓存代码,导致DDD模型不够纯

更换缓存Provider不方便

加入缓存冗余机制不方便

没办法同时使用多个缓存系统

缓存大对象出现异常,比如Memcache有1M的value限制

有诸多问题,因此我们需要引入缓存子系统来解决上述问题,带来的好处:

DDD模型更加纯

具体的Cache实现机制可以很灵活,比如HttpRuntimeCache, Memcache, Redis 可以同时使用

加入了Cache冗余机制,不会由于某一台Memcache或者Redis down机导致系统 速度很慢,实际上,系统还是会保持飞快(除非backup也down了的情况)

开发人员更加致力于核心业务,不会分散注意力

缓存位置透明化,都会在xml配置文件中进行配置

解决方案,要用到这2篇文章的技术:C# 代理应用 - Cachable 和 聊聊 Memcached的应用。

主要的思路分2个:

模型端:通过代理来嵌入AOP方法,来判断是否需要缓存,有缓存value则直接 返回value;缓存value的写入是通过AOP的后置方法写入的,因此不需要在业务函 数中写代码,当然也支持代码调用。

Cache核心对象:这个对象要解决一致性hash算法、cache value大对象分解功 能、冗余机制

代理嵌入AOP的方法,已经在这篇文章中说明了 C# 代理应用 - Cachable,有 兴趣的看看,这里就不说了,我们来主要看看CacheCoordinator对象的实现

结构图如下:

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, 对象
, 缓存
, 缓存机制
, 缓存系统
, memcache
, value
, 代理memcache
, 缓存设计
子系统
垂直干线子系统设计、工作区子系统设计、设备间子系统设计、建筑群子系统设计、水平子系统设计内容,以便于您获取更多的相关知识。

时间: 2024-09-29 10:12:39

缓存子系统的设计方法的相关文章

jQuery中ajax的使用与缓存问题的解决方法

本篇文章主要介绍了jQuery中ajax的使用与缓存问题的解决方法.需要的朋友可以过来参考下,希望对大家有所帮助 1:GET访问 浏览器 认为 是等幂的 就是 一个相同的URL 只有一个结果[相同是指 整个URL字符串完全匹配] 所以 第二次访问的时候 如果 URL字符串没变化 浏览器是 直接拿出了第一次访问的结果   POST则 认为是一个 变动性 访问 (浏览器 认为 POST的提交 必定是 有改变的)   防止 GET 的 等幂 访问 就在URL后面加上 ?+new Date();,[总之

移动应用“快”体验设计方法

  产品的"快体验"是指从用户使用产品某项功能过程中自然流畅的过程.在产品使用流程中体现在多个层面,如下载快.加载快.反馈快等.当任何一个环节出现了卡顿.停滞,让用户进入漫长的等待时,都会带给用户焦急.烦躁的感受,以至于终止当前的操作,或直接弃用产品.因此,"快"是良好的产品体验核心因素之一. "快体验"有多重因素组成,包括外部环境的网络速度,产品本身的技术能力,交互策略制定,快体验的感知设计等.我们分解用户一个事件的操作过程(发出操作指令前.执

草图设计(一):最自由的一项设计方法

"转眼间已经在CDC生活了快两年的时间.从一名电子商务毕业生到一位职业的交互设计师,经历了许多的坎坷.常常会面对各种困难和压力,当发现有太多未知的领域,只有在学习.思考.实践中能够找到答案与自信." 草图设计是这一年来学习.思考.实践.总结的一项设计方法,尝试于产品设计的各个环节.草图设计对于设计师来说并不陌生,在日常工作中都有用到,相信很多设计师跟我都有同样想法,并且希望推广草图设计给同行以及产品经理,作为灵感与实现,需求与设计之间的桥梁.也非常希望感兴趣的同学回复转播此文,留下观点

软件工程之面向过程的软件设计方法

   面向过程,是一种以过程为中心的编程思想,这个过程有人也称之为面向记录,他们不支持丰富的面向对象的特性,比如继承多态等,还有重要的一点是,他们不允许混合持久化状态和域逻辑.   简单的来说,面向过程就是分析解决问题所需要的步骤,然后再用函数把这些步骤一步一步实现,使用的时候一个一个一次调用即可,我想大家都有乘坐动车的经历,比如说,从廊坊站到北京南,面向过程就是动车从廊坊站启动是一个事件,动车到达北京南是另一个事件,在编程序的时候我们关心的是某一个事件,而不是动车本身,我们分别对动车启动和到站

Web App动效设计原则 Web App的设计方法

文章描述:Mobile Web App的设计方法 [编者按]本文作者:邓腾(@千年牛皮糖),百度无线交互设计师 .在本文中,作者将给大家谈谈Mobile Web App的设计方法,内容包括:Web App定义.Web App的特点.发展现状及设计等等.希望对大家有所帮助. Native App与Web App的争论从未停息过,尽管很多人在批判Web App的各种不是,但也阻止不了各种各样的Web App如雨后春笋般出现,尤其是伴随智能手机的普及而受到重视的Mobile Web App.这是一种在

交互设计案例:网页进度条提升等待体验的设计方法

文章描述:从排队等待谈进度条设计. 排队等待是一种日常中常见的现象,例如新年领开工利是.去排队购买首发的苹果产品.每天中午去食堂排队购买午餐.排队等待在我们的生活中无处不在且看似是一个简单的现象.即使是种简单的存在,但也有其复杂的一面,当存在着很多条队列时,确定每条队列是做什么的就变得困难了:在加入队列后,人们会产生:大概要等多久?为什么队伍很久没有往前移动?等诸多疑问.无法解释的等待是令人烦躁的,不公平的等待则可能引发人们的怒火. 经历过领开工利是的同学应该对于当天排队等待的回忆不会很糟,甚至

数据库设计方法、规范与技巧

规范|技巧|设计|数据|数据库|数据库设计 数据库设计方法.规范与技巧(推荐)   一.数据库设计过程数据库技术是信息资源管理最有效的手段.数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求.数据库设计中需求分析阶段综合各个用户的应用需求(现实世界的需求),在概念设计阶段形成独立于机器特点.独立于各个DBMS产品的概念模式(信息世界模型),用E-R图来描述.在逻辑设计阶段将E-R图转换成具体的数据库产品支持的数据模型如关系

TeamCola信息结构:互联网产品前期设计方法

文章描述:通过TeamCola浅谈互联网产品前期设计方法. 当下大大小小层出不穷的互联网产品如同一场令人眼花缭乱的星球大战,普通用户会被死星.联盟战舰和绝地武士们手中的光剑所吸引,而设计师们则会去关注这些庞大或精巧的武器如何被制造出来. 是的,随着以用户为中心的设计(UCD)和用户体验设计(UED)概念的深入人心,互联网产品设计的方法和流程已被重新定义而且大同小异,即便是刚入门的麻瓜也能一本正经地告诉你一个正确的产品设计流程需要经过低保真原型.视觉设计.交互设计.高保真设计--等阶段. 彩程设计

数据库设计方法、规范与技巧(推荐)

规范|技巧|设计|数据|数据库|数据库设计 数据库设计方法.规范与技巧(推荐)   一.数据库设计过程数据库技术是信息资源管理最有效的手段.数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求.数据库设计中需求分析阶段综合各个用户的应用需求(现实世界的需求),在概念设计阶段形成独立于机器特点.独立于各个DBMS产品的概念模式(信息世界模型),用E-R图来描述.在逻辑设计阶段将E-R图转换成具体的数据库产品支持的数据模型如关系