这次,我将要涉及到一个非常重要的概念:缓存。在当今的web应用中,如果没有设计一个比较好的缓存系统,在web中就不可能有一个良好的性能。所以我将要

提到的缓存不仅仅能够更好地理解Liferay架构,而且还会比较好地帮助我们去写其他的Java Web应用,尤其是在他们比较大的时候。

Liferay以提供了优良性能(可以参考这篇性能白皮书)著称,而它的缓存系统是实现优良性能的关键因素。它的缓存系统贯穿了Liferay的三层(前端,service层,持久化层)

下图显示了每层主要的缓存组件:

让我们一层一层地来看看cache的应用,先从最底层开始:

在持久化层,Liferay依赖Hibernate去完成它访问数据库的大部分工作。Hibernate有两层缓存结构,分别是Level1(L1) 和Level2(L2).Level1被用作cache

从当前数据库会话获取的对象,在这种情况下,数据库的的一个会话会与Liferay的 Service层的一个调用捆绑起来。所以,当前端(或者一个 Web Service)

调用service,一个数据库的会话将被打开,而且会被重用一直到这个Service方法调用return。所有对DB的操作将会共享L1 cache, 所以获取同样的对象将只会

查询一个DB.

Hibernate的第二层cache, Level 2 可以用来扩张DB 会话和 存储数据库对象(Entity Cache)和查询的结果(Query Cache).举个例来说,如果属于一个组织

(organization)的某一个用户调用了从DB获取对象的方法,那么这时这些被查询出来的对象就会被存在缓存中。不过值得注意的是,真正存在缓存里的是存在

实体缓存(Entity Cache)对象们的引用列表。这样是为了确保在缓存中,同一个对象在缓存系统中只有一个。

除了用Hibernate,Liferay也可以自定义SQL语句用来直接查询一些比较复杂的结果(通过重用DB的连接)。针对这些,Liferay也有自己的实体和查询缓存

(Entity Cache and Query Cache,不过目前我好像如果通过自己写SQL查询的话,没有用到缓存?).实质上,在Liferay 6.2的版本中,由于Shuyang(Liferay创始人之一)

的努力,这两种缓存已经被高效地实现了。Hibernate的L2 cache将会默认地被关闭,Liferay自己的查询缓存系统将会取代它。

最后比较重要的一点是,以上的cache都是通过一种底层的缓存池来管理在内存中的对象的,Liferay默认用ehcache来实现这一点,但是这也可是改变的,

我们可以通过修改portal.properties文件来改变它。这些配置已经被写在hibernate-clustered.xml中,在这个xml文件中定义了,定义和配置了几个缓存区域。

这些配置文件对于一个高性能的网站来说是很重要的。但是不要根据你自己的猜测来随意改变它们。你应该总是在做一些性能测试的时候修改它,这样可以帮助你

找到性能瓶颈和验证你所修改的。

译自:http://www.liferay.com/zh/web/jorge.ferrer/blog/-/blogs/liferay-s-architecture-caching-part-1-

