微服务技术系列教程(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 内存数量最大时是否清除

总结

目录
相关文章
|
7月前
|
监控 安全 Java
Spring Cloud 微服务治理技术详解与实践指南
本文档全面介绍 Spring Cloud 微服务治理框架的核心组件、架构设计和实践应用。作为 Spring 生态系统中构建分布式系统的标准工具箱,Spring Cloud 提供了一套完整的微服务解决方案,涵盖服务发现、配置管理、负载均衡、熔断器等关键功能。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
424 1
|
7月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
1247 5
|
7月前
|
Kubernetes Java 微服务
Spring Cloud 微服务架构技术解析与实践指南
本文档全面介绍 Spring Cloud 微服务架构的核心组件、设计理念和实现方案。作为构建分布式系统的综合工具箱,Spring Cloud 为微服务架构提供了服务发现、配置管理、负载均衡、熔断器等关键功能的标准化实现。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
626 0
|
9月前
|
缓存 负载均衡 NoSQL
基于微服务架构的唯品会商品详情接口技术解析
本文介绍了唯品会电商平台商品详情接口的微服务化实现方案,涵盖架构设计、代码示例与性能优化策略。采用FastAPI构建服务,结合Redis缓存、异步处理、Nginx负载均衡等技术,实现高并发、低延迟的接口性能。
|
9月前
|
缓存 Cloud Native Java
Java 面试微服务架构与云原生技术实操内容及核心考点梳理 Java 面试
本内容涵盖Java面试核心技术实操,包括微服务架构(Spring Cloud Alibaba)、响应式编程(WebFlux)、容器化(Docker+K8s)、函数式编程、多级缓存、分库分表、链路追踪(Skywalking)等大厂高频考点,助你系统提升面试能力。
963 0
|
9月前
|
人工智能 安全 Nacos
Nacos 3.0:微服务与AI融合的技术新纪元
Nacos 3.0:微服务与AI融合的技术新纪元
415 83
|
10月前
|
缓存 负载均衡 网络协议
电商API接口性能优化技术揭秘:缓存策略与负载均衡详解
电商API接口性能优化是提升系统稳定性和用户体验的关键。本文聚焦缓存策略与负载均衡两大核心,详解其在电商业务中的实践。缓存策略涵盖本地、分布式及CDN缓存,通过全量或部分缓存设计和一致性维护,减少后端压力;负载均衡则利用反向代理、DNS轮询等技术,结合动态调整与冗余部署,提高吞吐量与可用性。文中引用大型及跨境电商平台案例,展示优化效果,强调持续监控与迭代的重要性,为电商企业提供了切实可行的性能优化路径。
|
缓存 NoSQL Java
基于SpringBoot的Redis开发实战教程
Redis在Spring Boot中的应用非常广泛,其高性能和灵活性使其成为构建高效分布式系统的理想选择。通过深入理解本文的内容,您可以更好地利用Redis的特性,为应用程序提供高效的缓存和消息处理能力。
1246 79