博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis(六)Spring Boot与缓存
阅读量:3907 次
发布时间:2019-05-23

本文共 1856 字,大约阅读时间需要 6 分钟。

JSR107规范

Java Caching定义了5个接口

1. CachingProvider

定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可以在运行期间访问多个CachingProvider。【缓存提供者】

2. CacheManager

定义了创建、配置、获取、管理和控制多个唯一命名的Cache,这些Cache存在于CacheManage的上下文中,一个CacheManage只被一个CachingProvider拥有。【缓存管理器】

3. Cache

类似于Map的数据结构并临时储存以key为索引的值,一个Cache仅仅被一个CacheManager所拥有。【缓存】

4. Entry

存储在Cache中的key-value对。

5. Expiry

存储在Cache的条目有一个定义的有效期,一旦超过这个时间,就会设置过期的状态,过期无法被访问,更新,删除。缓存的有效期可以通过ExpiryPolicy设置。【缓存过期时间】

它们之间的关系如下图:

Spring的缓存抽象

包含了一些JSR107的注解

注解

功能

Cache

缓存接口,定义缓存操作,实现有:RedisCacheEhCacheConcurrentMapCache

CacheManager

缓存管理器,管理各种缓存(Cache)组件

@Caching 重新组合要在方法上应用的多个缓存操作

@Cacheable

针对方法配置,根据方法的请求参数对其结果进行缓存

@CacheEvict

清空缓存

@CachePut

保证方法被调用,即方法一定会被执行,又希望结果被缓存 update调用,将信息更新缓存

@EnableCaching

开启基于注解的缓存

KeyGenerator

缓存数据时key生成的策略

serialize

缓存数据时value序列化策略

缓存抽象整合项目

1. 实体类实现序列化 

 

public class xxx implements Serializable { ....}

2. 导入依赖

org.springframework.boot
spring-boot-starter-cache

3. 主配置类使用@EnableCaching开启缓存

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

4. 将缓存注解写到service层

将方法的运行结果进行缓存,以后要是再有相同的数据,直接从缓存中获取,不用调用方法。

CacheManager管理多个Cache组件,对缓存的真正CRUD操作在Cache组件中,每个缓存组件都有自己的唯一名字。

如:

在Redis客户端通过value::key获取

@Cacheable(value = "user",key = "#id")    public User getById(String id) {        return userMapper.getById(id);}

补充介绍一下注解的几种属性

属性

用途
CacheName/value(二选一)

指定存储缓存组件的名字

value 缓存的名字,必须指定至少一个

key

缓存数据使用的key,可以使用它来指定。默认是使用方法参数的值

编写Spel表达式

#id 参数id的值, #a0/#p0/#root.args[0] 输入的第一个参数

keyGenerator

key的生成器,自己可以指定key的生成器的组件id

注意:key和keyGenerator 二者选一使用

cacheManager

指定Cache管理器,或者cacheReslover指定获取解析器

condition

指定符合条件的情况下才缓存
unless

否定缓存,unless指定的条件为true,方法的返回值就不会被缓存,可以获取到结果进行判断

sync

是否使用异步模式,unless不支持

然后就可以进行测试啦!

转载地址:http://xpqen.baihongyu.com/

你可能感兴趣的文章
BinarySearch
查看>>
二分查找(Binary Search)需要注意的问题,以及在数据库内核中的实现
查看>>
Arithmetic Progression
查看>>
Bisearch Summary
查看>>
Python - abs vs fabs
查看>>
Python integer ranges
查看>>
Python - Search Insert Position
查看>>
Find a Peak Element
查看>>
Find the Minimum Element in A sorted and Rotated Array
查看>>
BAT Levels
查看>>
Netflix Architecture
查看>>
Mobile architecture
查看>>
Why Netflix chose NGINX
查看>>
Division Operators
查看>>
Bitwise operation and usage
查看>>
What are bitwise operators?
查看>>
Python bitwise operator
查看>>
Recursion Vs Iteration
查看>>
Python List Pop
查看>>
recursion versus iteration
查看>>