---恢复内容开始---

命中:应用程序从key中获取数据,取到后返回

失效:到设置的失效时间后就失效

更新:应用程序把数据存到数据库中后又放回去

在项目中使用redis方法

结合业务场景,避免滥用

@Cacheable 第一次会访问方法内容,将第一次查询的数据存在redis中,与key对应key中,第二次就不用进入方法,直接用key取值

@CachePut每次都会进入方法执行里面的内容,将每次返回的内容塞到redis中去,用于返回值与已缓存的数据类型一样时使用,也可用于数据变动,

再次查询时也不会进入查询方法

@CacheEvict在执行完毕时清除缓存的数据,其他方法需重新查询存值,一般在数据库数据更改时使用,用于返回值与已缓存的数据类型不一样时使用

1.在项目启动类加上注解@EnableCaching

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

  2.如果没有jar包,引入依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>

  

/开启redis缓存,返回对象也必须序列化
//订单列表
@GetMapping("/list")
@Cacheable(cacheNames ="product",key = "123")//开启redis缓存,返回对象也必须序列化,cacheNames类似于文件夹,在类名上面加入注解
@CacheConfig(cacheNames="product")作用域 在方法开启缓存注解中就不用加cacheNames ="product"
动态传key
@Cacheable(cacheNames ="product",key = "#openid",condition="#openid==1",unless="#ResultVO<List<OrderDTO>>.getsize()<=0")
condition="#openid==1"根据传入条件判断,当openid==1时才会返回值存到redis中,条件不成立时不会缓存
unless="#ResultVO<List<OrderDTO>>.getsize()<=0" 根据返回值进行条件,可以根据返回值属性进行是否进行缓存,写的条件要与理想条件相反,例如想查询某
属性>1的时候缓存,则unless里面条件要写成某属性<=1 public ResultVO<List<OrderDTO>> list(@RequestParam("openid") String openid,
@RequestParam(value = "page", defaultValue = "0") Integer page,
@RequestParam(value = "size", defaultValue = "10") Integer size) {
if (StringUtils.isEmpty(openid)) {
log.error("【查询订单列表】openid为空");
throw new SellException(ResultEnum.PARAM_ERROR);
} PageRequest request = new PageRequest(page, size);
Page<OrderDTO> orderDTOPage = orderService.findList(openid, request); return ResultVOUtil.success(orderDTOPage.getContent());
}

  

  

  

//返回类型实现Serializable序列化
@Data
public class ResultVO<T> implements Serializable{ //生成Id可以使用插件SerialVersionUID生成,生成的码可以保证唯一,用快捷键直接生成,安装插件后,
// 在keymap中找到SerialVersionUID插件,并设置快捷键,再使用快捷键生成,本机 ctrl+alt+反斜杠
private static final long serialVersionUID = 3068837394742385883L;

  

 注意:数据库更新时理想状态是redis里面数据一起更新 

---恢复内容结束---

12.19 redis缓存的更多相关文章

  1. springboot(12)Redis作为SpringBoot项目数据缓存

    简介: 在项目中设计数据访问的时候往往都是采用直接访问数据库,采用数据库连接池来实现,但是如果我们的项目访问量过大或者访问过于频繁,将会对我们的数据库带来很大的压力.为了解决这个问题从而redis数据 ...

  2. Django1.9开发博客(13)- redis缓存

    Redis 是一个高性能的key-value数据库.redis的出现, 很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用. 它提供了Pyth ...

  3. 使用redis缓存加索引处理数据库百万级并发

    使用redis缓存加索引处理数据库百万级并发 前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1 ...

