SpringCache的简介和使用教程

目录
  • 1、简介
  • 2、整合SpringCache简化缓存开发
  • 3、SpringCache的原理和不足

1、简介

Spring 从 3.1 开始定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术;

并支持使用 JCache(JSR-107)注解简化我们开发

Cache 接口为缓存的组件规范定义,包含缓存的各种操作集合; Cache 接 口 下 Spring 提 供 了 各 种 xxxCache 的 实 现 ; 如 RedisCache ,

EhCacheCache , ConcurrentMapCache 等;

每次调用需要缓存功能的方法时,Spring 会检查检查指定参数的指定的目标方法是否已经被调用过;如果有就直接从缓存中获取方法

调用后的结果,如果没有就调用方法并缓存结果后返回给用户。下次调用直接从缓存中获取

2、整合SpringCache简化缓存开发

1)引入依赖

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

2)添加配置

spring.cache.type=redis

3)测试使用缓存

@Cacheable   触发将数据保存到缓存的操作
@CacheEvict  将数据从缓存删除
@CachePut    不影响方法执行 更新缓存
@Caching     组合以上多个操作
@CacheConfig 在类级别,共享缓存的相同配置

①、主启动类上添加 @EnableCache注解,开启缓存功能

②、只需要使用注解就可以完成缓存操作

当方法的结果需要缓存到数据库,在方法上加上 @CacheEnable注解

/*
1、每一个需要缓存的数据,我们都要来指定要放到哪个名字的缓存。【相当于缓存的分区(按照业务类型来进行分区)】
2、代表当前方法的结果需要缓存,如果缓存中有,方法不调用;如果缓存中没有,会调用方法,并将方法返回的结果放入缓存
3、默认行为
    1)如果缓存中有,方法不能调用
    2)key值默认生成,缓存的名字::simplekey []
    3)缓存的value的值默认使用jdk序列化机制,将序列化后的数据存储到redis
    4)默认缓存过期时间是-1(用户过期)

    自定义:
    1)指定缓存生成的key: 指定key-> spel表达式
    2)指定缓存的数据的过期时间:配置文件指定
    3)将数据保存为json格式:

*/
@Cacheable("category")
@Override
public List<CategoryEntity> getLevel1Categorys() {
    System.out.println("getLevel1Categorys方法执行......");
    List<CategoryEntity> categoryEntities = this.baseMapper
        .selectList(new QueryWrapper<CategoryEntity>().eq("parent_cid", "0"));
    return categoryEntities;
}

第一次访问该方法时,需要访问数据库;第二次访问该方法时,则直接从缓存中获取

③、以自定义的方式设置key的名称和过期时间

@Cacheable(value = {"category"},key="'level1Categorys'")

配置文件中添加

#以毫秒为单位
spring.cache.redis.time-to-live=3600000

④、更多自定义配置

配置key,value的序列化机制:

/**
 * @author houChen
 * @date 2021/11/4 6:59
 * @Description:
 *
 * 缓存配置类
 *    @ConfigurationProperties(prefix = "spring.cache") : 只是使类中的属性和配置文件绑定,并不能注入到容器中
 *
 */
@EnableConfigurationProperties(CacheProperties.class)    //@EnableConfigurationProperties注解 可以使CacheProperties类注入到容器中
@Configuration
@EnableCaching
public class MyCacheConfig {

    @Bean
    RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties){
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
        config=config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
        config=config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));

        CacheProperties.Redis redisCacheProperties = cacheProperties.getRedis();
        if(redisCacheProperties.getTimeToLive()!=null){
            config = config.entryTtl(redisCacheProperties.getTimeToLive());
        }
        return config;
    }
}

⑤、使用@CacheEvict (去除缓存)

指定删除某个分区下的所有数据

@CacheEvict(value="category",allEntries=true)

约定:

同一个类型的数据,可以缓存在相同名称的分区中!

3、SpringCache的原理和不足

1)读模式

缓存穿透:查询一个null数据。解决:缓存空数据:cache-null-values=true

缓存击穿:大量并发请求进来同时查询一个正好过期的数据。 解决: 加锁

缓存雪崩:大量的key同时过期 解决:加随机时间

2)写模式 (如何保证缓存和数据库一致性)

1)加锁模式

2)引入canal

3)读多写多,直接去数据库查询

