目 录CONTENT

文章目录

springboot框架:springcache与redis

路口、下车
2025-08-22 / 0 评论 / 0 点赞 / 19 阅读 / 0 字
温馨提示:
本文最后更新于2025-08-22,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

springcache与redis

一般缓存直接用springcache,有时候也用mybatis二级缓存对接redis,特殊要求的缓存单独写redis。

缓存读写问题

1.写问题
数据库和缓存一致性,springcache没有管
2.读问题

  • 穿透:配置文件增加cache-null-values: true,缓存空值
  • 雪崩:配置文件增加time-to-live: 3600s,增加过期时间,与随机过期时间差不多(随机时间也有可能增加大量失效的概率),
  • 击穿: @Cacheable(value = "user",key = "'getUser'",sync = true) 增加sync = true,本地同步锁

使用

依赖

    <!--redis-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!--Spring Cache,使用注解简化开发-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>

配置

spring:
  redis:
    host: 192.168.171.132
    port: 6379
    password: 123456
    lettuce:
      pool:
        max-active: 10
        max-idle: 10
        min-idle: 1
        time-between-eviction-runs: 10s
  cache:
    type: redis # 使用redis作为缓存
    redis:
      time-to-live: 3600s # 过期时间
      #如果指定了前缀就用我们指定的前缀CACHE_,没有默认就用缓存的名字作为前缀,会导致自己在@Cacheable里设置的名字失效,所以这里不指定
      key-prefix: CACHE_ 
      # key值加前缀
      use-key-prefix: true
      #是否缓存空值,防止缓存穿透
      cache-null-values: true

添加配置类

要求springboot版本2.3以后。修改版本

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
  <properties>
          <java.version>1.8</java.version>
          <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
          <com.alibaba.cloud>2.2.6.RELEASE</com.alibaba.cloud>
      </properties>

代码中使用

//查询时    
@Cacheable(value = "user",key = "'getUser'",sync = true)
//删除
@CacheEvict(value = "category", key = "'level1Categorys'")
//新增
@CachePut(value = "category", key = "'level1Categorys'")
0

评论区