使用缓存有两个前置步骤

  1. pom.xml 引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 整合redis -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- springboot测试 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>

在启动类上加注解 @EnableCaching

@SpringBootApplication
@EnableCaching
public class RedisApplication {public static void main(String[] args) {SpringApplication.run(RedisApplication.class, args);}
}

常用的注解有以下几个@Cacheable、@CachePut、@CacheEvict

添加缓存

缓存的key就是配置在注解里面的值product::123,值是你方法的返回值,如果没有返回值,值就是org.springframework.cache.support.NullValue

在需要加缓存的方法上添加注解 @Cacheable(cacheNames = "product", key = "123"),

cacheNameskey 都必须填,如果不填 key ,默认的 key 是当前的方法名,更新缓存时会因为方法名不同而更新失败。

如在订单列表上加缓存

    @RequestMapping(value = "/list", method = RequestMethod.GET)@Cacheable(cacheNames = "product", key = "123")public List<Product> list() {List<Product> products=new ArrayList<>();for (int i = 0; i < 3; i++) {Product product=new Product();product.setId(i+1);product.setName("第"+(i+1)+"件商品");product.setPrice((double) ((i+1)*100));products.add(product);}return products;}

可能会报错,原因是对象未序列化。让对象实现 Serializable 方法即可。

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product implements Serializable {private Integer id;private String name;private Double price;
}

重启项目访问订单列表,在 rdm 里查看 Redis 缓存,有 product::123 说明缓存成功。

更新缓存

在需要更新缓存的方法上加注解: @CachePut(cacheNames = "product", key = "123")

注意

  1. cacheNameskey 要跟 @Cacheable() 里的一致,才会正确更新。

  2. @CachePut()@Cacheable() 注解的方法返回值要一致

删除缓存

在需要删除缓存的方法上加注解:@CacheEvict(cacheNames = "product", key = "123"),执行完这个方法之后会将 Redis 中对应的记录删除。

其他常用功能

  1. cacheNames 也可以统一写在类上面, @CacheConfig(cacheNames = "product") ,具体的方法上就不用写啦。

@RestController
@CacheConfig(cacheNames = "product")
public class ProdectController {}

Key 也可以动态设置为方法的参数

 @GetMapping("/detail")@Cacheable(cacheNames = "product", key = "#id")public Product detail(@RequestParam("id") Integer id){if (id==1){return new Product(1,"电冰箱",20d);}else if (id==2){return new Product(2,"洗衣机",30d);}else {return new Product(3,"彩电",40d);}}
  1. 如果参数是个对象,也可以设置对象的某个属性为 key。比如其中一个参数是 user 对象,key 可以写成 key="#user.id"

  2. 缓存还可以设置条件。

    设置当 openid 的长度大于3时才缓存

 @GetMapping("/detailOnCondition")@Cacheable(cacheNames = "product", key = "#id", condition = "#id > 2")public void detail(@RequestParam("id") String id){System.out.println("id是"+id);}

还可以指定 unless即条件不成立时缓存。#result 代表返回值,意思是当返回码不等于 0 时不缓存,也就是等于 0 时才缓存。

 @GetMapping("/detailOnConditionAndUnless")@Cacheable(cacheNames = "product", key = "#id", condition = "#id > 2", unless = "#result!= 0")public Integer detailOnConditionAndUnless(@RequestParam("id") Integer id){if (id==3){return 0;}else {return 1;}}