到此这篇关于SpringCache的简介和使用教程的文章就介绍到这了,更多相关SpringCache使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringCache之 @CachePut的使用

    使用CachePut注解,该方法每次都会执行,会清除对应的key值得缓存(或者更新), 分为以下两种情况: 如果返回值null,下次进行该key值查询时,还会查一次数据库,此时相当于@CacheEvict注解; 如果返回值不为null,此时会进行该key值缓存的更新,更新缓存值为返回的数据: 分析:情况一返回值为null: //使用Redis缓存 @Cacheable(value="Manager",key="#id") public User findById(I

  • 使用SpringCache进行缓存数据库查询方式

    目录 SpringCache进行缓存数据库查询 1.在SpringBoot的启动类上添加注解@EnableCaching 2.在service的方法上添加对应的注解 SpringCache 数据库一致性问题 缓存和数据库不一致的问题 先更新数据库,再更新缓存 高并发下redis和数据库不一致问题 SpringCache进行缓存数据库查询 1.在SpringBoot的启动类上添加注解@EnableCaching 开启SpringCache缓存支持 @SpringBootApplication //

  • SpringCache的简介和使用教程

    目录 1.简介 2.整合SpringCache简化缓存开发 3.SpringCache的原理和不足 1.简介 Spring 从 3.1 开始定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术: 并支持使用 JCache(JSR-107)注解简化我们开发 Cache 接口为缓存的组件规范定义,包含缓存的各种操作集合: Cache 接 口 下 Spring 提 供 了 各

  • python神经网络TensorFlow简介常用基本操作教程

    目录 要将深度学习更快且更便捷地应用于新的问题中,选择一款深度学习工具是必不可少的步骤. TensorFlow是谷歌于2015年11月9日正式开源的计算框架.TensorFlow计算框架可以很好地支持深度学习的各种算法. TensorFlow很好地兼容了学术研究和工业生产的不同需求. 一方面,TensorFlow的灵活性使得研究人员能够利用它快速实现新的模型设计: 另一方面,TensorFlow强大的分布式支持,对工业界在海量数据集上进行的模型训练也至关重要.作为谷歌开源的深度学习框架,Tens

  • Asp.Net Core简介与安装教程

    Asp.Net Core简介 ASP.NET Core 是一个全新的开源.跨平台框架,可以用它来构建基于网络连接的现代云应用程序,比如:Web 应用,IoT(Internet Of Things,物联网)应用和移动后端等.ASP.NET Core可以运行在 .NET Core 或完整的 .NET Framework 之上,其架构为发布到云端或本地运行的应用提供了一个最佳的开发框架,由开销很小的模块化组件构成,这就保持了你构造解决方案的灵活性.你可以跨平台地在Windows.Mac和Linux等设

  • MySQL视图简介及基本操作教程

    前言 视图是数据库系统中一种非常有用的数据库对象.MySQL 5.0 之后的版本添加了对视图的支持. 认识视图 视图是一个虚拟表,其内容由查询定义.同真实表一样,视图包含一系列带有名称的列和行数据,但视图并不是数据库真实存储的数据表. 视图是从一个.多个表或者视图中导出的表,包含一系列带有名称的数据列和若干条数据行. 视图并不同于数据表,它们的区别在于以下几点: 视图不是数据库中真实的表,而是一张虚拟表,其结构和数据是建立在对数据中真实表的查询基础上的. 存储在数据库中的查询操作 SQL 语句定

  • 苹果公司推出的新编程语言Swift简介和入门教程

    一.Swift是什么? Swift是苹果于WWDC 2014发布的编程语言,这里引用The Swift Programming Language的原话: 复制代码 代码如下: Swift is a new programming language for iOS and OS X apps that builds on the best of C and Objective-C, without the constraints of C compatibility.Swift adopts sa

  • 基于python内置函数与匿名函数详解

    内置函数 Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice() any() divmod() id() object() sorted() ascii() enumerate() input() oct() staticmethod() bin() eval() int() open() str() bool() exec() isinstance() pow() super

  • Debian 8或Debian 9(64 位)安装 .NET Core

    在 Debian 8 或 Debian 9(64 位)上安装 .NET Core 的具体步骤: 备注:必须有用户控制目录,才能通过 tar.gz 在 Linux 系统上进行安装. 1.准备一台刚安装的Debian 9系统,在远程客户端上安装XShell,进行远程连接Debian 输入:ssh Debian的外网ip地址,输入用户名和密码登录 2.安装系统组件. $sudo apt-get update $sudo apt-get install curl libunwind8 gettext a

  • Vue使用driver.js做引导页

    目录 简介及使用教程 特点: 安装 使用 引导页效果 轻量级.无依赖的原生 JavaScript 引擎,可将用户的注意力集中在整个页面上:这是一个功能强大且高度可定制的基于原生JavaScript开发的新用户引导库. 简介及使用教程 Driver.js是一个功能强大且高度可定制的基于原生JavaScript开发的新用户引导库.它没有依赖项,支持所有主要浏览器. 特点: 简单:简单易用,完全没有外部依赖 高度可定制:有一个强大的api,可以用于你希望突出显示任何内容 高亮显示:页面功能介绍上的任意

  • Angular 4依赖注入学习教程之简介(一)

    学习目录 Angular 4 依赖注入教程之一 依赖注入简介 Angular 4 依赖注入教程之二 组件服务注入 Angular 4 依赖注入教程之三 ClassProvider的使用 Angular 4 依赖注入教程之四 FactoryProvider的使用 Angular 4 依赖注入教程之五 FactoryProvider配置依赖对象 Angular 4 依赖注入教程之六 Injectable 装饰器 Angular 4 依赖注入教程之七 ValueProvider的使用 Angular

  • Dreamweaver基础教程 (一)之新功能简介

    注:Dreamweaver8和Dreamweaver2004学习基础,一样,所以看这个一样学Dreamweaver8Macromedia Dreamweaver MX 2004 (简称DW MX 2004),是Macromedia 最新开发的的HTML编辑器,用于对Web站点.Web页和 Web应用程序进行设计.编码和开发. DW MX 2004 包含有一个崭新.简洁.高效的界面,且性能也得到了改进.此外,还包含了众多新增的功能,改善了软件的易用性并使您无论处于设计环境还是编码环境都可以方便地生

随机推荐