Jspxcms本身并没有做专门的缓存处理。系统中使用到JPA,所有的缓存都是由JPA处理的。所以这里讲的缓存,其实就是JPA的缓存。详细知识可以查看JPA或Hibernate文档中有关缓存的部分。
JPA缓存分为三部分,一级缓存、二级缓存和查询缓存。
一级缓存是JPA固有的功能,即一个session周期内,里面的对象会放到缓存里。一级缓存只缓存单个的对象。在一个session周期内,多次查询同一个对象,只会读取一次数据库,以后都从缓存中读取。这种缓存默认就打开,而且不能被关闭。
二级缓存是在多个session周期内共享的缓存,比如在一个session周期内查询的对象,下一个session周期再查询同一个对象,会从缓存中读取,而不用查询数据库。除了单个的对象,one to many的集合也可以放到二级缓存里面。
查询缓存可以对sql语句的结果进行缓存。
session周期是指什么呢?这里说的session是JPA的session,不是http的session。使用JPA一般会开启 Open Session In View,也就是一次http请求就是一个session周期。
在JPA中,二级缓存和查询缓存默认是关闭的。在Jspxcms中打开了这两种缓存,配置文件:/WEB-INF/classes/conf/spring.jpa.properties
# 二级缓存
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
# 查询缓存
spring.jpa.properties.hibernate.cache.use_query_cache=true
缓存对于cms这种需要应对大量访问的系统,是至关重要的。但因为缓存的存在,直接手动修改数据库数据,页面上的数据并不会变化,需要重启Tomcat才能读出改动后的数据。如果因为某种原因一定要关闭缓存,可以将这两种缓存设置为false
,但系统性能会下降。