Liferay的架构:缓存(第一部分)的更多相关文章

  1. ActiveMQ源码架构解析第一节(转)

    工作四年已久,也快到了而立之年,本人也酷爱技术,总是想找一些途径来提升自己,想着温故而知新所以就写起了博客,然而写博客这个想法也是酝酿了很久,近期也看到了有很多人在问关于ActiveMQ的相关问题,有 ...

  2. 搭建一个BS 的简单SOA 架构(直接通过jquery 调用后台的 wcf 服务的架构)(第一天)

    亲们!还在用传统的三层架构吗?你还在对SOA架构 不了解吗? 那就赶快来学习下一个 比较简单的SOA的架构吧!我会手把手的 教会你们怎么搭建这个 简单的SOA的架构. 其中用的技术点保证  WCF,a ...

  3. lnmp架构(第一篇)

    lnmp 架构 第一篇 nginx 源码安装 nginx的安装包:nginx-1.12.0.tar.gz 建议安装前的修改: 在nginx的解压包中修改文件nginx-1.12.0/src/core/ ...

  4. 基于Hadoop开发网络云盘系统架构设计方案第一稿

    引言 云计算技术的发展,各种网络云盘技术如雨后春笋,层出不穷,百度.新浪.网易都推出了自己的云盘系统,本文基于开源框架Hadoop设计实现了一套自己的网络云盘系统,方案为初步设计方案,不断完善中. 一 ...

  5. Redis数据类型,持久化,回收策略——(Redis缓存第一章)

    缓存:第一种是内存缓存 比如Map(简单的数据结构),以及EH Cache(Java第三方库),第二种是缓存组件比如Memached,Redis:Redis(remote dictionary ser ...

  6. 2017.12.12 架构探险-第一章-从一个简单的web应用开始

    参考来自:<架构探险>黄勇 著 1 使用IDEA搭建MAVEN项目 1.1 搭建java项目 (1)创建java项目 为了整个书籍的项目,我创建了一个工程,在这个工程里创建了每个章节的mo ...

  7. 移动架构师第一站UML建模

    回想一下自己的Android生涯已经经历过N多个年头了,基本都是在编写业务代码,都知道35岁程序员是一个坎,当然如果有能力能做到Android架构师的职位其生命周期也会较长,毕境不是人人都能轻易做到这 ...

  8. guava缓存第一篇

    guava缓存主要有2个接口,Cache和LoadingCache. Cache,全类名是com.google.common.cache.Cache,支持泛型.Cache<K, V>. L ...

  9. 架构:The Onion Architecture : part 1(洋葱架构:第一篇)(转载)

    原文地址:http://jeffreypalermo.com/blog/the-onion-architecture-part-1/. I've spoken several times about ...

随机推荐

  1. JS实现全选,用于界面批量操作向后台传值时使用

    function seltAll(){ var chckBoxSign = document.getElementById("ckb"); //ckb 全选/反选的选择框id va ...

  2. 一步一步写算法(之挑选最大的n个数)

    原文:一步一步写算法(之挑选最大的n个数) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 从一堆数据中挑选n个最大的数,这个问题是网上流传的 ...

  3. PHP程序猿必备的七种武器

    作为一个程序猿(又或者是程序媛),出来闯荡江湖,没有几种必杀技在手,那是肯定无法赢得江湖名声的,除了必杀技之外,武器也是很重要的,但是一把青钢剑,肯定是无法赢得万千少男少女的欢心的.就连小李飞刀,人家 ...

  4. 全球最快的JS模板引擎:tppl

    废话不多说,先上测试: 亲测请访问:[在线测试地址]单次结果不一定准确,请多测几次. tppl 的编译渲染速度是著名的 jQuery 作者 John Resig 开发的 tmpl 的 43 倍!与第二 ...

  5. UC编程:字符读取与行读取

    字符读取函数的应用 下面的演示程序实现从/etc/passwd文件中提取用户名,打印到屏幕上并保存在copyname.txt文件中 使用的函数是getc().putc().putchar() [c] ...

  6. .Net类的序列化和反序列化 - 进阶者系列 - 学习者系列文章

    今天看了下以前的一个工具的代码,其中涉及到.NET类的序列化和反序列化问题,所以就写一下. 这里说一下.NET类序列化的好处..NET类在序列化之前只是一个相对狭义的类.通过序列化,能够更好的保存该类 ...

  7. Linux Shell脚本入门--Uniq命令

    uniq uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用.也就是说,为了使uniq起作用,所有的重复行必须是相邻的. uniq语法 [root@www ~]# uniq [ ...

  8. ibatis提示Unable to load embedded resource from assembly "Entity.Ce_SQL.xml,Entity".

    原本以为是xml文件配置错误,尝试无果,最终原因未将xml文件的生成操作选择为嵌入的资源.很无语!

  9. 给Angularjs配上Requirejs

    给Angularjs配上Requirejs 需要考虑的事情: 1.js.css.template都按需加载,js主要就controller: * js和css都可以用requirejs和它的插件解决, ...

  10. XSLT 调用外部程序

    通常可以通过xslt把一个xml转成html cd.xml <?xml version="1.0" encoding="UTF-8"?> <? ...