当前位置: 首页 > news >正文

常州模板网站建设企业中国采购网官方网站

常州模板网站建设企业,中国采购网官方网站,百合网 网站 开发,网页制作技术基础教程Cacheable 是 Spring 框架中用于缓存的注解之一#xff0c;它可以帮助你轻松地将方法的结果缓存起来#xff0c;从而提高应用的性能。下面详细介绍如何使用 Cacheable 注解以及相关的配置和注意事项。 1. 基本用法 1.1 添加依赖 首先#xff0c;确保你的项目中包含了 Spr… Cacheable 是 Spring 框架中用于缓存的注解之一它可以帮助你轻松地将方法的结果缓存起来从而提高应用的性能。下面详细介绍如何使用 Cacheable 注解以及相关的配置和注意事项。 1. 基本用法 1.1 添加依赖 首先确保你的项目中包含了 Spring Cache 的依赖。如果你使用的是 Spring Boot可以在 pom.xml 或 build.gradle 中添加以下依赖 Maven: dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-cache/artifactId /dependencyGradle: implementation org.springframework.boot:spring-boot-starter-cache1.2 启用缓存 在你的 Spring Boot 应用的主类或配置类上添加 EnableCaching 注解以启用缓存功能。 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching;SpringBootApplication EnableCaching public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);} }1.3 使用 Cacheable 注解 假设你有一个服务类 DataService其中有一个方法 getSortedData 需要缓存其结果。你可以使用 Cacheable 注解来实现这一点。 import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service;Service public class DataService {Cacheable(sortedData)public TableDataInfo getSortedData(String param) {// 模拟耗时操作try {Thread.sleep(2000);} catch (InterruptedException e) {Thread.currentThread().interrupt();}// 返回模拟数据return new TableDataInfo();} }解释: Cacheable(sortedData): 这个注解告诉 Spring 在调用 getSortedData 方法时先检查名为 sortedData 的缓存中是否存在与参数 param 对应的结果。 如果存在则直接返回缓存中的结果不再执行方法体。如果不存在则执行方法体将结果存入缓存中并返回结果。 1.4 自定义缓存键 默认情况下Spring 使用方法参数作为缓存键。如果你需要自定义缓存键可以使用 key 属性。 Cacheable(value sortedData, key #param) public TableDataInfo getSortedData(String param) {// 方法体 }解释: key #param: 使用方法参数 param 作为缓存键。 你还可以使用 SpELSpring Expression Language来构建更复杂的缓存键。 Cacheable(value sortedData, key #param _ #anotherParam) public TableDataInfo getSortedData(String param, String anotherParam) {// 方法体 }2. 配置缓存管理器 Spring 支持多种缓存实现如 Caffeine、Ehcache、Redis 等。下面分别介绍如何配置这些缓存管理器。 2.1 使用 Caffeine 作为缓存实现 添加依赖: dependencygroupIdcom.github.ben-manes.caffeine/groupIdartifactIdcaffeine/artifactId /dependency配置 Caffeine: 你可以在 application.yml 或 application.properties 中配置 Caffeine 的缓存参数。 application.yml: spring:cache:type: caffeinecaffeine:spec: maximumSize1000,expireAfterAccess60sapplication.properties: spring.cache.typecaffeine spring.cache.caffeine.specmaximumSize1000,expireAfterAccess60smaximumSize1000: 设置缓存的最大条目数为 1000。expireAfterAccess60s: 设置缓存条目在最后一次访问后的过期时间为 60 秒。 2.2 使用 Ehcache 作为缓存实现 添加依赖: dependencygroupIdorg.ehcache/groupIdartifactIdehcache/artifactId /dependency配置 Ehcache: 创建一个 ehcache.xml 文件并在其中定义缓存配置。 ehcache.xml: config xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlnshttp://www.ehcache.org/v3xsi:schemaLocationhttp://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core.xsdcache aliassortedDatakey-typejava.lang.String/key-typevalue-typecom.ruoyi.common.core.page.TableDataInfo/value-typeresourcesheap unitentries1000/heapoffheap unitMB100/offheap/resources/cache /configheap unitentries1000/heap: 设置堆内存中缓存的最大条目数为 1000。offheap unitMB100/offheap: 设置堆外内存中缓存的最大大小为 100MB。 配置 Spring 使用 Ehcache: 在 application.yml 或 application.properties 中指定 Ehcache 配置文件的位置。 application.yml: spring:cache:type: ehcacheehcache:config: classpath:ehcache.xmlapplication.properties: spring.cache.typeehcache spring.cache.ehcache.configclasspath:ehcache.xml2.3 使用 Redis 作为缓存实现 添加依赖: dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId /dependency配置 Redis: 在 application.yml 或 application.properties 中配置 Redis 连接信息。 application.yml: spring:cache:type: redisredis:host: localhostport: 6379application.properties: spring.cache.typeredis spring.redis.hostlocalhost spring.redis.port6379可选配置: 你可以进一步配置 Redis 的缓存行为例如设置最大内存大小和淘汰策略。 application.yml: spring:redis:lettuce:pool:max-active: 20max-idle: 10min-idle: 5timeout: 5000ms3. 其他相关注解 除了 CacheableSpring 还提供了其他几个注解来管理缓存 3.1 CachePut CachePut 注解用于更新缓存中的值但不会影响方法的执行。每次调用带有 CachePut 注解的方法时都会执行方法体并将结果存入缓存。 CachePut(value sortedData, key #param) public TableDataInfo updateSortedData(String param) {// 更新逻辑return new TableDataInfo(); }3.2 CacheEvict CacheEvict 注解用于从缓存中移除一个或多个条目。适用于需要清除缓存的情况。 CacheEvict(value sortedData, key #param) public void deleteSortedData(String param) {// 删除逻辑 }// 清除整个缓存 CacheEvict(value sortedData, allEntries true) public void clearAllSortedData() {// 清除所有缓存 }3.3 Caching Caching 注解允许你在同一个方法上组合多个缓存操作。 Caching(put {CachePut(value sortedData, key #param),CachePut(value anotherCache, key #param)},evict {CacheEvict(value oldCache, key #param)} ) public TableDataInfo updateAndEvict(String param) {// 更新逻辑return new TableDataInfo(); }4. 示例代码 下面是一个完整的示例展示了如何使用 Cacheable 注解以及配置 Caffeine 缓存。 4.1 项目结构 src ├── main │ ├── java │ │ └── com │ │ └── example │ │ ├── Application.java │ │ ├── config │ │ │ └── CacheConfig.java │ │ ├── service │ │ │ └── DataService.java │ │ └── model │ │ └── TableDataInfo.java │ └── resources │ └── application.yml4.2 Application.java package com.example;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching;SpringBootApplication EnableCaching public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);} }4.3 CacheConfig.java package com.example.config;import com.github.benmanes.caffeine.cache.Caffeine; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.caffeine.CaffeineCacheManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;import java.util.concurrent.TimeUnit;Configuration EnableCaching public class CacheConfig {Beanpublic CacheManager cacheManager() {CaffeineCacheManager cacheManager new CaffeineCacheManager(sortedData);cacheManager.setCaffeine(caffeineCacheBuilder());return cacheManager;}CaffeineObject, Object caffeineCacheBuilder() {return Caffeine.newBuilder().expireAfterWrite(60, TimeUnit.SECONDS).maximumSize(1000);} }4.4 DataService.java package com.example.service;import com.example.model.TableDataInfo; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service;Service public class DataService {Cacheable(sortedData)public TableDataInfo getSortedData(String param) {// 模拟耗时操作try {Thread.sleep(2000);} catch (InterruptedException e) {Thread.currentThread().interrupt();}// 返回模拟数据return new TableDataInfo();} }4.5 TableDataInfo.java package com.example.model;public class TableDataInfo {// 模拟数据模型 }4.6 application.yml spring:cache:type: caffeine5. 注意事项 缓存一致性: 确保在更新数据时正确使用 CachePut 和 CacheEvict 注解以保持缓存的一致性。对于分布式系统考虑使用支持分布式缓存的实现如 Redis。 缓存失效策略: 根据业务需求选择合适的缓存失效策略如基于时间、基于条件等。定期清理过期或不必要的缓存条目以避免内存泄漏。 缓存击穿和穿透: 缓存击穿: 当缓存失效后大量请求同时涌入数据库导致数据库压力骤增。 解决方案: 可以使用互斥锁如 Redis 分布式锁来防止缓存击穿。 缓存穿透: 当查询一个不存在的数据时所有请求都直接打到数据库。 解决方案: 可以在缓存中存储一个空对象或特殊标记表示该数据不存在。 缓存雪崩: 当大量缓存同时失效时大量请求直接打到数据库导致数据库压力骤增。解决方案: 可以设置不同的过期时间避免缓存同时失效。 6. 调试和监控 为了更好地管理和调试缓存可以使用以下工具和方法 日志记录: 在方法上添加日志记录查看缓存的命中率和缓存操作的频率。监控工具: 使用监控工具如 Prometheus、Grafana来监控缓存的性能指标。Spring Boot Actuator: 提供了缓存相关的端点可以方便地查看缓存的状态和统计信息。 启用 Spring Boot Actuator: 添加依赖: dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId /dependency配置暴露端点: application.yml: management:endpoints:web:exposure:include: caches访问缓存端点: 访问 http://localhost:8080/actuator/caches 可以查看缓存的状态信息。 总结 通过使用 Cacheable 注解可以轻松地在 Spring 应用中实现缓存机制从而提高应用的性能和响应速度。结合不同的缓存实现如 Caffeine、Ehcache、Redis你可以根据具体需求灵活配置缓存策略确保缓存的有效性和高效性。
http://www.w-s-a.com/news/754347/

