• MyBatis笔记——EhCache二级缓存


    介绍

    ehcache是一个分布式缓存框架。

    我们系统为了提高系统并发,性能、一般对系统进行分布式部署(集群部署方式)
    结构

    不使用分布缓存,缓存的数据在各各服务单独存储,不方便系统开发。所以要使用分布式缓存对缓存数据进行集中管理。

    mybatis无法实现分布式缓存,需要和其它分布式缓存框架进行整合。这里我主要介绍整合EhCache。下面开始实例。


    实例

    1.导入MyBatis-EhCache整合包

    整合包

    项目结构如下:
    项目结构

    2.classpath下添加EhCache配置文件(ehcache.xml)

    <ehcache>
        <diskStore path="F:cache_test" />
        <defaultCache eternal="false" maxElementsInMemory="1000"
            timeToIdleSeconds="20" timeToLiveSeconds="20" overflowToDisk="true"
            maxEntriesLocalDisk="10000000"
            diskExpiryThreadIntervalSeconds="20" memoryStoreEvictionPolicy="LRU" />
    </ehcache>

    3.MyBatis配置文件(SqlMapConfig.xml)打开二级缓存

        <settings>
            <setting name="cacheEnabled" value="true"/>
        </settings>

    4.Mapper配置文件添加cache标签

        <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>

    5.缓存结果继承序列化接口

    public class User implements Serializable

    测试

    测试类如下:

    package cn.pwc.test;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import cn.pwc.dao.UserMapper;
    import cn.pwc.pojo.User;
    
    public class Test {
    
        public static void main(String[] args) {
            SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(Test.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml"));
            SqlSession session = factory.openSession();
            UserMapper mapper = session.getMapper(UserMapper.class);
            User user = mapper.findById(1);
            System.out.println(user.toString());
            session.commit();
            session.close();
            SqlSession session2 = factory.openSession();
            UserMapper mapper2 = session2.getMapper(UserMapper.class);
            User user2 = mapper2.findById(1);
            System.out.println(user2.toString());
            session2.commit();
            session2.close();
        }
    
    }
    

    测试结果如下:

    DEBUG [cn%002epwc%002edao%002e%0055ser%004dapper.data]     net.sf.ehcache.store.disk.Segment     - fault removed 0 from heap
    DEBUG [cn%002epwc%002edao%002e%0055ser%004dapper.data]     net.sf.ehcache.store.disk.Segment     - fault added 0 on disk
    

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    redis线程模型
    同步容器和并发容器
    200+面试题
    redis pipeline
    redis事务和脚本
    redis事务
    redis优缺点
    redis持久化策略
    Redis为什么要把所有数据放到内存中?
    redis的过期策略以及内存淘汰机制
  • 原文地址:https://www.cnblogs.com/pwc1996/p/4839133.html
Copyright © 2020-2023  润新知