1. 该说的话

每个人都应当学会独立地去思考、去寻找答案,而不是一味地伸手向他人索取所谓的标准答案。 首先,别成为“拿来主义”者,其次远离"拿来主义"的人。

2. ehcache

2.1 主要特性

  1. 快速,简单.

  2. 多种缓存策略

  3. 缓存数据有两级:内存和磁盘,因此无需担心容量问题

  4. 缓存数据会在虚拟机重启的过程中写入磁盘

  5. 可以通过RMI、可插入API等方式进行分布式缓存

  6. 具有缓存和缓存管理器的侦听接口

  7. 支持多缓存管理器实例,以及一个实例的多个缓存区域

  8. 提供Hibernate的缓存实现

2.2 和redis相比

  • ehcache直接在jvm虚拟机中缓存,速度快,效率高;但是缓存共享麻烦,集群分布式应用不方便。

  • redis是通过socket访问到缓存服务,java 框架项目案例:www.1b23.com  。效率比ecache低,比数据库要快很多.

2.3 在应用程序中的位置

springboot 整合 ehcache_第1张图片

3. spring boot 整合

1.搭建spring boot 项目
2. pom.xml文件中添加依赖


	org.springframework.boot
	spring-boot-starter-cache
	net.sf.ehcache
	ehcache
  1. 添加ehcache.xml配置文件


    

    
    

    
    
  1. 启用缓存
    在启动类添加 @EnableCaching 注解。
    5.应用
    如下代码所示,你可以在函数上使用@Cacheable,@CachePut,@CacheEvict,来新增、更新、删除缓存。
    注意,当这个类中所有的缓存都处于同一缓存区时,你可以在类名上方使用@CacheConfig(cacheNames =userCache )来配置,这样在函数注解上就不需要再写 value = userCache。(cacheNames 的值在ehcache.xml文件中配置。)

@Servicepublic class UserServiceImpl implements IUserService {

    //www.1b23.com    @Resource
    private UserRepository userRepository;   
    @Override
    @Cacheable(value = "userCache", key = "#user.id")  
      public boolean addUser(UserEntity user) {       
       return userRepository.saveAndFlush(user).getId() != null;
    }   
    @Override
    @CachePut(value = "userCache", key = "#user.id")   
     public boolean updateUser(UserEntity user) {      
       return userRepository.saveAndFlush(user).getId() != null;
    }   
    @Override
    @CacheEvict(value = "userCache", key = "#id")   
     public boolean deleteUser(Long id) {       
      return false;
    }   
    @Override
    @Cacheable(value = "userCache", key = "#id")   
     public UserEntity selectUser(Long id) {        return null;
    }
}

当你想要删除某一缓存区所有缓存时,可以使用 @CacheEvict(value = "userCache", allEntries = true), 删除userCache中所有的缓存。