利用缓存机制来实现对页面的优化

      我们在实现页面加载数据的时候,如果每次都需要从数据库中查询完数据之后再将数据回写,那么这样的开发效率是很低的,固然有时候我们可以将数据存储在域对象中,但是这也不是都可以解决问题的,这时我们利用缓存机制来非常轻松的解决这类问题。           

       常用的缓存机制

       * EHCache:Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。

* Memcached:Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。

       * Redis:redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。

这里我们详细的介绍一下EHCache的用法。

       在网上商城的“分类管理”中,我们通过利用EHCache缓存机制来实现对加载速度的优化。

EHCache缓存机制的使用步骤

       一、引入相关EHCache的jar包。

       二、在业务层建立相关数据的缓存机制

       1、读取配置文件,获得EHCache缓存区中的核心对象CacheManager对象,

代码如下:

<span style="font-size:18px;">CacheManager cacheManager = CacheManager.create(CategoryServiceImpl.class.getClassLoader().getResourceAsStream("ehcache.xml"));</span>

代码解析:creat方法中需要传入一个输入流路径,但是由于是web路径,所以我们可以通过类加载器的getResourceAsStream的方法来获得配置文件的绝对路径。

       2、从配置文件中获取相应名称的缓存区。

<span style="font-size:18px;">Cache cache = cacheManager.getCache("categoryCache");</span>

三、判断缓存区中是否含有相应的数据(这里以网上商城中分类数据为例)

       代码如下:

<span style="font-size:18px;">// 判断缓存中是否有list集合:
		Element element = cache.get("list");
		List<Category> list = null;
		if(element == null){
			// 缓存中没有数据
			System.out.println("缓存中没有数据 ,查询数据库=====");
			
			CategoryDao categoryDao = new CategoryDaoImpl();
			list = categoryDao.findAll();
			element = new Element("list",list); 
			cache.put(element);
		}else{
			// 缓存中已经存在数据
			System.out.println("缓存中有数据 ,没有查询数据库=====");
			list = (List<Category>)element.getObjectValue();
			
		}
</span>

代码解析:缓存区中的元素对象Element对象是以键值对的形式存在的。

                cache.get("list");是获得储存在缓冲区中的元素对象。



评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值