12.19 redis缓存
---恢复内容开始---
命中:应用程序从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缓存的更多相关文章
- springboot(12)Redis作为SpringBoot项目数据缓存
简介: 在项目中设计数据访问的时候往往都是采用直接访问数据库,采用数据库连接池来实现,但是如果我们的项目访问量过大或者访问过于频繁,将会对我们的数据库带来很大的压力.为了解决这个问题从而redis数据 ...
- Django1.9开发博客(13)- redis缓存
Redis 是一个高性能的key-value数据库.redis的出现, 很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用. 它提供了Pyth ...
- 使用redis缓存加索引处理数据库百万级并发
使用redis缓存加索引处理数据库百万级并发 前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1 ...
- $.ajax()方法详解 ajax之async属性 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )
$.ajax()方法详解 jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...
- SpringBoot集成Redis分布式锁以及Redis缓存
https://blog.csdn.net/qq_26525215/article/details/79182687 集成Redis 首先在pom.xml中加入需要的redis依赖和缓存依赖 < ...
- Redis 缓存 + Spring 的集成示例(转载)
1. 依赖包安装 pom.xml 加入: <dependency> <groupId>org.springframework.data</groupId> < ...
- 如约而至,Java 10 正式发布! Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势 努力的孩子运气不会太差,跌宕的人生定当更加精彩 优先队列详解(转载)
如约而至,Java 10 正式发布! 3 月 20 日,Oracle 宣布 Java 10 正式发布. 官方已提供下载:http://www.oracle.com/technetwork/java ...
- Redis: 缓存过期、缓存雪崩、缓存穿透、缓存击穿(热点)、缓存并发(热点)、多级缓存、布隆过滤器
Redis: 缓存过期.缓存雪崩.缓存穿透.缓存击穿(热点).缓存并发(热点).多级缓存.布隆过滤器 2019年08月18日 16:34:24 hanchao5272 阅读数 1026更多 分类专栏: ...
- redis缓存的安装和使用(转)
redis缓存的安装和使用 转载自:http://www.open-open.com/lib/view/open1384091914836.html Redis介绍 Redis本质上一个Key/ ...
随机推荐
- js基础面试高频面点1:变量提升
一.什么是变量提升?var变量提升的底层原理是什么? 变量提升的定义:所有变量的声明语句都会被提升到代码头部,这就是变量提升. 原理:引擎在读取js代码的过程中,分为两步,专业来说代码运行是分为预处理 ...
- input输入框type=file时accept中可以限制的文件类型(转载)
转载自: input type=file accept中可以限制的文件类型 在上传文件的时候,需要限制指定的文件类型. <input type="file" accept=& ...
- controller中两个方法之间共享一个变量LinkedHashMap
1:引用传递,创建一个变量,给两个线程都传递进去. 2:静态修饰 static 通过该修饰符说明,该变量只有一份, 所有线程共用一份. 例如下面的htmlidMap通过static变量修饰, up ...
- sipp保持sip协议的tcp长连接
sipp这个工具非常有用,但是由于应用手册不完善,加上资料非常少,所以要用熟练是非常不容易的.
- js cookie的读写
cookie是一小段信息,以键/值对的信息保存在计算机硬盘上的字符串, cookie存储容量大概在4kb,不同的浏览器厂家对cookie大小的限制有微微的差异:cookie主要的本质是“识别”,通过识 ...
- (转)SSIS处理导入数据时, 存在的更新, 不存在的插入
问题描述: 当你把数据从其他数据库, 或者是文本文件之类的其他数据源导入到目的数据库时, 有时希望在导入的处理中, 能够实现"数据存在时更新, 不存在时导入" 在之前, 一般是通过 ...
- 查准率与查全率(precision and recall) 的个人理解
假设要识别照片中的狗的,在一些照片中,包含12只狗的照片和一些猫的照片.算法识别出有8只狗.在确定的8只狗中,5只实际上是狗(真阳性TP),而其余的是猫(假阳性FP).该程序的精度为5/8,而其召回率 ...
- Flux 单向数据流
Flux 的核心就是一个简单的约定:视图层组件不允许直接修改应用状态,只能触发 action.应用的状态必须独立出来放到 store 里面统一管理,通过侦听 action 来执行具体的状态操作. 所谓 ...
- WebStorm下使用TypeScript
TypeScript也可使用Visual Studio 进行开发 TypeScript官网地址:(http://www.typescriptlang.org/) 1.先安装WebStorm WebSt ...
- AVAudioFoundation(6):时间和媒体表示
本文转自:AVAudioFoundation(6):时间和媒体表示 | www.samirchen.com 本文主要内容来自 AVFoundation Programming Guide. 基于时间的 ...