1,先整合 redis 和 mybatis

步骤一: springboot 整合 redis
步骤二: springboot 整合 mybatis

2,启动类添加 @EnableCaching 注解,开启缓存

  因为缓存获取不到数据要到数据库获取,所以还要扫描 mybatis 接口路径

@SpringBootApplication
@MapperScan("com.test.Idao")
@EnableCaching
public class StringbootRedisCacheApplication { public static void main(String[] args) {
SpringApplication.run(StringbootRedisCacheApplication.class, args);
}
}

3,增(获取)、删、改缓存注解

@Cacheable 获取缓存 ---- 该注解用于方法上,方法不一定执行

  @Cacheable(cacheNames = "user", key="#id"),在 redsi 中 key 是 cacheNames 和 key 拼接而成,如果 id 为 1 ,具体的 key 为:user::1

    cacheNames 随意指定,key 只能是来自于当前方法的参数

  会根据 key 先到 redis 获取数据,如果没获取到,就运行方法到数据库取得数据并放入 redis,下次调用该方法就不会到数据库了

@CachePut 更新缓存 ---- 该注解用于方法上,方法每次都会执行

  配置和 @Cacheable 一致

  先到数据库修改数据,再根据 key 到 redis 中查询,如果有数据就更新,如果没有就添加,值是方法的返回值

@CacheEvict 删除缓存 ---- 该注解用于方法上,方法每次都会执行

  配置和 @Cacheable 一致

  根据 key 到 redis 中查询,如果有数据就删除

@CacheConfig ---- 该注解用于类上,用于简化上面 3 个配置,可以一次性定义 cacheNames ,方法上配置别的属性即可

示例

// key 只能是 id,因为参数是 id
@Cacheable(cacheNames="user", key="#id")
public User getUserById(int id){} // 如果参数是对象,key 可以是参数的任意属性名
@CachePut(cacheNames="user", key="#user.id")
public User updateUserById(User user){} // 如果参数是基本类型,可以不配置 key,默认就是该参数作为 key
@CacheEvict(cacheNames="user")
public User deleteUserById(int id){} // CacheConfig 配置了 cacheNames="user",所有方法的cacheNames都是 user
@CacheConfig(cacheNames="user")
public class UserService{
  @Cacheable
  public User getUserById(int id){}
  @CachePut(key="#user.id")
public User updateUserById(User user){}
}

坑:

1,如果 key 不是唯一的(比如用户表中的 name 字段作为缓存的 key ),结果就会在缓存中一个 key 查出一个 list ,这是修改要特别注意因为 @CacheEvict 注解会把该方法的返回值作为 value 覆盖原来的 value,我有个这样的需求,我的解决办法是:修改方法不做缓存操作,方法执行完后调用一个方法来清除原来的缓存,这样能解决数据的准确性,但是每当修改后要再查询数据的话就需要把 mysql 数据放入 redis

2,在 pojo 类上不能使用 @Repository 注解,建议使用 @Component

3,各个缓存方法只能在外部调用才会生效(比如在 service 层定义,在 controller 层调用)

