ehcache缓存网站导航条数据

来源:互联网 发布:软件开发技术报告 编辑:程序博客网 时间:2024/06/08 08:19

一、概念介绍

缓存技术
缓存技术是一种在本地存储经常访问的信息的一种技术。Web缓存在用户本地的存储设备上存储Web网页及其内容,这要比Web查询快。通过减少WAN链路和Web服务器上的传输量,缓存为ISP、企业网络及终端用户提供了以下一些好处。 1、减少WAN带宽的占用,降低成本。ISP把缓存引擎(Cache Engine)置于网络关键点上,以提高响应时间,降低骨干网上的带宽占用需求。ISP也把缓引擎置于WAN访问的关键点上, 使其能从本地磁盘上为Web查询提供服务,而不能远距离或通过Web服务器读取信息
ehcache缓存
是一个非常轻量级的缓存实现,一个纯Java的进程内缓存框架。使用简单,高速,实现线程安全的缓存管理类库,Ehcache提供了用内存,磁盘文件存储,以及分布式存储方式等多种灵活的Cache管理方案。采用限制比较宽松的Apache License v2.0作为授权方式,被广泛地用于hibernate,spring,Cocoon等其他开源框架。
缓存配置文件xml属性说明
①name:cache的标识符,在一个CacheManager中必须唯一
②maxElementsInMemory : 在内存中缓存的element的最大数目
③maxElementsOnDisk : 在磁盘上缓存的element的最大数目
④eternal : 设定缓存的elements是否有有效期。如果为true,timeouts属性被忽略
⑤overflowToDisk : 设定当内存缓存溢出的时候是否将过期的element缓存到磁盘上

    以下属性为可选

: ⑥ timeToIdleSeconds : 缓存element在过期前的空闲时间
⑦ timeToLiveSeconds : 缓存element的有效生命期
⑧ diskPersistent : 在VM重启的时候是否持久化磁盘缓存,默认是false
⑨ diskExpiryThreadIntervalSeconds : 磁盘缓存的清理线程运行间隔,默认是120秒
⑩ memoryStoreEvictionPolicy : 当内存缓存达到最大,有新的element加入的时候,
移除缓存中element的策略。默认是LRU,可选的有LFU和FIFO

下面用ehcache实现网站导航条的数据的缓存
第一次加载,查询数据库,将导航条数据查询出来并加入缓存中,当下次访问时,从缓存中获取数据并加载到相应的页面中
这里写图片描述

二、相关代码编写

xml文件”ehcache.xml”关于cache属性的编写如下

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">    <diskStore path="F:/ehcache"/>    <cache            name="categoryCache"            maxElementsInMemory="10000"            eternal="false"            timeToIdleSeconds="120"            timeToLiveSeconds="120"            overflowToDisk="true"            maxElementsOnDisk="10000000"            diskPersistent="false"            diskExpiryThreadIntervalSeconds="120"            memoryStoreEvictionPolicy="LRU"            />    <!--        默认缓存配置,        以下属性是必须的:            name :cache的标识符,在一个CacheManager中必须唯一。            maxElementsInMemory : 在内存中缓存的element的最大数目。            maxElementsOnDisk : 在磁盘上缓存的element的最大数目。            eternal : 设定缓存的elements是否有有效期。如果为true,timeouts属性被忽略。            overflowToDisk : 设定当内存缓存溢出的时候是否将过期的element缓存到磁盘上。        以下属性是可选的:             timeToIdleSeconds : 缓存element在过期前的空闲时间。             timeToLiveSeconds : 缓存element的有效生命期。             diskPersistent : 在VM重启的时候是否持久化磁盘缓存,默认是false。             diskExpiryThreadIntervalSeconds : 磁盘缓存的清理线程运行间隔,默认是120秒.             memoryStoreEvictionPolicy : 当内存缓存达到最大,有新的element加入的时候,                移除缓存中element的策略。默认是LRU,可选的有LFU和FIFO    --></ehcache>

Service层加入缓存代码如下:

    public List<Category> findAll() throws Exception{        // TODO Auto-generated method stub        //1创建缓存管理器        CacheManager cm=CacheManager.create(CategoryServiceImpl.class.getClassLoader().getResourceAsStream("ehcache.xml"));        //2获取指定的缓存        Cache cache=cm.getCache("categoryCache");        //3通过缓存获取数据,将cache看成是一个map        Element element=cache.get("clist");        List<Category> list=null;        //4判断数据        if(element==null)        {            //从数据库中获取            CategoryDao cd=(CategoryDao) BeanFactory.getBean("CategoryDao");            list= cd.findAll();            //加入缓存中            cache.put(new Element("clist",list));            System.out.println("缓存中没有数据,去数据库中获取");        }        else        {            //直接返回            list=(List<Category>) element.getObjectValue();            System.out.println("缓存中有数据");        }        return list;    }

注:可以将cache看作一个map容器,有get和put方法


三、总结

ehcache有很多优点同样也有很多缺点
优点
①快速
②简单
③多种缓存策略
④缓存数据有两级:内存和磁盘,因此无需担心容量问题
⑤ 缓存数据会在虚拟机重启的过程中写入磁盘
⑦ 可以通过RMI、可插入API等方式进行分布式缓存
⑧ 具有缓存和缓存管理器的侦听接口
⑨ 支持多缓存管理器实例,以及一个实例的多个缓存区域
⑩ 提供Hibernate的缓存实现
缺点
①用磁盘Cache的时候非常占用磁盘空间:这是因为DiskCache的算法简单,该算法简单也导致Cache的效率非常高。它只是对元素直接追加存储。因此搜索元素的时候非常的快。如果使用DiskCache的,在很频繁的应用中,很快磁盘会满
②不能保证数据的安全:当突然kill掉java的时候,可能会产生冲突,EhCache的解决方法是如果文件冲突了,则重建cache。这对于Cache数据需要保存的时候可能不利
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 3岁宝宝吐怎么办才好 儿童受凉肚子疼发热呕吐怎么办 两岁宝宝半夜呕吐怎么办 两岁宝宝吐了怎么办 2岁宝宝发烧吐怎么办 2岁多宝宝呕吐是怎么办 2周岁宝宝中暑了怎么办 2岁半宝宝着凉呕吐怎么办 3岁宝宝吐了几次怎么办 一岁宝宝恶心吐怎么办 9个月宝宝一直吐怎么办 晚上冻着了呕吐怎么办 2岁宝宝一直吐怎么办 两岁宝宝门牙龋齿怎么办 两岁宝宝得龋齿怎么办 两岁宝宝长龋齿怎么办 宝宝2岁不吃饭怎么办 两岁宝宝总是吐怎么办 3岁儿童受凉呕吐怎么办 两岁宝宝四天没拉大便怎么办 两岁宝宝发烧吐怎么办 四岁宝宝吐了怎么办啊 3岁宝宝突然吐了怎么办 宝宝撑着了吐拉怎么办 2岁宝宝体温37.5怎么办 宝宝2岁乳牙烂了怎么办 孕40周还没入盆怎么办 孕妇脸上长斑了怎么办 七个月宝宝大便干怎么办 两月大婴儿不拉大便怎么办 周岁宝宝大便出血了怎么办 十一个月宝宝大便干燥怎么办 8个月宝宝大便干燥怎么办 7个月宝宝大便干燥怎么办 11个月宝宝大便干燥怎么办 9个月宝宝大便干燥怎么办 10个月宝宝大便干燥怎么办 宝宝两天没拉粑粑了怎么办 小学闺蜜嫉妒我怎么办 三年级孩子对应用题理解很差怎么办 我嫉妒我的朋友怎么办