最近关注了一些缓存框架的特性和实现,包括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封装、元数据封装
- 索引生成
- 文件结构生成
- 序列化、反序列化
- 淘汰算法
- 过期检查
- 存储数据预处理
- 持久化媒介
……
但是看的到的不同实现越多,越发发现难以跳出这个思维惯性的圈子了。
文章系本人原创,转载请注明出处和作者
- 大小: 18.4 KB
分享到:
相关推荐
分布式缓存设计与实现是大型企业系统提高并发处理能力和系统性能的关键技术之一。缓存介于应用服务器和数据库...设计和实现这样一套系统需要深入理解分布式系统理论、CAP原则以及ZooKeeper等协调服务框架的原理和操作。
### J2EE分布式系统框架设计:深度解析与关键要素 #### 概述 J2EE(Java 2 Platform, Enterprise Edition)是Sun Microsystems为大型企业级应用开发而设计的平台,它提供了一套完整的分布式计算环境,使得开发者...
响应式设计是现代网页设计的关键要素,它允许网页根据用户设备的屏幕尺寸和方向自动调整布局。通过使用媒体查询、流式布局和灵活的图片尺寸,响应式设计能确保网站在手机、平板电脑和桌面电脑上都能正常显示,提供...
网站需要采取措施防止SQL注入、XSS攻击等网络安全威胁,并通过负载均衡、缓存策略等手段提高性能。同时,数据备份和恢复策略也是保障业务连续性的必要措施。 总结来说,"接单网站的设计与实现"涵盖了前端界面设计、...
根据提供的描述“大数据管理架构设计 document 核心元数据.doc”,我们可以推断出该文档主要关注的是如何设计一个有效的元数据管理架构。这样的架构应包括以下几个核心要素: 1. **元数据存储**:选择合适的存储...
《学生选课系统的设计与实现》是一篇毕业论文,主要探讨了如何构建一套高效、便捷的学生选课信息系统。本文将围绕这一主题,深入解析系统设计的关键要素和实现过程。 一、系统需求分析 在设计任何信息系统之前,...
3. **外部接口层,如何适配多种外部系统**:当系统需要与其他外部系统进行交互时,需要设计一套灵活的接口适配方案。 - **适配器模式**:采用适配器模式来解决不同系统之间的兼容性问题。 4. **硬件控制层,如何...
并行计算是提高大规模数据处理效率的关键技术,因此了解如何设计一个可扩展、高可用的并行计算框架至关重要。 第3章讨论了分布式协调的实现,协调是分布式系统中不同节点之间同步行动和数据的一套机制。知识点涵盖...
**ARCEngine系统设计** ARCEngine是一款由Esri公司推出的强大的地理信息系统(GIS)开发平台,它提供了丰富的API和工具,使得开发者可以利用其功能进行地图应用的二次开发。这款系统设计着重于地理信息的处理、显示...
- 在设计分布式系统时,需要在这三者之间做出权衡。 - **微服务架构的常用手段**: - 服务拆分:根据业务功能或领域模型将应用拆分为多个服务。 - 服务注册与发现:使用服务注册中心实现服务之间的动态发现和...
商城系统的设计需要考虑用户体验,因此界面的美观度、操作的便捷性以及响应速度都是关键因素。 后台管理系统则是为商家和管理员设计的,用于商品管理、订单处理、用户管理等后台操作。后台系统通常会包含权限控制、...
为了方便前端界面调用后端数据服务,需要设计一套数据访问接口。这些接口应具有良好的封装性,对外提供统一的数据操作入口,内部则负责处理复杂的逻辑。 ##### 3.4 安全性设计 考虑到数据的安全性问题,在设计时...
在本次知识总结中,将详细阐述与系统架构设计相关的知识点,这些内容涉及到了软件开发、网络通信、数据传输等多个方面,是系统架构设计师必须掌握的核心要素。具体如下: 1. DSSA(分布式系统安全架构):分布式...
【标签】中的“快应用”可能是指框架的快速开发特性,而“企业”则表明这个框架可能特别适合企业级应用的开发,具备稳定性、可维护性和扩展性等关键要素。 【压缩包子文件的文件名称列表】中的"tinyphp-master"很...
【标签】“毕业设计 PHP 系统”明确了该项目的三个关键要素。首先,这是个毕业设计项目,意味着它是由学生在学术指导下的独立工作。其次,项目使用PHP语言进行开发,PHP是一种广泛应用于服务器端脚本的编程语言,...
密涅瓦设计系统可能包含了这些要素,为团队提供了一套完整的工具集,用于创建一致的品牌体验。 ### 5. UFRJ(联邦大学里约热内卢) UFRJ(Universidade Federal do Rio de Janeiro)可能与密涅瓦设计系统的起源或...
在设计阶段,开发者考虑了信息的分类、存储、检索和安全等关键要素。利用ASP.NET的Entity Framework,可以方便地与数据库进行交互,建立数据模型,实现了对各类信息的高效管理。此外,信息库的架构可能采用了三层...
Apache Shiro是一个开源的安全框架,它为Java应用提供了一套全面的安全功能,从用户认证到授权,再到会话管理,甚至是与缓存系统的集成。Shiro的设计目标是为应用提供简单、直观和易于使用的安全API,从而让开发人员...