SpringBoot学习笔记

SpringBoot学习笔记,第1张

本节记录springboot+JPA整合redis实现简单的缓存管理

目录

1、添加redis依赖,并Reload project2

2、配置redis

3、在controller中使用缓存管理

4、测试

SpringCache 的注解


1、添加redis依赖,并Reload project2


	org.springframework.boot
	spring-boot-starter-data-redis
	2.0.3.RELEASE
2、配置redis
# redis
spring.redis.host=192.168.77.193
spring.redis.port=6379

在启动类DemoJpaApplication上添加@EnableCaching注解

@SpringBootApplication
@EnableCaching
public class DemoJpaApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoJpaApplication.class, args);
	}

}
3、在controller中使用缓存管理

在BookController的getBook上添加@Cacheable注解

@RequestMapping("/getbook")
@ResponseBody
@Cacheable(cacheNames = "books",unless = "#result==null")
public List getbook() {
  return bookRepo.findAll();
}
4、测试

访问/book/getbook接口报错,后台报错信息如下:

[Request processing failed; nested exception is org.springframework.data.redis.serializer.SerializationException: Cannot serialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to serialize object using DefaultSerializer; nested exception is java.io.NotSerializableException: com.galago.demo_jpa.entity.Book] with root cause

从报错信息可看出是Book类没有序列化导致报错。

Book序列化后,重启项目再次访问,未报错,问题解决 

 1)通过浏览器再访问多次,发现数据正常返回,后台没有打印查询语句,说明是从缓存中获取的数据

2)通过redis-cli验证是否存到缓存中,检测如下:

使用@CachePut、@CacheEvict、@Cacheable注解对update和delete实现缓存管理

@RequestMapping("/getbook")
@ResponseBody
@Cacheable(cacheNames = "books",unless = "#result==null")
public List getbook() {
    return bookRepo.findAll();
}

@RequestMapping("/getByid")
@ResponseBody
@Cacheable(cacheNames = "book")
public Book getOneBook(Integer id) {
    return bookRepo.getById(id);
}

@PostMapping("/add")
@ResponseBody
@CachePut(cacheNames = "book", key="#result.id")
public Book addBook(Book book) {
    return bookRepo.save(book);
}

@RequestMapping("/del")
@ResponseBody
@CacheEvict(cacheNames = "book")
public void deleteById(Integer id) {
    System.out.println(id);
    bookRepo.deleteById(id);
}

 

SpringCache 的注解

 1. 注解说明

@CacheConfig: 一般配置在类上,指定缓存名称,这个名称是和上面“置缓存管理器”中缓存名称的一致。
@Cacheable: 用于对方法返回结果进行缓存,如果已经存在该缓存,则直接从缓存中获取,缓存的key可以从入参中指定,缓存的 value 为方法返回值。
@CachePut: 无论是否存在该缓存,每次都会重新添加缓存,缓存的key可以从入参中指定,缓存的value为方法返回值,常用作于更新。
@CacheEvict: 用于清除缓存
@Caching: 用于一次性设置多个缓存。

2. 常用注解配置参数

value: 缓存管理器中配置的缓存的名称,这里可以理解为一个组的概念,缓存管理器中可以有多套缓存配置,每套都有一个名称,类似于组名,这个可以配置这个值,选择使用哪个缓存的名称,配置后就会应用那个缓存名称对应的配置。
key: 缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合。
condition: 缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才进行缓存。
unless: 不缓存的条件,和 condition 一样,也是 SpEL 编写,返回 true 或者 false,为 true 时则不进行缓存。

参考:

SpringBoot整合Redis缓存_Sun-yz的博客-CSDN博客_springboot整合redis实现缓存管理中

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/734129.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存