`
MarkDong
  • 浏览: 2397 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

域对象事件驱动的缓存策略(二)

    博客分类:
  • J2EE
阅读更多

    上文分析了目前在项目中使用的一些缓存的局限性,引出了一个我称之为“域对象事件驱动的缓存策略”的概念。本篇就仔细分析一下如何利用域对象事件来驱动缓存。

    通常使用的域对象无非会产生下面几种事件:增加删除修改(域对象的状态改变也算做修改)。这三种事件在我们通常的项目中基本可以对应到DAO层的三个方法:insert, delete, update。在DAO层的这三类方法中,我们可以明确的获得是对哪类域对象(Class)进行了处理,同时处理的又是哪个具体的实例(Object)。DAO层只需要将这些明确的信息通知到缓存管理模块,那么剩下的事就是缓存管理模块根据这些信息对已有的缓存做淘汰了。

    通常的缓存管理都是以key-value的形式来保存缓存信息的。其中key值是由使用者组装的一个唯一标识,value是使用者存放在该标识下的任意内容,可以是一段文本(例如HTML, XML, JavaScript等等),也可以是任意的对象(例如项目中的VO, Dom对象等等)。先看看我在以往纯JSP的项目中是怎样使用页面缓存的。例如列出所有文章列表的页面,用"article_list_all”字符串作为前缀,其后再拼装分页信息(页数,每页记录数,排序条件)的字符串作为该页面缓存的key值,将截获的request中的html内容作为该缓存的value存储到缓存系统中。这种缓存的缺陷就像上篇文章所讲的,只能设置它为每若干分钟进行强制淘汰,那么在这几分钟之内新发的文章就无法出现在文章列表中。这种策略对于实时性要求不强的内容发布的前台展现还是可以使用的,但是对于后台文章管理就已经不能胜任了。

    要想使缓存可以处理DAO层的事件,必须引入一层由Class和Object定位到key值的映射层。这个映射层通过某种规则可以将DAO层的事件查询到当前缓存的key的集合。我目前想到的规则也比较简单,就是在使用缓存系统时,不仅指定key和value,同时要指定这个key和哪些域对象(Class)相关,同时和这些Class是在什么样的范围上相关。

    例如上面说到的文章列表的例子,"article_list_all”这个缓存,就和ArticleDO这个域对象相关,范围就是all,即是和所有ArticleDO的实例相关,任何的对ArticleDO的操作都会是"article_list_all"缓存失效。如果是某个栏目下的文章列表页,key值可以定义为"column_article_list",该缓存定义为和ArticleDO相关,同时范围是article.columnid等于当前栏目id,那么当符合条件(即属于当前栏目)的ArticleDO的实例发生变化时,这个缓存会被置为失效。

    当然,上面说的这种规则还比较简单,最终要想实现出一个完备的“域对象事件驱动的缓存策略”可能还会比这个复杂的多。

1
0
分享到:
评论

相关推荐

    使用域驱动设计、CQRS和事件源的实验性全栈应用程序 -C#-TypeScript-下载

    这是一个关于使用域驱动设计(Domain-Driven Design, DDD)、命令查询责任分离(Command Query Responsibility Segregation, CQRS)和事件源(Event Sourcing)构建的全栈应用程序的实验项目,主要采用C#和...

    概述ASP.NET缓存机制

    2. **页输出缓存 (Output Cache)**:此缓存策略主要针对Web页面,将处理后的完整页面或页面部分存储在内存中,当客户端再次请求同一页面时,可以直接从缓存中读取,跳过重复的处理步骤。页输出缓存包括全页缓存和...

    WDF KMDF 内核模式驱动框架结构

    - **同步域**:定义一组需要同步的对象或操作。 - **执行等级**:确定线程的优先级和运行顺序。 - **锁**:提供互斥访问资源的机制。 - **同步机制的相互影响**:描述不同同步机制之间的交互作用。 - **安全**:处理...

    前端面试每日 31以面试题来驱动学习提倡每日学习与思考每天进步一点每天早上5点纯手工发布面试题死磕自己愉悦大家6000道前端面

    10. 性能优化:减少DOM操作、缓存策略、代码压缩等。 11. ES6及以上新特性:let和const、解构赋值、模板字符串、箭头函数、类和模块等。 深入学习JavaScript,不仅需要理解这些基本概念,还要掌握它们的实际应用,...

    .NET Remoting

    7. **性能优化**:.NET Remoting支持缓存策略,如客户端缓存和代理对象缓存,以减少不必要的网络通信,提高性能。 8. **事件处理**:Remoting支持异步事件处理,允许客户端订阅服务器端的事件,当事件触发时,...

    ChatRoom(.net remoting技术)

    8. **性能优化**:为了提供实时的聊天体验,开发者可能会使用异步调用、缓存策略以及优化的数据传输格式来减少延迟和提高效率。 9. **事件驱动编程**:在聊天室这样的多用户环境中,事件驱动编程模型非常常见。当...

    学生考试专用MCITP题库.pdf

    正确答案是C:修改默认域策略组策略对象(GPO)中的事件日志策略设置,增大日志容量或设置日志满后如何处理的策略。 7. 用户无法从Client 1登录到域,提示信息表明计算机账户问题。解决方法是恢复或更新计算机账户...

    基于Remoting技术的电子白板

    Remoting技术是.NET框架提供的一种跨进程通信(IPC)机制,它允许对象在不同的应用程序域(AppDomain)之间进行交互,甚至是跨越网络。在“基于Remoting技术的电子白板”项目中,这一技术被用来实现实时的协同聊天和...

    使用 ACTIONSCRIPT® 3.0 开发指南

    - **缓存策略**:根据应用场景选择合适的缓存策略,减少网络请求次数。 #### 三、使用ACTIONSCRIPT® 3.0组件 ActionScript 3.0不仅提供了一套完整的语言特性,还内置了一系列实用的组件库,帮助开发者快速构建...

    JavaScript高级教程第二版源代码

    8. **性能优化**:书中还会讨论JavaScript性能优化的策略,如减少DOM操作、合理使用缓存、避免阻塞主线程等,以提高网页的运行效率。 9. **错误处理**:有效的错误处理是任何软件开发的重要组成部分。书中会讲解...

    ASP.NET的网页代码模型及生命周期

    在ASP.NET中,通过使用模拟事件驱动模型的行为代替了ASP的线性处理模型。ASP.NET页框架模型隐式的为用户建立了事件和事件处理程序的关联。ASP.NET让用户可以为从浏览器传递的事件在服务器代码中设置相应的处理程序。...

    Asp.Net知识库

    Asp.Net知识库是一个综合性的资源集合,涵盖了多个关键领域,包括数据库开发、XML处理、Web服务、对象与控件的使用、缓存策略、系统设计、网络应用程序、文件操作、系统控制以及图像和多媒体处理。以下是这些领域的...

    使用.NET Remoting 创建五子棋对战游戏

    - **缓存策略**:减少不必要的网络通信,例如缓存棋盘状态。 - **性能监控**:分析通信延迟,优化传输效率,如压缩数据、批量处理请求等。 5. **多线程与并发** - **并发控制**:处理多个客户端同时访问服务器的...

    (JavaScript.Patterns).Stoyan.Stefanov.文字版

    11. **性能优化**:包括DOM操作优化、代码压缩、缓存策略等,这些技巧可以帮助提升JavaScript应用的运行效率。 12. **跨域通信**:JSONP、CORS、WebSocket等技术用于实现JavaScript跨域请求,这对于构建分布式Web...

    JavaScript范例.part16

    10. **性能优化**:包括减少DOM操作、缓存计算结果、避免全局变量、合理使用事件委托等策略,以提升JavaScript代码的执行效率。 "JavaScript范例.part16"可能就这些或类似的高级主题提供实例和实践,帮助开发者深化...

    java面试Spring.pdf

    Spring通过三级缓存策略来解决循环依赖问题,分别是单例Bean的早绑定、Eager初始化和延迟初始化。 **Spring的自动装配**: Spring支持自动装配,可以通过`autowired`和`@Qualifier`注解来自动匹配和注入Bean。 **...

    javascript 精典

    1. **基础语法**:JavaScript是一种基于对象和事件驱动的脚本语言,其基础语法包括变量声明(var, let, const)、数据类型(如字符串、数字、布尔值、null、undefined、对象和数组)、操作符(算术、比较、逻辑等)...

    JavaScript语言参考手册.rar

    11. **性能优化**:包括减少DOM操作、缓存计算结果、利用事件委托、避免阻塞主线程等策略。 12. **跨域通信**:如JSONP、CORS、iframe等技术,用于解决同源策略限制下的数据交换问题。 13. **模块系统**:CommonJS...

    Memcached源码剖析笔记

    这种缓存策略有效地减轻了数据库的负载,特别是在高并发场景下,极大地提升了系统的响应速度。 Memcached采用了一个简单的键值存储模型,即每个存储的对象都关联着一个唯一的键。这种方式使得开发者能够快速地存取...

Global site tag (gtag.js) - Google Analytics