注解方式使用 Redis 缓存相关推荐

  1. ssm+redis 如何更简洁的利用自定义注解+AOP实现redis缓存

    基于 ssm + maven + redis 使用自定义注解 利用aop基于AspectJ方式 实现redis缓存 如何能更简洁的利用aop实现redis缓存,话不多说,上demo 需求: 数据查询时 ...

  2. cacheput注解 用法_以注解的方式使用redis缓存得用法@CachePut , @CacheEvict, @Cacheable...

    第一步:在启动类加注解@EnableCaching @SpringBootApplication @EnableCaching //@MapperScan(basePackages = "c ...

  3. SpringBoot缓存管理(二) 整合Redis缓存实现

    SpringBoot支持的缓存组件 觅波小说网 https://www.3812.info 在SpringBoot中,数据的缓存管理存储依赖于Spring框架中cache相关的org.springfr ...

  4. Redis -- 缓存穿透和雪崩

    文章目录 一.缓存穿透 1.1 概念 1.2 解决方案 1.3 布隆过滤器的工作原理 二.缓存击穿 2.1 概念 2.2 解决方案 三.缓存雪崩 3.1 概念 3.2 解决方案 用户的数据一般是存储于 ...

  5. 使用shiro的会话管理和redis缓存管理来构建登录模块spring+struts+hibernate(SSH)

    shiro是一个很好用的安全框架,主要表现在用户认证,权限认证,会话管理,如果想优化还可以做Cache管理,我们不需要做太多工作在用户身份token安全方面(记录shiro及用redis开发的步骤及一 ...

  6. Redis缓存击穿,缓存穿透,缓存雪崩,附解决方案

    前言 在日常的项目中,缓存的使用场景是比较多的.缓存是分布式系统中的重要组件,主要解决在高并发.大数据场景下,热点数据访问的性能问题,提高性能的数据快速访问.本文以Redis作为缓存时,针对常见的缓存 ...

  7. Redis - 缓存雪崩,缓存穿透,缓存击穿

    Redis是一个完全开源的,遵守BSD协议的,高性能的key-value的数据存储结构系统,它支持数据持久化,可以将内存中的数据保存在磁盘中.不仅支持简单的key-value类型的数据结构,同事还提供 ...

  8. Spring Boot集成Redis缓存之注解方式

    首先还是加入依赖Jar pom.xml中加入依赖 <!-- 加载spring boot redis 包 --><dependency><groupId>org.sp ...

  9. redis使用@Cacheable等注解为接口添加缓存

    缓存处理方式应该是 先从缓存中拿数据,如果有,直接返回. 如果拿到的为空,则数据库查询,然后将查询结果存到缓存中. 由此实现方式应该如下: private String baseKey = " ...

最新文章

  1. 类变量利用Java反射获取类的私有变量值
  2. Ganglia 调试技巧
  3. 回文数的个数、杨辉三角
  4. SAP UI5 how the ui library theme parameter is loaded
  5. html 替代table,Iframe的缺点,div或者table成为替代者
  6. 2019ICPC西安邀请赛 E. Tree(树剖 + 线段树)
  7. 【渝粤题库】国家开放大学2021春2503学前儿童健康教育题目
  8. 【BZOJ 3326】[Scoi2013]数数 数位dp+矩阵乘法优化
  9. 高中计算机学考操作ppt,高中信息技术基础学考专题复习(共25张PPT)
  10. JMS学习二(简单的ActiveMQ实例)
  11. 一大早,分享一个好消息
  12. Angr安装与使用之使用篇(十)
  13. c语言是高级编程语言吗,C语言是高级编程语言吗?
  14. 初次使用dcm4che-tool-findscu做查询
  15. 作为空降领导,该如何做?
  16. “本人成分” 如何填写
  17. Excel表格如何设置下拉选项并应用到整列
  18. CPU GPU 扫盲帖
  19. 公网对讲机与传统对讲机的发展与融合分析
  20. Java基本数据类型初始值(默认值)

热门文章

  1. 浅谈tomcat中间件的优化【转】
  2. redis数据库各种数据类型的增删改查命令
  3. bootstrap bootstrapTable 隐藏列
  4. 《大道至简》第二章 读后感
  5. ios基础篇(二十六)—— UITableViewCell的分组索引与标记
  6. AutoMapper2
  7. Android 应用框架
  8. [转,借鉴]Java学习从入门到精通-过程篇
  9. MyBatis对于Java对象里的枚举类型处理
  10. 提高电脑开机速度的一些基本操作