前语

SpringBoot Cache 是一个很好的缓存结构,能够兼容多种缓存完成,数据量较大的情况下,Redis 应该是最多被运用的。

本文重点介线程的几种状态绍 SpringBoot 和 Redis 整合运用的appreciate关键流程,并对其中的核心要点给出阐明,且附上相应的官方文档链接便于参阅。

增加 Maven 依靠

在项目 pom.xml缓存清理 中增加如下装备:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
  <version>${spring-boot.version}</version>
</dependency>

启用缓存

在项目 发动类 中增加如下注解:

@EnableCaching

装备缓缓存视频合并app

装备 Redis 衔接信息

Redis 衔接redis面试题信息包含地址、端口、超时时多线程的运用场景间(秒)和衔接池等,能够根据需求选取若redistribute干装备即可。

在项目 application.yml 中增加如下装备:

spring:
  redis:
    host: ${host}
    port: ${port}
    timeout: 3000
    lettuce:
      pool:
        enabled: true
        max-active: 30

SpringBoot 默许使缓存视频兼并app用的 Redis 客户端是 lettuce,不是 Jedis。假如需求运用衔接池的线程数越多越好吗话,还需求多线程面试题额外增加一个 Maven 依靠:

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-pool2</artifactId>
  <version>${commons-pool2.version}</version>
</dependency>

Redis 衔接装备特点参阅,留意特点线程和进程的差异是什么前缀为 spring.rappr线程数是什么oachedis.*。

装备缓存信息

Springredis分布式锁Boot 支apple撑多个不同称号的缓存,缓存称号需求预先配线redistribute程安全置,还能够指定缓存的过期缓存整理时刻。rediscover关于 Redis 而言,某个称号的缓存实际上就多线程是什么意思是 Redis 中一缓存整理个或多个以该称号为redis分布式锁前缀的 Key,缓存的过期时刻指的便是这部分 Key 的过期时刻。

在项redis数据结构application.ymlapprove增加如下装备:

spring:
  cache:
    cache-names: "cache1,cache2"
    redis:
      time-to-live: "10m"

缓存装备特点参阅,留意特点前缀为 spring.cache.redis.*。

默许情况下,所有缓存的过期时刻都线程安多线程编程是相同的。假如需求rediscover对不同的缓存设置不同的过期时刻,能够appreciate自己扩展完成,参阅官方示例。

运用缓存

@Cacredis的五种数据类型heable

SappetitepringBoot Cache 能够帮助咱们自动缓存某个办法的结redis的五种数据类型redis集群果(返回值),运用时咱们只需求在办法上面增加注解 @Cacheable,并且指多线程的运用场景定缓存称号即可:

@Cacheable(cacheNames = {"cos::url"})
public String generatePresignedUrl(String name) {
  return ...;
}

缓存称号为 cos::url,调用办法 generatePresignedUrlredis耐久化 时,SpringBoot Cache 会自动查看 Redis 中是否现已缓存过该办法的成果,假如现已缓存过,则直接多线程的完成方法运用缓存中多线程的成果返回,该办法不会履行;假如没有多线程是什么意思缓存过,会履行该办法获取成果,缓存成果之app缓存的视频在哪earance后再返回给调用appearance者。

Ca缓存英文ching多线程的运用场景

Key Generatio线程数越多越好吗n

Redis 查看或缓存成果时均需求一个 Key,SpringBoredis耐久化ot Cache 运用 缓存称号(CacheName,如:cos::url)和 参数值(P线程数是什么arameterValue,如:value1)生成 Key,规矩redis分布式锁如下:

  • 假如办法没有参数,Key 为 C线程是什么意思acheName::SimpleKey [],即:cos:redis的五种数据类型:url::SiredistmpleKey [];
  • 假如办法只有一个参数,Key 为 CacheName::ParameterValuapproache,即:cos::url::value1;
  • 假如办法有两个或两个以上的参数,Key 为 CacheName::SimpleKey [ParameterValue1,ParameterValue2,…],即:cos::url::SimpleKey [value1,value2];

Defaappleult Key Generation

sync

syapprovenc 是注解 @Cacheable 的一个特点,值能够是 true 或 false:

假如 sync = false(默许),线appearance环境下调用方APP法 generatePresi缓存的视频在哪gnedUapp多线程并发中线程的状态earrl 时,Redis 没有缓存成果的情况下,办法可能会被履行屡次;
假如 sync = trredistue,Redis 没有缓存成果的情况下,办法 generateredis分布式锁PresignedUrl 只会被履行一次。

Conditional Caching

con多线程并发dappearanceition

conditio线线程池面试题程安全n缓存视频合并app 是注解 @appleCach线程数越多越好吗eable 的一个特点,它的值是一个 SpEL 表达式,表达式的计算成果能够是 true 或 false:

假如表达式的计算成果是 true,表示缓存办法成果;
假如表达缓存清理式的计算成果是 false,表示不缓存办法成果;

Conditional线程 Caching

SpEL 表达式能够运用办法的参数值,多线程应用场景例子也能够调用该办法地点 Bean 的其它办法,如:

#name.length() < 32

办法参数 name 的参数线程和进程的差异是什么值长度小于 32 时,办法成果才会被缓存;

condition = "#root.target.check(#name)"

check() 有必要是公开的(public),且返回值有必要是布尔类型(B多线程是什么oole缓存视频怎样转入相册an);只有 check() 返回值为 t多线程面试题ru线程撕裂者e 时,办法成果才会被缓存。

Available Cachi缓存清理ng SpEL Evaluation Context

运用缓存英文限制

假如多线程并发中线程的状态办法 generatePresignedUrl 被坐落一个 Beanappointment其它办法调用时,缓存不会收效;也便是说,办法 gapproveeneratePresignedUrl 有必要被其它 Bean 的办法调用时,缓存才会收效。原因主要是和 Sprin多线程是什么g 的代理机制有关,详情可redis耐久化以参阅:Spring Credis耐久化ache @Cacheable – not线程 working whi缓存视频兼并apple calling from another method of多线程是什么意思 the same bean。

SpringBoot Cach缓存视频合并e 还支撑其它注解,能够参阅 D多线程并多线程是什么eclarativ多线程是什么意思e Annotation-based Caching。

Rediredis数据结构sTemplate

假如咱们需求线程数越多越好吗自己完成redisRedis集群缓存逻辑,SpringBoot Cache 供给了一个封装 Redis 常用操作的工具线程是什么意思模板类:RedisTemplate,并且会创建好它的实例,运用时直接线程和进程的差异是什么注入即可:

@Autowired
private StringRedisTemplate template;
@Autowired
private RedisTemplate<String, String> template2;
@Autowired
private RedisTemplate<String, Integer> template3;

RedisTemplate 支撑泛型,咱们能够根据自己的需求注入一个或多个redis的五种数据类型实例;假如键值的类型都是 Str多线程运用场景比如ing,能够直接运用 StringRedisTemplate

结语

SpringBoot 整合 Redis 运用时,假如仅仅是需求读取或缓存数据,直接运用注解的方redis面试题法相较于运用 ReRedisdisTemplate 的方法,能够避免大量的缓存冗余代码,更多地关注业务逻辑;但是缺陷也比较明显,操缓存视频怎样转入相册控性比较差。实际运用时,能够灵活结合两者,优先运用注applicationapprove解方法;注解方法受限时,再结appetite合 RedisTemplatappetitee 作为补充。