【JavaWeb后端学习笔记】Spring Cache实现Redis缓存
Spring Cache是一个框架,实现了基于注解的缓存功能,只须要简单的加一个注解,就能实现缓存功能。Spring Cache提供了一层抽象,底层可以切换不同的缓存实现,比方:EHCache,Caffeine,Redis。要想切换缓存实现,只须要导入对应的依赖即可,不须要做其他配置。本文介绍Spring Cache实现Redis缓存。须要在项目pom文件中导入Spring Cache相关依赖和Redis相关依赖:
<!--Spring Cache相关依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
<version>2.7.3</version>
</dependency>
<!--Redis相关依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Spring Cache常用注解:
注解阐明@EnableCaching开启缓存注解功能,通常加在启动类上@Cacheable在方法执行前先查询缓存中是否有数据,假如有数据,则直接返回缓存数据;假如没有缓存数据,调用方法并将方法返回值放到缓存中,通常加载方法上。@CachePut将方法的返回值方法缓存中通常加载方法上。@CacheEvict将一条或多条数据从缓存中删除 通常加载方法上。 下面详细介绍后面三个注解的利用方法:
1.@Cacheable与@CachePut
@Cacheable与@CachePut注解中有两个属性cacheNames、key。Redis是键值对结构的数据库,通过这两个属性设置键名,最终存入Redis中的键名为cacheNames::key
cacheNames为缓存名称,一样平常设置成与业务相关。比方缓存用户相关信息,则可取名为userCache。
key的取值一样平常利用Spring EL语法编写,key的写法有多种:
[*]key=“直接指定key”
这种方法生成的key是固定的,不推荐利用。
@PostMapping
@CachePut(cacheNames = "userCache", key = "id") // 直接指定key="id",生成的键名固定为userCache::id
public User save(@RequestBody User user){
userMapper.insert(user);
return user;
}
[*]key=“#方法形参.属性”
方法形参为user,user对象中有一个属性为id,因此key可以设置为key = “#user.id”。而不同的user的id是不同的,因此这样生成的key的值是动态的。推荐利用 key=“#方法形参.属性” 这种方法。
@PostMapping
@CachePut(cacheNames = "userCache", key = "#user.id") // key="#方法形参.属性"。生成的键名为userCache::id属性值,是动态的键名
public User save(@RequestBody User user){
userMapper.insert(user);
return user;
}
[*]利用result关键字。key = “#result.属性”
result关键字代表的是方法的返回值。该方法的返回值为User对象,该对象中有个id属性,因此可以通过 key = “#result.属性” 的情势设置key。相识
@PostMapping
@CachePut(cacheNames = "userCache", key = "#result.id") // key = "#result.属性"
public User save(@RequestBody User user){
userMapper.insert(user);
return user;
}
[*]有多个方法形参的情况下设置key。
假如方法形参有多个,p0,a0代表第一个形参,p1,a1代表第二个形参,依次类推。所以key可以设置成:key = “#p0.属性”。大概利用root.args代表第一个参数,root.args代表第二个参数,key = “#root.args.id”。相识
@PostMapping
@CachePut(cacheNames = "userCache", key = "#p0.id") // key = "#p0.id" 方法中有两个形参,使用第一个形参的id属性设置key
public User save(@RequestBody User user, User user2){
userMapper.insert(user);
return user;
}
[*]key=“#方法形参”
假如方法形参不是一个引用类型的数据,那么直接设置key=“#方法形参”
@GettMapping
@CachePut(cacheNames = "userCache", key = "#id") // key = "#id"
public User getById(Long id){
User user = userMapper.getById(id);
return user;
}
2.@CacheEvict
删除缓存有两种情况,第一种为删除单条数据,第二种为删除批量数据。
[*]删除单条缓存数据
利用 cacheNames 与 key 两个属性指定要删除的键值对数据。这是正确匹配。
@DeleteMapping
@CacheEvict(cacheNames = "userCache", key = "#id") // 删除键为 userCache::id 的键值对,此处id是动态的,指形参的值。
public void deleteById(Long id){
userMapper.deleteById(id);
}
[*]删除批量缓存数据
利用 cacheNames 与 allEntries 两个属性,cacheNames用于含糊匹配键名,allEntries 用于设置是否删除全部键名由 cacheNames 开头的键值对。
@DeleteMapping("/delAll")
@CacheEvict(cacheNames = "userName", allEntries = true)
public void deleteAll(){
userMapper.deleteAll();
}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]