[size=medium] 最近开发一个CI可视化的WEB系统,首页集中展示的数据需要海量查询MYSQL数据库,经过一个多星期的痛苦煎熬,获取数据的Sql语句总算写出来了,基本都是要关联两三张表的复合查询,部署好Tomcat打开页面,考!花了30好几秒! ...很纠结!
于是想是否该使用缓存了,网上溜达了一圈,发现使用EHCache应该不错,而且EHCache的web缓存很简单很好用,在EHCache的网站下一个EHCache-web的最新jar包部署到环境中,也就是把解压的包文件中ehcache-web.jar和lib子文件夹得俩个jar放到开发环境的类路径中,然后在web.xml文件配置过滤器,url映射设置为自己首页的地址就行了,在EHCache的网站web板块都有Example,非常详细,然后新建一个ehcache.xml的文件加入下面这段代码就行了
<cache name="CachePage1CachingFilter"
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="10000"
timeToLiveSeconds="10000"
overflowToDisk="true">
</cache>
里面的参数可以自定义了;
注意,这里的name的名称必须和web.xml中配置的过滤器的name相同,过滤器类就是用jar包中默认的类,由于哥使用的是eclipse jee编译器,不知何故,每当修改工程中的源代码eclipse都会删掉类路径下的ehcache.xml文件,接着就报很多人都会遇到的错误:No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath...郁闷了很久也不知所以然,于是就把ehcache.xml放到tomcat安装目录下的lib下,移植性不是很好,先凑活着用算了。在启动tomcat服务的时候发现ehcache好像还需要log4j的jar包支持,刚开始用的一个较低版本的log4j包还不行,于是换了一个更高版本的jar包竟然可以了,晕!
重启服务,输入系统URL链接...考!怎么还那么慢,笨啊,第一次肯定会读数据库嘛!再刷新一下,的确很快啊!还有一个问题要注意的是:这个时候URL栏不能再用localhost了,要使用本机的ip地址加端口号!发现这个问题还是让隔壁兄弟在他机子上运行时发现的,上ehcache的网站查找文档,原来ehcache在缓存页面时是使用字节流的形式保存了页面的数据,也缓存了http的headers信息,当再次访问该页面时,如果缓存没有过期或死亡,内存信息会原样还原,因此远端机子上访问到的包含URL信息的数据也会和我本地的一样,那么页面上的图片等存储在服务器中的数据有可能找不到链接,结果证明我是正确的,因为当我用localhost访问时,隔壁兄弟看到的页面上图片等数据都没了,右击查看源文件,图片的src是以localhost开头的,当然找不到嘛!
感觉好像缺点什么,如果能够定时刷新缓存就更好了,不然这个缓存也没多大意义,秉着适合地就是最好地原则,在首页的头部加一句:<meta http-equiv="refresh" content="XX">,可以自定义更新缓存时间了!
EHCache是java系统不错的缓存解决方案,而web缓存只是其中一小部分,它的很多特性值得我去探索,如分布式和集群等,刚下载了EHCache源码包,文档也很多,研究研究先。[/size]
于是想是否该使用缓存了,网上溜达了一圈,发现使用EHCache应该不错,而且EHCache的web缓存很简单很好用,在EHCache的网站下一个EHCache-web的最新jar包部署到环境中,也就是把解压的包文件中ehcache-web.jar和lib子文件夹得俩个jar放到开发环境的类路径中,然后在web.xml文件配置过滤器,url映射设置为自己首页的地址就行了,在EHCache的网站web板块都有Example,非常详细,然后新建一个ehcache.xml的文件加入下面这段代码就行了
<cache name="CachePage1CachingFilter"
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="10000"
timeToLiveSeconds="10000"
overflowToDisk="true">
</cache>
里面的参数可以自定义了;
注意,这里的name的名称必须和web.xml中配置的过滤器的name相同,过滤器类就是用jar包中默认的类,由于哥使用的是eclipse jee编译器,不知何故,每当修改工程中的源代码eclipse都会删掉类路径下的ehcache.xml文件,接着就报很多人都会遇到的错误:No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath...郁闷了很久也不知所以然,于是就把ehcache.xml放到tomcat安装目录下的lib下,移植性不是很好,先凑活着用算了。在启动tomcat服务的时候发现ehcache好像还需要log4j的jar包支持,刚开始用的一个较低版本的log4j包还不行,于是换了一个更高版本的jar包竟然可以了,晕!
重启服务,输入系统URL链接...考!怎么还那么慢,笨啊,第一次肯定会读数据库嘛!再刷新一下,的确很快啊!还有一个问题要注意的是:这个时候URL栏不能再用localhost了,要使用本机的ip地址加端口号!发现这个问题还是让隔壁兄弟在他机子上运行时发现的,上ehcache的网站查找文档,原来ehcache在缓存页面时是使用字节流的形式保存了页面的数据,也缓存了http的headers信息,当再次访问该页面时,如果缓存没有过期或死亡,内存信息会原样还原,因此远端机子上访问到的包含URL信息的数据也会和我本地的一样,那么页面上的图片等存储在服务器中的数据有可能找不到链接,结果证明我是正确的,因为当我用localhost访问时,隔壁兄弟看到的页面上图片等数据都没了,右击查看源文件,图片的src是以localhost开头的,当然找不到嘛!
感觉好像缺点什么,如果能够定时刷新缓存就更好了,不然这个缓存也没多大意义,秉着适合地就是最好地原则,在首页的头部加一句:<meta http-equiv="refresh" content="XX">,可以自定义更新缓存时间了!
EHCache是java系统不错的缓存解决方案,而web缓存只是其中一小部分,它的很多特性值得我去探索,如分布式和集群等,刚下载了EHCache源码包,文档也很多,研究研究先。[/size]