文档章节

Spring Boot 使用 Caching-EhCache

jurson86
 jurson86
发布于 2017/08/23 16:16
字数 612
阅读 15
收藏 0

Spring boot 支持的缓存: 
• Generic 
• JCache (JSR-107) 
• EhCache 2.x 
• Hazelcast 
• Infinispan 
• Couchbase 
• Redis 
• Caffeine 
• Guava 
• Simple 
 
最常用的是 EhCache,文档多,资料全 

一、  添加依赖 
     <!-- caching --> 
    <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-cache</artifactId> 
    </dependency> 
    <dependency> 
      <groupId>net.sf.ehcache</groupId> 
      <artifactId>ehcache</artifactId> 
    </dependency> 


 二、  配置文件: 
spring.cache.type=ehcache 
spring.cache.ehcache.config=classpath:config/ehcache.xml 
 
ehcache.xml 

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:noNamespaceSchemaLocation="ehcache.xsd"> 
 
  <cache name="roncooCache"  
    eternal="false"  
    maxEntriesLocalHeap="0" 
    timeToIdleSeconds="50"></cache> 
 
  <!-- eternal:true表示对象永不过期,此时会忽略timeToIdleSeconds和timeToLiveSeconds属性,默认为false --> 
  <!-- maxEntriesLocalHeap:堆内存中最大缓存对象数,0没有限制 --> 
  <!-- timeToIdleSeconds: 设定允许对象处于空闲状态的最长时间,以秒为单位。当对象自从最近一次被访问后,如果处于空闲状态的时间超过了timeToIdleSeconds属性值,这个对象就会过期,EHCache将把它从缓存中清空。
只有当eternal属性为false,该属性才有效。如果该属性值为0,则表示对象可以无限期地处于空闲状态 --> 
</ehcache> 
 

三、  启用注解支持: 
@EnableCaching:启用缓存注解 

代码实现: 

public interface UserLogCache { 
 
  /** 
   * 查询 
   *  
   * @param id 
   * @return 
   */ 
  UserLog selectById(Integer id); 
   /** 
   * 更新 
   *  
   * @param UserLog 
   * @return 
   */ 
  UserLog updateById(UserLog userLog); 
 
  /** 
   * 删除 
   *  
   * @param id 
   * @return 
   */ 
  String deleteById(Integer id); 
} 

实现类: 

@CacheConfig(cacheNames = "gusCache") 
@Repository 
public class UserLogCacheImpl implements UserLogCache { 
 
  @Autowired 
  private UserLogDao userLogDao; 
 
  @Cacheable(key = "#p0") 
  @Override 
  public UserLog selectById(Integer id) { 
    System.out.println("查询功能,缓存找不到,直接读库, id=" + id); 
    return userLogDao.findOne(id); 
  } 

  @CachePut(key = "#p0") 
  @Override 
  public UserLog updateById(UserLog userLog) { 
    System.out.println("更新功能,更新缓存,直接写库, id=" + userLog); 
    return userLogDao.save(userLog); 
  } 
 
  @CacheEvict(key = "#p0") 
  @Override 
  public String deleteById(Integer id) { 
    System.out.println("删除功能,删除缓存,直接写库, id=" + id); 
    return "清空缓存成功"; 
  }  
} 

注解说明: 
@CacheConfig:缓存配置 
@Cacheable:应用到读取数据的方法上,即可缓存的方法,如查找方法:先从缓存中读取,如果没有再调
用方法获取数据,然后把数据添加到缓存中。适用于查找 
@CachePut:主要针对方法配置,能够根据方法的请求参数对其结果进行缓存,和 @Cacheable 不同的是,它每次都会触发真实方法的调用。适用于更新和插入 
@CacheEvict:主要针对方法配置,能够根据一定的条件对缓存进行清空。适用于删除 
 

测试: 

@RequestMapping(value = "/select", method = RequestMethod.GET) 
  public UserLog get(@RequestParam(defaultValue = "1") Integer id) { 
    return UserLogCache.selectById(id); 
  } 
 
  @RequestMapping(value = "/update", method = RequestMethod.GET) 
  public UserLog update(@RequestParam(defaultValue = "1") Integer id) { 
    UserLog bean = UserLogCache.selectById(id); 
    bean.setUserName("测试"); 
    bean.setCreateTime(new Date()); 
    UserLogCache.updateById(bean); 
    return bean; 
  }  
  @RequestMapping(value = "/del", method = RequestMethod.GET) 
  public String del(@RequestParam(defaultValue = "1") Integer id) { 
    return UserLogCache.deleteById(id); 
  } 
 

 

© 著作权归作者所有

jurson86
粉丝 2
博文 327
码字总数 341542
作品 0
深圳
个人站长
私信 提问
3步轻松搞定Spring Boot缓存

作者:谭朝红 前言 本次内容主要介绍基于Ehcache 3.0来快速实现Spring Boot应用程序的数据缓存功能。在Spring Boot应用程序中,我们可以通过Spring Caching来快速搞定数据缓存。 接下来我们将...

Java架构师追风
09/06
0
0
Spring Boot 1.3.0 M1 发布

Spring Boot 1.3.0 M1 发布,此版本现已提供在 Spring milestone repository,此版本是基于 Spring Framework 4.2.0.RC1 构建的,提供一些新特性和改进,主要更新内容如下: A new module w...

oschina
2015/06/13
2.6K
13
Spring Boot 数据缓存 Cache

我们知道一个程序的瓶颈在于数据库,我们也知道内存的速度是大大快于硬盘的速度的。当我们需要重复地获取相同的数据的时候,我们一次又一次的请求数据库或者远程服务,导致大量的时间耗费在数...

xiaolyuh
09/23
23
0
Spring Boot(11)——使用Spring Cache

使用Spring Cache Spring提供了Cache抽象,它允许我们声明哪些bean的哪些方法的外部调用需要使用Cache。方法调用使用了Cache后,在调用真实方法前会先从缓存中获取结果,缓存中如果没有则会调...

elim168
2018/12/22
0
0
spring-boot整合ehcache实现缓存机制

EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。   ehcache提供了多种缓存策略,主要分为内存和磁盘两级,所以无需担心容量问题。   ...

很好亦平凡ms
2018/07/19
36
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
5
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部