作者:徐建祥(netpirate@gmail.com)
时间:2007-07-18
来自:http://www.anymobile.org
经常使用的数据一般都会缓存起来,提高效率。对于数据量比较大的,如图片、资讯类,可以采用缓存Cache+索引的机制处理;而对于比较简单的数据,可以通过简单的数据容器进行缓存。当然,它们最终一般都存放在Hashtable或HashMap等容器中。
Cache应用的原理大致是:初始化时将原数据导入Cache中或惰性加载;经常被查询(点击率高)的置前;当数据总大小超过Cache容量后,调整容量大小或清理不经常使用(点击率低)的数据;数据超过有效期,及时清理;对于查询失败的数据,需CHECK一下。
简单的数据容器,将需要缓存的数据保存至单独的容器,并在一定的条件下进行数据同步。同步的方法大致有2种:启用一个时间线程,定期集中检查、处理各个容器的周期同步操作;或者由各个容器单独维护自身的周期和同步操作。
前者统一处理,不会有额外的开销,缺点是添加一个新的容器,都需要添加到同步线程中;后者单独处理,实现起来比较快捷、没有任何约束,而且互不影响,但使用的时候有额外的处理和对象开销。
当然,单独处理并不代表就是所有的业务逻辑都在各容器中控制执行,可以使用代理机制来解决这个问题。
静态代理:代理对象与被代理的对象都必须实现同一个接口,在代理对象中可以实现CHECK等服务,并在需要的时候再调用被代理的对象,这样代理对象就只保留业务相关职责。
动态代理:JDK1.3以后开始支持动态代理,处理者的类实现java.lang.ref.InvocationHandler类,可以使用一个处理者(Handler)服务于各个对象。
动态代理相对效率低些,集合静态代理机制,数据容器大致流程如下:
所有的数据容器都实现Container接口,定义生命周期、同步数据时的时间戳,同步方法和读取数据的方法;定义一个静态代理类,在查询数据的时候,检查数据容器是否过期,过期则调用容器的同步方法。
类图如下:
序列图如下:
样例代码如下:
Container container = new StaticProxy( EntityContainer.getInstance() );
int[] arr = (int[]) container.getOne("025");
了解AOP的,很容易就会想到pointcut,advisor,MethodBeforeAdviced等等,原理类似,略。
(全文完)
分享到:
相关推荐
前言 上篇博客说明了Nginx在应用架构中的作用,以及负载均衡的思路。这篇实践一下其中的访问静态资源与访问动态资源的操作...二、请求动态数据与请求静态资源的分离的必要性 Tomcat应用服务器是用来处理Servlet容器和J
第4章容器脑注入静态代理请求对象 第S章数据库与模型 第6章模板变量与常用标签 第7章模板继承与创建数据表 第8章验证器与独立验证 第9章如何查手册学习 第10章前端页面与用户注册 第11章用户登录与验证 第12章文章...
第4章容器脑注入静态代理请求对象 第5章数据库与模型 第6章模板变量与常用标签 第7章模板继承与创建数据表 第8章验证器与独立验证 第9章如何查手册学习 第10章前端页面与用户注册 第11章用户登录与验证 第12章文章...
反向代理服务器,负责静态文件的代理和 Django API 的反向代理 容器间通信 三个容器均处于 network 网络下,通信 IP 为容器的服务名 postgis 在 network 网络内部暴露 5432 端口,供 django 容器连接 django 连接 ...
该设置服务于一个简单的静态前端,该前端演示了从客户端通过反向代理和应用程序服务器到数据库的数据流。 整体旨在作为类似设置的工作模板,以及作为沙盒,用于使用更高级的功能和交互进行学习和实验。 例如,在...
11.3.4 以块数据方式读取Lob数据 11.3.5 以流数据方式读取Lob数据 11.4 自增键和行集 11.4.1 自增键的使用 11.4.2 如何规划主键方案 11.4.3 以行集返回数据 11.5 其他类型的JDBCTemplate 11.5.1 ...
11.3.4 以块数据方式读取Lob数据 11.3.5 以流数据方式读取Lob数据 11.4 自增键和行集 11.4.1 自增键的使用 11.4.2 如何规划主键方案 11.4.3 以行集返回数据 11.5 其他类型的JDBCTemplate 11.5.1 ...
项目用到的工具如netapp(做内网穿透)、nginx(做静态资源代理)、FTP(文件、图片服务器)在tools目录下。 项目的数据库文件在sql目录下 项目的restful接口使用文档在api文档目录下 项目的工程代码在shoppingmall下 项目...
第 6 章 反射调用私有方法或JDK代理的方法 调用私有方法 访问私有变量 使用反射方式构造对象实例 第 7 章 在测试代码中使用Mock 静态mock,new MockUp的使用 mock构造函数和静态代码块 new MockUp和spring的...
关于java程序员发展需要学习的路线整理集合 技术 应用技术 计算机基础知识 cpu mem disk ... 线程,进程 第三方库 ... 数据结构 ... 容器 ... 大数据与nosql ... 容器类 ... 多线程与并发 ... 数据结构与算法 各种工具
构建docker-compose在 Linux 容器上运行的一组解耦微服务的安全编排; 安全的反向代理 (NGINX) 保护所有其他服务。 安全的store前端网站 安全的support前端网站 前端网站和服务上的公共安全域和单...静态数据尚未加密
7.2.5 使用ajax处理数据的代理:ext.data.proxy.ajax与ext.data.proxy.rest / 308 7.2.6 跨域处理数据的代理:ext.data.proxy.jsonp / 312 7.2.7 为ext.direct服务的代理:ext.data.proxy.direct / 312 7.2.8 ...
静态代理与动态代理常见的动态代理实现JDK Proxy CGLIB JDK Proxy 和 CGLIB 的对比动态代理的实际应用 Spring AOP 变量 变量汇总实例变量 实例变量的特点全局变量 静态变量 静态变量的特点类变量 局部变量
EJB容器是EJB组件的代理, EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。 24、Static Nested Class 和 Inner Class的不同。 Static Nested Class是被声明为静态(static)的内部类,它可以不...
5.20 与串行端口的数据通信 5.21 序列化Python对象 第六章:数据编码和处理 6.1 读写CSV数据 6.2 读写JSON数据 6.3 解析简单的XML数据 6.4 增量式解析大型XML文件 6.5 将字典转换为XML 6.6 解析和修改XML ...
重要系统事件的事件驱动的结构化数据容器生命周期处理敏感数据产生的流程和生命周期事件网络事件资源成本低:通常不到一个CPU内核的〜1%,〜30MiB RAM 〜5mb静态编译的二进制可部署服务器功能 服务器组件使用多个...
EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。 21、Static Nested Class 和 Inner Class的不同。 Static Nested Class是被声明为静态(static)的内部类,它可以不依赖...
Margin - 容器边缘与边缘之外的空白距离(像素值:上下左右;左右,上下;左,上,右,下) Tag - 保存一些额外的信息(System.Object类型) 9、Silverlight(11) - 2.0动画之ColorAnimation, DoubleAnimation, ...
2 负载均衡与反向代理 18 2.1 upstream配置 20 2.2 负载均衡算法 21 2.3 失败重试 23 2.4 健康检查 24 2.4.1 TCP心跳检查 24 2.4.2 HTTP心跳检查 25 2.5 其他配置 25 2.5.1 域名上游服务器 25 2.5.2 备份上游服务器 ...
5-06.aspx BulletedList创建静态项目列表。 5-07.aspx BulletedList列表项响应用户事件。 5-08.aspx Image控件用法举例。 5-09.aspx 使用MultiView和View控件实现多视图。 5-10.aspx ...