相关文章:

  • 合肥网站排名什么网站做电气自动化兼职
  • 如何用api做网站交通建设门户网站
  • 阳西住房和城乡规划建设局网站长沙网站seo技巧
  • 长沙知名网站推广手机画设计图软件
  • 顺德公司做网站自己有网站怎么优化
  • 南京网站开发南京乐识专业外贸流程知乎
  • 盐田区住房和建设局网站分类网站有哪些
  • 建一个团购网站WordPress文章字号设置
  • 做漂亮的网站东营网站seo
  • 网站开发摊销做设计哪个网站可以接单
  • 惠州h5网站建设建设公司网站报价
  • 做网站多少钱 优帮云嘉兴五县两区网站建设
  • 三亚旅游网站策划书企业网站建设的定位
  • 网站建设工作台账网站建设的实验结论
  • 商业网站建设平台制作软件的软件
  • 本地网站开发wordpress页面关键词和描述
  • 微网站 合同软件开发培训方案
  • 怎么做淘宝客网站备案广告公司图片大全
  • 微信小程序展示网站建设多少钱做网站用什么软件初二
  • 瀑布流资源网站模板打码网站建设
  • wordpress 支付宝打赏网站视觉优化的意义
  • 建设网站需要几个文件夹永久免费内存大服务器
  • 可信赖的手机网站建设wordpress 显示摘要
  • 谁给我一个企业邮箱认证wordpress优化攻略
  • 建站软件免费版下载涿州做网站的
  • html5网站开发西安哪家网站建设公司好
  • 怎么做网站赚广州番禺区是富人区吗
  • 服装网站推广方案戴尔网站建设成功
  • 手机网站布局国外可以用什么网站做问卷
  • 手机建网站网店logo设计图片免费