使用EHcache完成二级缓存

使用EHcache完成二级缓存

想要简单的实现一个二级缓存的基本操作,可以自己定义一个类,里面有一个Map类型的static属性map,每一次查询数据库之前,先在map中去查看是否已经存在(需要简单设计一下key的规则,防止重复,例如:可以使用库名_表名_ID)该记录,如果有,直接返回数据,如果没有则去数据库中查询,并将查询结果放入到map中,以便下次使用。

此处,我们可以使用Ehcache第三方库来实现简单的二级缓存,项目中一般使用redis作为缓存第三方库。

步骤如下:

  1. 导入包:

    org.mybatis.caches
    mybatis-ehcache
    1.1.0

  2. 添加配置 ehcache.xml
    <?xml version="1.0" encoding="UTF-8"?>


     <!--
         name:缓存名称。
        maxElementsInMemory:缓存最大个数。
        eternal:对象是否永久有效,一但设置了,timeout将不起作用。
        timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
        timeToLiveSeconds:设置对象在失效前允许存活时间,最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时 间无穷大。
        overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
        diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
        maxElementsOnDisk:硬盘最大缓存个数。
        diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
        diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
        memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU。你可以设置为 FIFO或是LFU。
        clearOnFlush:内存数量最大时是否清除。
      -->
    
     <!-- 默认cache:如果没有对应的特定区域的缓存,就使用默认缓存 -->
     <defaultCache maxElementsInMemory="10000"
                   eternal="false"
                   timeToIdleSeconds="300"
                   timeToLiveSeconds="600"
                   overflowToDisk="false"/>
     <!-- 指定区域cache:通过name指定,name对应到Hibernate中的区域名即可-->
     <!--cache name="com.wl.test.model.Student"
            eternal="false"
            maxElementsInMemory="100"
            timeToIdleSeconds="1200"
            timeToLiveSeconds="1200"
            overflowToDisk="false">
     </cache-->
       </ehcache>
    
  3. 在mapper中添加配置或者在dao中添加注解
    BookTypeMapper.xml
    <?xml version="1.0" encoding="UTF-8"?>




    SELECT id, name FROM book_type WHERE id = #{id}


    如果是使用注解的方式,那么就在BookTypeDAO.java中加入对应注解。
    @Repository
    @MapperScan
    @CacheNamespace(implementation = org.mybatis.caches.ehcache.EhcacheCache.class)
    public interface BookTypeDAO {
    BookType findById(Integer id);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值