  4. $.ajax()方法详解 ajax之async属性 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )

    $.ajax()方法详解   jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...

  5. SpringBoot集成Redis分布式锁以及Redis缓存

    https://blog.csdn.net/qq_26525215/article/details/79182687 集成Redis 首先在pom.xml中加入需要的redis依赖和缓存依赖 < ...

  6. Redis 缓存 + Spring 的集成示例(转载)

    1. 依赖包安装 pom.xml 加入: <dependency> <groupId>org.springframework.data</groupId> < ...

  7. 如约而至,Java 10 正式发布! Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势 努力的孩子运气不会太差,跌宕的人生定当更加精彩 优先队列详解(转载)

    如约而至,Java 10 正式发布!   3 月 20 日,Oracle 宣布 Java 10 正式发布. 官方已提供下载:http://www.oracle.com/technetwork/java ...

  8. Redis: 缓存过期、缓存雪崩、缓存穿透、缓存击穿(热点)、缓存并发(热点)、多级缓存、布隆过滤器

    Redis: 缓存过期.缓存雪崩.缓存穿透.缓存击穿(热点).缓存并发(热点).多级缓存.布隆过滤器 2019年08月18日 16:34:24 hanchao5272 阅读数 1026更多 分类专栏: ...

  9. redis缓存的安装和使用(转)

    redis缓存的安装和使用 转载自:http://www.open-open.com/lib/view/open1384091914836.html Redis介绍    Redis本质上一个Key/ ...

随机推荐

  1. android(十五) FTP的两种工作模式

    (一)PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链 当需要传送数据时,客户端在命令链路上用 PORT命令告诉服务器:“我打开了 ...

  2. uchome登录验证

    Uchome采用cookie+数据库的方式来进行用户登录验证的 一.登录 1:登录表单由source/do_login.php 处理 2:然后验证用户名以及密码的正确性,不正确则跳转并提示登录失败 3 ...

  3. 第1章 1.6计算机网络概述--OSI参考模型

    ISO七层模式:国际标准组织对互联网通信规则进行的定义. 7.应用层:所有能产生网络流量的程序,如:QQ. 6.表示层:传输前对数据进行进行处理,是一种数据处理的规则,如:加密.压缩.传输二进制(图片 ...

  4. python装饰器的应用案例

    目录 一.过程编程 二.面向装饰器和函数的编程 三.二的加强版 一.过程编程 (一)需求:打印菱形 1.空格.*号组成的菱形 2.输入菱形上半部分的行数即可打印 3.支持循环输入 (二)代码 from ...

  5. C#基础笔记(第九天)

    1.面向过程<-->面向对象面向过程:面向的是完成这件事儿的过程,强调的是完成这件事儿的动作. 面向对象:找个对象帮你做事儿.意在写出一个通用的代码,屏蔽差异. 每个人都有姓名,性别,身高 ...

  6. ReactNative 环境配置

    一直是从事iOS的开发,现在研究下mac环境下reatNative的环境配置: 1. 安装HomeBlew(OS系统上的一个安装包管理器,安装后可以方便后续安装包的安装.) 终端命令: ruby -e ...

  7. keras实现不同形态的模型

    keras提供了Sequential线性的模型,但是有些网络需要多个输入,有些网络有多个输出,更甚之层与层之间有内部分支,这使得网络看起来像是层构成的图,而不是线性的堆叠.有些场景需要多模态的输入,这 ...

  8. cocos代码研究(20)Widget子类LoadingBar学习笔记

    理论基础 在一些操作中可视化指示进度条.显示给用户一个条表示操作已经完成了多少,继承自 Widget. 代码实践 static LoadingBar * create ()创建一个空的LoadingB ...

  9. GIT学习笔记(1):创建版本库

    GIT学习笔记(1):创建版本库 创建版本库 1.创建合适目录并初始化为仓库 版本库即需要交由Git进行版本控制的目录,其下所有文件的修改.删除,Git都能跟踪还原. 说明:初始化后,当前目录下会多出 ...

  10. 利用ansible进行自动化构建etcd集群

    上一篇进行了手动安装etcd集群,此篇利用自动化工具ansible为三个节点构建etcd集群 环境: master:192.168.101.14,node1:192.168.101.15,node2: ...