微服务技术系列教程(07) - SpringBoot - 缓存的使用

简介: 微服务技术系列教程(07) - SpringBoot - 缓存的使用

代码已提交到Github,有兴趣的同学可以下载来看看:https://github.com/ylw-github/SpringBoot-Cache-Demo

接下来讲解SpringBoot是如何使用缓存的,以及关于缓存文件的配置。

1.Spring使用缓存的步骤

1.1 添加Maven依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

1.2 新建ehcache.xml文件

ehcache.xml文件放在classpath目录下,即src/main/resources/ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
         updateCheck="false">
    <diskStore path="java.io.tmpdir/Tmp_EhCache" />
    <!-- 默认配置 -->
    <defaultCache maxElementsInMemory="5000" eternal="false"
                  timeToIdleSeconds="120" timeToLiveSeconds="120"
                  memoryStoreEvictionPolicy="LRU" overflowToDisk="false" />
    <cache name="baseCache" maxElementsInMemory="10000"
           maxElementsOnDisk="100000" />
</ehcache>

1.3 代码使用cacheable

@CacheConfig(cacheNames = "baseCache")
public interface UserMapper {
    @Select("SELECT * FROM t_user WHERE NAME = #{name}")
    @Cacheable
    User findByName(@Param("name") String name);
    @Insert("INSERT INTO t_user(uuid,name, age) VALUES(#{uuid},#{name}, #{age})")
    int insert(@Param("uuid") String uuid, @Param("name") String name, @Param("age") Integer age);
}

1.4 Controller 新增接口验证(添加、查询和移除缓存)

package com.ylw.springboot.controller;
import com.ylw.springboot.bean.User;
import com.ylw.springboot.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CacheController {
    @Autowired
    private CacheManager cacheManager;
    @Autowired
    private UserMapper userMapper;
    @RequestMapping("/addCache")
    public String addCache() {
        User user = userMapper.findByName("Dumas");
        if(user == null){
            return "fail";
        }
        return user.toString();
    }
    @RequestMapping("/getCache")
    public String getCache() {
        Cache baseCache = cacheManager.getCache("baseCache");
        if(baseCache == null){
            return "fail";
        }
        return baseCache.getNativeCache().toString();
    }
    @RequestMapping("/removeCache")
    public String removeCache() {
        cacheManager.getCache("baseCache").clear();
        return "success";
    }
}

1.5 启动类加入缓存@EnableCaching

1.6 测试,运行程序

1.先插入缓存,访问:http://localhost:8080/addCache,返回成功!

2.查询本地缓存,访问:http://localhost:8080/getCache,返回查询成功!

3.把缓存移除,访问:http://localhost:8080/removeCache,返回移除成功!

执行第二步骤,查询缓存,看看缓存是否还在?发现缓存已经被移除了。

2.ehcache.xml文件参数解析

参数 解析
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 内存数量最大时是否清除

总结

目录
相关文章
|
8天前
|
Java API 微服务
【Spring Boot系列】通过OpenAPI规范构建微服务服务接口
【4月更文挑战第5天】通过OpenAPI接口构建Spring Boot服务RestAPI接口
|
1月前
|
Kubernetes 开发者 Docker
基于容器技术的微服务架构
基于容器技术的微服务架构
33 0
|
1月前
|
存储 安全 前端开发
基于springboot技术的美食烹饪互动平台的设计与实现
基于springboot技术的美食烹饪互动平台的设计与实现
|
4天前
|
存储 Java 时序数据库
【SpringBoot系列】微服务监测(常用指标及自定义指标)
【4月更文挑战第6天】SpringBoot微服务的监测指标及自定义指标讲解
|
1天前
|
缓存 NoSQL Java
Springboot 多级缓存设计与实现
Springboot 多级缓存设计与实现
|
1天前
|
缓存 NoSQL Java
SpringBoot实现缓存预热的几种常用方案
SpringBoot实现缓存预热的几种常用方案
|
2天前
|
机器学习/深度学习 负载均衡 Java
【SpringBoot系列】微服务远程调用Open Feign深度学习
【4月更文挑战第9天】微服务远程调度open Feign 框架学习
|
3天前
|
Java 关系型数据库 数据库
【SpringBoot系列】微服务集成Flyway
【4月更文挑战第7天】SpringBoot微服务集成Flyway
【SpringBoot系列】微服务集成Flyway
|
9天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
10天前
|
存储 数据可视化 安全
Java全套智慧校园系统源码springboot+elmentui +Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术
智慧校园指的是以物联网为基础的智慧化的校园工作、学习和生活一体化环境,这个一体化环境以各种应用服务系统为载体,将教学、科研、管理和校园生活进行充分融合。无处不在的网络学习、融合创新的网络科研、透明高效的校务治理、丰富多彩的校园文化、方便周到的校园生活。简而言之,“要做一个安全、稳定、环保、节能的校园。
35 6

热门文章

最新文章