官网网站怎么做,wordpress 邮件激活,模板网站 知乎,企业网站最底下做的是什么Spring Cache
介绍
Spring Cache 是一个框架#xff0c;实现了基于注解的缓存功能#xff0c;只需要简单地加一个注解#xff0c;就能实现缓存功能。
Spring Cache 提供了一层抽象#xff0c;底层可以切换不同的缓存实现#xff0c;例如#xff1a;
EHCacheCaffeineR…Spring Cache
介绍
Spring Cache 是一个框架实现了基于注解的缓存功能只需要简单地加一个注解就能实现缓存功能。
Spring Cache 提供了一层抽象底层可以切换不同的缓存实现例如
EHCacheCaffeineRedis(常用)
起步依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-cache/artifactId version2.7.3/version
/dependency常用注解
在SpringCache中提供了很多缓存操作的注解常见的是以下的几个
注解说明EnableCaching开启缓存注解功能通常加在启动类上Cacheable在方法执行前先查询缓存中是否有数据如果有数据则直接返回缓存数据如果没有缓存数据调用方法并将方法返回值放到缓存中CachePut将方法的返回值放到缓存中CacheEvict将一条或多条数据从缓存中删除
在spring boot项目中使用缓存技术只需在项目中导入相关缓存技术的依赖包并在启动类上使用EnableCaching开启缓存支持即可。
例如使用Redis作为缓存技术只需要导入Spring data Redis的maven坐标即可。
入门案例
1). 环境准备
数据库准备:
创建名为spring_cache_demo数据库将springcachedemo.sql脚本直接导入数据库中。 引导类上加EnableCaching:
package com.shisan;import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;Slf4j
SpringBootApplication
EnableCaching//开启缓存注解功能
public class CacheDemoApplication {public static void main(String[] args) {SpringApplication.run(CacheDemoApplication.class,args);log.info(项目启动成功...);}
}2). CachePut注解
CachePut 说明
作用: 将方法返回值放入缓存
value: 缓存的名称, 每个缓存名称下面可以有很多key
key: 缓存的key ---------- 支持Spring的表8
在save方法上加注解CachePut
当前UserController的save方法是用来保存用户信息的我们希望在该用户信息保存到数据库的同时也往缓存中缓存一份数据我们可以在save方法上加上注解 CachePut用法如下 /*** CachePut将方法返回值放入缓存* value缓存的名称每个缓存名称下面可以有多个key* key缓存的key*/PostMappingCachePut(value userCache, key #user.id)//key的生成userCache::1public User save(RequestBody User user){userMapper.insert(user); return user;}说明 key的写法如下
#user.id : #user指的是方法形参的名称, id指的是user的id属性 , 也就是使用user的id属性作为key ;
#result.id : #result代表方法返回值该表达式 代表以返回对象的id属性作为key
#p0.id#p0指的是方法中的第一个参数id指的是第一个参数的id属性,也就是使用第一个参数的id属性作为key ;
#a0.id#a0指的是方法中的第一个参数id指的是第一个参数的id属性,也就是使用第一个参数的id属性作为key ;
#root.args[0].id:#root.args[0]指的是方法中的第一个参数id指的是第一个参数的id属性,也就是使用第一个参数
的id属性作为key ;
启动服务,通过swagger接口文档测试访问UserController的save()方法
因为id是自增所以不需要设置id属性 查看user表中的数据 查看Redis中的数据 3). Cacheable注解
Cacheable 说明:
作用: 在方法执行前spring先查看缓存中是否有数据如果有数据则直接返回缓存数据若没有数据调用方法并将方法返回值放到缓存中
value: 缓存的名称每个缓存名称下面可以有多个key
key: 缓存的key ---------- 支持Spring的表达式语言SPEL语法
在getById上加注解Cacheable /*** Cacheable在方法执行前spring先查看缓存中是否有数据如果有数据则直接返回缓存数据若没有数据 *调用方法并将方法返回值放到缓存中* value缓存的名称每个缓存名称下面可以有多个key* key缓存的key*/GetMappingCacheable(cacheNames userCache,key#id)public User getById(Long id){User user userMapper.getById(id);return user;}重启服务,通过swagger接口文档测试访问UserController的getById()方法
第一次访问会请求我们controller的方法查询数据库。后面再查询相同的id就直接从Redis中查询数据不用再查询数据库了就说明缓存生效了。
提前在redis中手动删除掉id1的用户数据 **查看控制台sql语句**说明从数据库查询的用户数据 **查看Redis中的缓存数据**说明已成功缓存 再次查询相同id的数据时直接从redis中直接获取不再查询数据库。
4). CacheEvict注解
CacheEvict 说明
作用: 清理指定缓存
value: 缓存的名称每个缓存名称下面可以有多个key
key: 缓存的key ---------- 支持Spring的表达式语言SPEL语法
在 delete 方法上加注解CacheEvict DeleteMappingCacheEvict(cacheNames userCache,key #id)//删除某个key对应的缓存数据public void deleteById(Long id){userMapper.deleteById(id);}DeleteMapping(/delAll)CacheEvict(cacheNames userCache,allEntries true)//删除userCache下所有的缓存数据public void deleteAll(){userMapper.deleteAll();}重启服务,通过swagger接口文档测试访问UserController的deleteAll()方法 **查看user表**数据清空 查询Redis缓存数据