Oscache与memcached区别

来源:互联网 发布:js base64转换为pdf 编辑:程序博客网 时间:2024/04/29 11:36

           缓存在互联网平台大量使用以提高性能,降低数据库负担,更快的响应用户的请求。原因主要是缓存的使用场景是性能要求高,实时性或准确性要求稍差。
其他提高性能手段:
1,数据库方面改革,效果最明显。如主从服务器。数据库水平和垂直拆分(一般用户表不能拆分)。数据库索引,全文索引。数据库是否用事务表,慢查询监控
2, Lucene,蜘蛛的使用,利用文件索引减少查询数据库
3, Web服务器或应用服务器选择及负载均衡。 Tomcat,resin,jboss.,weblogic
4, 图片服务器和web服务器分离,可以是多个。图片标记,多种图片格式,图片名称和用户分离,名称变得无规则
5, Cs,js等的压缩,减少流量,并可能到客户端一部分信息
6,登陆或瓶颈模块设计的不同。验证码或多步登陆。很多网站长期没改进,可能在对抗性能瓶颈。大规模改版风险很大。在什么时候升级系统
7,程序角度:架构选择(如Facebook,API,GOOGLE,API),多线程的使用(单实例多线程,主线程子线程),代码算法结构,数据结构


容器概念内置对象:page,session,application
使用Cache,可以缓存网页,提高浏览速度,还可以缓存任何对象和数据,减少对数据库的操作。Session可以存储对象,但是必须使用Session,但是对于Sesion,并不是任何情况下都是需要的;Application可以存储对象,但是生存周期太长,从而决定了不可以存储对象太多;所以有了Cache,它可以不涉及使用Session,又有自己的生存周期,可以比起Application来,相对大量的使用。


     在信息系统建设过程中我们通常会遇到这样的问题:

1. 基础数据的变更问题信息系统中需要处理的基础数据的内容短时间内是不会发生变化的,但是在一个相对长一些的时间里,它却可能是动态增加或者减少的。举个例子:电子商务中关于送货区域的定义,可能短时间内不会发生变化,但是随着电子商务企业业务的扩大,系统中需要处理的送货区域就可能增加。所以我们的系统中不得不在每次向客户展示送货区域信息的时候都和数据库(假设送货区域信息保存在数据库中,这也是通常采用的处理方法)进行交互。
2. 统计报表(不仅限于统计报表)的问题一般来说,统计报表是一个周期性的工作,可能是半个月、一个月或者更长的时间才会需要更新一次,然而统计报表通常是图形显示或者是生成pdf、word、 excel等格式的文件,这些图形内容、文件的生成通常需要消耗很多的系统资源,给系统运行造成很大的负担。

1.2 抽象出的缓存使用的共同点 通过比较分析,不难发现这两类问题有一些共同点:

 1、被处理的内容短时间不变,所以短时间内可以作为静态内容进行处理

2、在一个不太长的时间内,被处理的内容可能或者必定产生变化,所以必须将他们作为动态内容进行处理

 3、实时性要求不高:在合理的时间区段内可以忽略被处理内容变化后带来的影响

4、对这些内容的处理动作比较消耗系统性能,影响系统响应时间


在开源项目的出镜率和关注率比较高的Cache:memcached,JBoss Cache, OSCache,EHCache等。
以下是Cache的基本特性,大部分Cache都有相应的API支持。
♦ 时间记录 数据进入Cache的时间。
♦ timeout过期时间 Cache里面的数据多久过期 (与清除策略的区分,一个缓存快到期突然最后访问了一次,会不会过期,区分点是清除策略的作用前提,理论上没到期也可能被清除出去,到期肯定被清除)
♦ Eviction Policy 清除策略 Cache满了之后,根据什么策略,应该清除哪些数据。比如,最不经常被访问的数据,最久没有访问到的数据。
♦ 命中率 Cache的数据被选中的比率 (访问多少次,cache使用多少次)
♦ 分级Cache 有些Cache有分级的概念。比如,几乎所有的Cache都支持Region分区的概念。可以指定某一类的数据存放在特定的Region里面。JBoss Cache可以支持更多的级别(有待研究)。
♦ 分布式Cache 分布在不同计算机上的Cache
♦ 锁,事务,数据同步 一些Cache提供了完善的锁,事务支持。
Memcached与Oscache的朴素区分及各自特点
部署不同,memcache一般跟web服务器不在同一主机,当然也可以在同一主机,利用的是资源互补原理。 对内存要求很高,对cpu要求稍低。Oscache与web服务器在同一台。
从作用的层来说,对memcache各层都可以支持。Oscache大多数用于web层,其实也支持biz层,一般不用
Memcache的特点: 分布式内存对象缓存系统,占用其他机子的内存。很多互联网,负载均衡三台(以三台为例)web服务器可以共享一台Memcache的资源。传递的信息以键值对的形式存储。传递的数据要实现序列化。
Oscache的特点: 页面级缓存,占用本机的内存资源。可以选择缓存到硬盘,如存取到硬盘重启服务也可重新获得上次持久化的资源,而如果缓存到内存就不行。一般没必要缓存到硬盘,因为I/O操作也是比较耗资源,和从数据库取往往优势很小。Oscache存取数据的作用域分为application和session两种。
参考oscache的帮助资料猜想它的实现原理是把要存储共享的资源的作用域分为应用程序全局共享application(对性能优化作用很明显)和某个用户某次操作某个网站session(用户和web服务器会话)级共享两种。对共享的资源设置过期时间。即当服务器运行时发现在
     作用域内还有对象,就以类似静态页面的形式(因为缓存了要显示的信息)提供给客户端,当过期了,就需要重查资源(如果是页面里的缓存就需要资源能在jsp 里提供)。如果没有过期,但内容改变了,可以通过flush的方式清除老资源以便加载新的资源。Oscache页面级缓存可缓存jsp,需要改变 web.xml配置文件,里面可以设定缓存的作用域和过期时间.关于页面级缓存action,资料比较少,新的oscache已经解决了struts 的缓存问题,但最大的问题是MVC模式中, 是先取数据, 取出来后,再放到网页上显示, 如果在网页上用KEY, 应该起不到作用. 因为取出数据在KEY标签之前执行.究其原因主要是因为缓存实际上缓存的是输出信息,即使jsp也是输出信息。不过把jsp当作独立的运行单元一起缓存。因为毕竟有作用域,那么在action里优势就可以有其他方式解决。这一块在用了memcache后用oscache就没有太大用处.
Oscache的一个特点是在没有过期时,jsp里的运行单元不依赖于输入参数,如果依赖,那么缓存就没有作用了,如果用了可以取数据的memcache时使用场景比较小。当然如果不使用memcache,使用场景就比较大。

原创粉丝点击