最近关注了一些缓存框架的特性和实现,包括OSCache、JCS、Ehcache、Memcached等等,公司的两个缓存框架,以及一个标准JSR 107(JCache),发现一些诸多类同的方面。如果你不够熟悉以上,不妨先看看这两篇文章:《OSCache框架源码解析》和《Ehcache详细解读》,再看下面的内容也许会有更多想法。之后再思考,如果要自己去实现一套缓存框架,需要考虑哪些东西?
1、为哪些数据做缓存?
- 模型对象,这在业务逻辑层面最常见。
- 数据库查询结果集。
- 页面缓存、页面片段缓存。
- 运算结果集,尤其对于幂等性服务。
- 外部接口查询结果。
2、缓存框架的核心:
缓存生命周期管理,很多重要特性都是围绕它来展开的。
举例:
3、重要特性,这些特性不一定全部要具备,但是多数都要包含:
- 一致性选择。缓存框架的设计必须首先考虑这一点。通常我们见到的缓存框架都是最终一致性的,允许获取数据有一定的延迟窗口。一致性关系到缓存的生命周期,是缓存的核心理念之一。
- 分级存储。也和缓存生命周期密切相关。至少应包括内存和磁盘两级存储,有些缓存框架包含组网内部节点的分级等等,允许用户管理缓存数据在不同级别存储中的跃迁。分级存储还包括对存储数据的管理,以提高数据获取的效率;包括跃迁策略的定制,比如在某一级满足怎样的超时策略可以发生向下跃迁。
- 规约配置,默认配置。可以支持XML、properties、DSL编程等等多种配置方式,但是最重要的是,要提供一个默认配置,允许用户在简单配置或者零配置的情况下使用缓存。
- 集群、分布式,这意味着一定的伸缩性。包括内部通信协议选择,比如节点之间使用JMS、RMI或RESTful方式通信等等;包括节点热部署和节点发现能力,这通常都使用组播消息来实现;包括集群的方式,是Server-Client群、消息总线方式还是节点对等,等等。
- 定制扩展性。尤其是淘汰算法、事件监听、持久化策略等等,都要允许用户方便地自定义。
4、相对较次要的特性:
- 统计能力。包括各级缓存命中情况统计,生命周期长度统计。
- 批量接口、异步接口。包括缓存分组能力。
- 缓存数据存储校验。
- Web支持。特指Web容器中,对于页面存储的额外支持。
- 免锁数据处理。
- 缓存状态监控。
- 无侵入式拦截,注解编程支持。
- 运行时参数调整。
……
5、核心模型应该包括哪些?
- CacheManager:模型管理对象,可以是多实例的,也可以是单实例的。
- Cache:通过CacheManager创建出来的缓存容器,内部包含了真正的缓存承载体,至少开放add/remove/flush等接口。
- CacheMap:真正的缓存承载体,大致上都是一个Map,各种类型的Map。
- CacheEntity:缓存条目,相当于CacheMap里面的每一条Entry。
- CacheEvent:缓存事件,比如CacheEntity的创建、更新、删除等等。
- CacheEventListener:缓存事件相应的监听器。
- CacheEvictionAlgorithm:缓存淘汰算法,常见的有LRU、LFU、FIFO等等。
——————————————————————————————————————————–
2012-6-10:
任何一个缓存框架,它要解决什么样的问题?
数据的访问、存取、计算太慢、太不稳定、太消耗资源,同时,这样的操作存在重复性。因此希望有这样一种中间媒介,放置在其间,只保存自己关心的数据,而不关心具体数据逻辑内容,对于重复性的操作给出响应。对于数据和服务的使用者,它是透明的。
从请求和数据流向的角度看,一个完整的缓存框架应该包括这样几个部分:
- 操作捕获
- 缓存数据存储
- 缓存数据读取
- 缓存数据流动
因此缓存框架的功能都是围绕数据展开的,它的核心就是缓存数据的整个生命周期。
但是其中每一项都可以拆分和解耦成许多部分,以缓存数据存储为例,可以拆分成:
- key生成
- value封装、元数据封装
- 索引生成
- 文件结构生成
- 序列化、反序列化
- 淘汰算法
- 过期检查
- 存储数据预处理
- 持久化媒介
转载地址:http://www.raychase.net/297
相关推荐
在.NET开发环境下,设计并实现多源空间要素服务系统需要利用Web Service技术。Web Service是一种基于网络的接口,它可以实现不同应用程序之间的通信,允许系统之间以一种松耦合的方式进行交互。 设计和实现多源空间...
1. 网页设计:在创建综合性网站时,设计师需要考虑整体布局、色彩搭配、字体选择、导航结构以及响应式设计等要素,以确保网站在不同设备上都能良好展示。此外,用户界面(UI)和用户体验(UX)设计也是关键,需要...
在网页设计领域,"海的女儿"这一主题为设计师提供了一个...以上这些知识点都是构建"海的女儿"网页设计时需要考虑的关键要素。通过精心设计和开发,可以创造出一个既吸引人又易于使用的静态网页,符合老师和用户的期望。
- 规划框架的核心功能与特性,如它是缓存框架、Web MVC框架还是其他类型的框架; - 确定目标用户群体及其使用场景。 **具体考虑因素:** - **框架类型:** 确定框架的基本类型,例如缓存框架、Web MVC框架等。 -...
- **技术无关性**:使用POJO(Plain Old Java Object)编程模型设计领域模型,减少对外部框架和技术的依赖。 #### 三、领域驱动设计的实现因素 - **业务规则的明确**:定义清晰的业务规则对于正确实施领域模型至关...
在这个毕业设计项目中,我们关注的是一个健身房预约课程的小程序模板。这个模板涵盖了从界面设计到功能实现的完整流程,旨在帮助用户方便地查看和预订健身房课程。 首先,我们需要了解微信小程序的基础知识。微信小...
这需要遵循WCAG(Web Content Accessibility Guidelines)指南,确保键盘导航、文字大小调整、颜色对比度等要素符合标准。 5. **响应式设计**:随着移动设备的普及,响应式设计成为必备技能。它允许网页根据设备...
- **软件框架设计** - **目标:** 简洁明快,节省屏幕空间,兼容不同分辨率。 - **布局:** 预留按钮、菜单、标签、滚动条及状态栏位置。 - **色彩搭配:** 整体色彩组合合理搭配。 - **位置安排:** 软件商标显著...
【系统架构设计师论文格子纸(A4版)】是一种专为系统架构设计师撰写论文或报告设计的文档模板,旨在提供一个清晰、规范的框架,帮助设计师有效地组织和展示他们的思想。系统架构设计师在信息技术领域中扮演着至关重要...
在.NET Core系统架构图设计中,涉及的要素包括但不限于功能设计、架构设计、部署设计、运营设计等方面。对于.NET Core开发人员来说,以下是一些详细的知识点。 1. 功能设计: 在功能设计上,系统需要集成多种功能,...
9. **性能优化**:为了提升系统响应速度,开发者可能需要关注缓存策略、页面压缩、数据库索引优化、CDN(内容分发网络)使用等。 10. **论文撰写**:设计与实现过程中产生的论文,会详述系统的需求分析、架构设计、...
根据提供的描述“大数据管理架构设计 document 核心元数据.doc”,我们可以推断出该文档主要关注的是如何设计一个有效的元数据管理架构。这样的架构应包括以下几个核心要素: 1. **元数据存储**:选择合适的存储...
UI设计关注网站的视觉呈现,包括色彩搭配、布局、图标等元素,而UX设计则关注如何使用户在网站上操作时感到便捷和愉快。对于信电系这样的专业网站,可能需要包含新闻公告、课程信息、教师介绍、学术活动、在线论坛等...
在构建一个成功的Web电子商务网站时,我们需要关注多个关键知识点,这些知识点涵盖了从系统设计到功能实现的全过程。以下是对这些核心要素的详细说明: 1. **用户注册与登录**:这是任何网站的基础,尤其是电子商务...
9. **性能优化**:游戏要求流畅的运行体验,开发者需要关注代码的效率,避免不必要的计算,合理利用缓存,优化循环结构等。 10. **测试与调试**:游戏设计完成后,需要进行详尽的测试,确保所有功能正常,没有bug。...
虽然给定的部分内容似乎并不完全清晰,但从“BIRT报表注意”这一重复出现的关键词来看,我们可以推测作者可能希望强调在使用BIRT设计报表时需要注意的关键点。通过对上述知识点的深入探讨,我们不仅了解了BIRT的基本...
- **缓存策略**:设计合理的缓存机制以提高查询效率。 ##### 2、模块过程设计与界面设计 模块过程设计是指详细描述每个模块的具体实现过程,包括算法选择、参数传递等;界面设计则是指用户界面的设计,包括布局、...
它的设计应具备模块化、可扩展性,并且能够独立于持久化机制和技术框架。此外,领域模型应该是可重用的,以避免重复的业务逻辑,并且易于测试和维护。 在实践中,DDD涉及以下几个关键要素: 1. **业务规则** - ...
让我们深入探讨一下这个压缩包可能涵盖的知识点以及网页设计的基本要素。 1. **HTML基础知识**:HTML(HyperText Markup Language)是网页设计的基础,用于构建网页的结构。新手需要了解基本的标签如`<head>`、`...