这次,我将要涉及到一个非常重要的概念:缓存。在当今的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链表

    链表 我们可以看到在javascript概念中的队列与栈都是一种特殊的线性表的结构,也是一种比较简单的基于数组的顺序存储结构.由于javascript的解释器针对数组都做了直接的优化,不会存在在很多编 ...

  2. PHP调用Webservice实例

    原文 PHP调用Webservice实例 NuSoap是PHP环境下的WebService编程工具,用于创建或调用WebService.它是一个开源软件,是完全采用PHP语言编写的.通过HTTP收发S ...

  3. [翻译]如何编写GIMP插件(一)

    近期想尝试编写gimp插件,在gimp官网看到了三篇简明教程,顺便翻译了下,由于本人英文,计算机知识有限,文中难免有warning,error出现,欢迎指正. <How to write a G ...

  4. 数据结构二叉树的java实现,包括二叉树的创建、搜索、删除和遍历

    根据自己的学习体会并参考了一些网上的资料,以java写出了二叉树的创建.搜索.删除和遍历等操作,尚未实现的功能有:根据先序和中序遍历,得到后序遍历以及根据后序和中序遍历,得到先序遍历,以及获取栈的深度 ...

  5. SignalR + KnockoutJS + ASP.NET MVC 实现井字游戏

    SignalR + KnockoutJS + ASP.NET MVC 实现井字游戏   1.1.1 摘要 今天,我们将使用SignalR + KnockoutJS + ASP.NET MVC实现一个实 ...

  6. 网页启动Windows服务

    如何在网页启动Windows服务   由于公司有许多windows服务进行业务的处理,所谓对服务的维护也是一个比较头痛的问题,因为自己也不知道服务什么时候自动停了,而且更主要的原因是服务都是由运维部门 ...

  7. Ninject是一款.Net平台下的开源依赖注入框架

    Ninject是一款.Net平台下的开源依赖注入框架.按照官方说法,它快如闪电.超级轻量,且充分利用了.Net的最新语法,使用Lambda表达式代替Xml文件完成类型绑定.Ninject结构精巧,功能 ...

  8. iOS基础 - 定时器

    1.可以完成的功能:每隔一段时间做一些固定的事情 2.创建定时器 1> 方法1 NSTimer *timer = [NSTimer timerWithTimeInterval:1.5 targe ...

  9. C语言基础复习总结

    C语言基础复习总结 大一学的C++,不过后来一直没用,大多还给老师了,最近看传智李明杰老师的ios课程的C语言入门部分,用了一周,每晚上看大概两小时左右,效果真是顶一学期的课,也许是因为有开发经验吧, ...

  10. [转]The Best Plugins for Sublime Text

    Source: http://ipestov.com/the-best-plugins-for-sublime-text/ Good day, everyone! I tried to collect ...