springboot Redis 缓存的更多相关文章

  1. springboot redis 缓存对象

    只要加入spring-boot-starter-data-redis , springboot 会自动识别并使用redis作为缓存容器,使用方式如下 gradle加入依赖 compile(" ...

  2. SpringBoot Redis缓存 @Cacheable、@CacheEvict、@CachePut

    文章来源 https://blog.csdn.net/u010588262/article/details/81003493 1. pom.xml <dependency> <gro ...

  3. springboot + redis缓存使用

    [参照资料] 1.spring boot 官网文档 2.https://www.cnblogs.com/gdpuzxs/p/7222309.html [项目结构] [pom.xml配置] <?x ...

  4. 从.Net到Java学习第七篇——SpringBoot Redis 缓存穿透

    从.Net到Java学习系列目录 场景描述:我们在项目中使用缓存通常都是先检查缓存中是否存在,如果存在直接返回缓存内容,如果不存在就直接查询数据库然后再缓存查询结果返回.这个时候如果我们查询的某一个数 ...

  5. 微服务-Springboot+Redis缓存管理接口代码实现

    废话少说,上代码,结合代码讲解: 一.创建maven工程:导入依赖: <packaging>war</packaging><!--修改jdk的版本--><pr ...

  6. springboot redis 缓存跨域丢失问题

    对于前后端分离的项目,在开发阶段经常会遇到跨域的问题. 1.首先,对于后台的处理方式,第一种是用 @CrossOrigin 注解,@crossorigin是后端SpringMVC框架(需4.2版本以上 ...

  7. spring-boot的spring-cache中的扩展redis缓存的ttl和key名

    原文地址:spring-boot的spring-cache中的扩展redis缓存的ttl和key名 前提 spring-cache大家都用过,其中使用redis-cache大家也用过,至于如何使用怎么 ...

  8. SpringBoot学习笔记(6) SpringBoot数据缓存Cache [Guava和Redis实现]

    https://blog.csdn.net/a67474506/article/details/52608855 Spring定义了org.springframework.cache.CacheMan ...

  9. java框架之SpringBoot(11)-缓存抽象及整合Redis

    Spring缓存抽象 介绍 Spring 从 3.1 版本开始定义了 org.springframework.cache.Cache 和 org.springframework.cache.Cache ...

随机推荐

  1. Spring Boot 返回 XML 数据,一分钟搞定!

    Spring Boot 返回 XML 数据,前提必须已经搭建了 Spring Boot 项目,所以这一块代码就不贴了,可以点击查看之前分享的 Spring Boot 返回 JSON 数据,一分钟搞定! ...

  2. iOS----KVC和KVO 详解

    一. KVC 1.KVC介绍 KVC 就是键值编码(key-value-coding). 2.KVC 的主要作用: (1)通过键值路径为对象的属性赋值.主要是可以为私有的属性赋值. AppleView ...

  3. Elasticsearch基础教程分享

    基础及相关资料 首先我们先了解一下什么是Elastisearch,Elasticsearch(简称es)是一个基于Lucene库的搜索引擎.它提供了一个分布式.支持多租户的全文搜索引擎,具有HTTP  ...

  4. 去掉word页眉上横线的技巧

    页眉下面会出现一条横线 双击页眉进入页眉页脚编辑状态.选定页眉内容.点击菜单栏[开始]-[清除一切格式]图标. 效果图: 方法二 进入页眉编辑状态,同时自动切换到了“设计”选项卡.同时注意观察,在页眉 ...

  5. Oracle的条件in包含NULL时的处理

    一.创建一个含表,表中只有一列为id,该列中含有值为NULL的记录 我们在写SQL时经常会用到in条件,如果in包含的值都是非NULL值,那么没有特殊的,但是如果in中的值包含null值(比如in后面 ...

  6. mysql 开发基础系列7 流程函数与其它函数

    一.流程函数 -- 创建表来介绍 ,)); ,),(,), (,),(,),(,), (,NULL); SELECT * FROM salary 1. if(value,t,f)  超过2000的用h ...

  7. Spring Boot 1.5升级2.1 主要问题汇总

    我们目前工作的系统是基于Spring Boot 1.5.19.RELEASE.Spring Cloud Edgware.SR3开发的,因为一个新项目开发过程的体验,所以在考虑升级到Spring Boo ...

  8. Unity3D热更新之LuaFramework篇[02]--用Lua创建自己的面板

    在上篇文章 Unity3D热更新之LuaFramework篇[01]--从零开始 中,我们了解了怎么获得一个可用的LuaFramework框架. 本篇将我会先介绍一下如何配置Lua开发环境,然后分析在 ...

  9. 手把手在Ubuntu上面安装Docker

    一.环境准备 1.Ubuntu64位系统(目前docker仅支持64位系统) 2.官方支持的Ubuntu版本(1)Ubuntu Trusty 14.04(LTS)(2)Ubuntu Precise 1 ...

  10. Perl引用入门

    在perl中只有3种基本的数据结构:标量.数组.hash.变量可以是数值,可以是字符串. 这三种基本数据结构的数据存储方式如下: 但是,仅仅由这3种基本结构,就可以构造出更复杂的数据结构,例如hash ...