spring cache (Redis方式)

news2024/11/25 20:22:05

目录

  • 前置
  • pom: jar
  • 配置文件: application.yml
  • MyCacheConfig.java
  • 效果图


前置

会演示springcache的使用方式
项目地址: https://gitee.com/xmaxm/test-code/blob/master/chaim-cache/chaim-spring-cache/chaim-spring-cache-redis/README.md

前置配置

本篇文章是基于上篇文章进行: spring cache (默认方式)

强调:

需要使 Redis 配置(spring.cache.redis)生效, 以及自定义配置Redis的前缀 故添加配置文件: MyCacheConfig.java
不使用MyCacheConfig.java, 需要 implements Serializable

源码部分
spring cache (默认方式) 一致, 只是实现缓存的方式不一样

关键类: org.springframework.cache.Cache
org.springframework.cache.interceptor.CacheInterceptor#invoke
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration
实现类: org.springframework.data.redis.cache.RedisCache

相关缓存文章

spring cache (默认方式)
spring cache (Redis方式)
spring cache (ehcache方式)


pom: jar

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

<!-- 自定义二级缓存存储: Redis方式 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置文件: application.yml

spring:
  redis:
    database: 2
    host: 127.0.0.1
    port: 6379
    timeout: 5000
    jedis:
      pool:
        max-active: 100
        max-wait: -1
        max-idle: 10
        min-idle: 5

  cache:
    # 程序启动时创建的缓存名称
    cache-names: chaim-name
    # 缓存类型 org.springframework.boot.autoconfigure.cache.CacheType
    type: redis
    redis:
      # 缓存前缀
      key-prefix: "CACHE:"
      # 写入 Redis 时是否使用前缀 默认:true
      use-key-prefix: true
      # 允许缓存空值 默认: true, 可也防止缓存穿透问题
      cache-null-values: true
      # 缓存过期时间, 单位: 毫秒
      time-to-live: 300000


MyCacheConfig.java

package com.chaim.spring.cache.redis.config;

import org.springframework.boot.autoconfigure.cache.CacheProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * @author Chaim
 * @date 2022/9/17 0:51
 */
@Configuration
public class MyCacheConfig {

    /**
     * 使 Redis 配置(spring.cache.redis)生效
     * 配置 Redis 自定义前缀 (可按需扩展)
     * 也可以通过: config.computePrefixWith(cacheName -> "redisProperties.getKeyPrefix()" + cacheName + ":"); 进行自定义配置, 本意是对函数式接口的实现
     *
     * @param cacheProperties Redis 配置参数
     * @return
     */
    @Bean
    public RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) {
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
        //设置key用string类型保存,value用json格式保存
        config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
        config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new Jackson2JsonRedisSerializer<>(Object.class)));

        CacheProperties.Redis redisProperties = cacheProperties.getRedis();
        // 使配置文件中所有的配置都生效
        if (redisProperties.getTimeToLive() != null) {
            config = config.entryTtl(redisProperties.getTimeToLive());
        }
        if (redisProperties.getKeyPrefix() != null) {
            // 自定义前缀: spring.cache.redis.key-prefix
            // + 入参(org.springframework.data.redis.cache.CacheKeyPrefix.compute(String cacheName))
            // + value值 @Cacheable(value = "selectPage")
            config = config.computePrefixWith(cacheName -> redisProperties.getKeyPrefix() + cacheName + ":");
            // 前缀格式: spring.cache.redis.key-prefix + value值 @Cacheable(value = "selectPage")
            // config = config.prefixKeysWith(redisProperties.getKeyPrefix());
        }
        if (!redisProperties.isCacheNullValues()) {
            config = config.disableCachingNullValues();
        }
        if (!redisProperties.isUseKeyPrefix()) {
            // 写入 Redis 时是否使用前缀: org.springframework.data.redis.cache.RedisCache.createCacheKey
            config = config.disableKeyPrefix();
        }

        return config;
    }
}


效果图

在这里插入图片描述



在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/27772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flutter 使用FFI+CustomPainter实现全平台渲染视频

Flutter视频渲染系列 第一章 Android使用Texture渲染视频 第二章 Windows使用Texture渲染视频 第三章 Linux使用Texture渲染视频 第四章 全平台FFICustomPainter渲染视频&#xff08;本章&#xff09; 文章目录Flutter视频渲染系列前言一、如何实现1、C/C实现视频采集&#xf…

3. 使用PyTorch深度学习库训练第一个卷积神经网络CNN

这篇博客将介绍如何使用PyTorch深度学习库训练第一个卷积神经网络&#xff08;CNN&#xff09;。训练CNN使用 KMNIST 数据集&#xff08;MNIST digits数据集的替代品&#xff0c;内置在PyTorch中&#xff09;识别手写平假名字符&#xff08;handwritten Hiragana characters&am…

图的二种遍历-广度优先遍历和深度优先遍历

图的广度优先遍历 1.树的广度优先遍历 这样一个图中&#xff0c;是如何实现广度优先遍历的呢&#xff0c;首先&#xff0c;从1遍历完成之后&#xff0c;在去遍历2,3,4&#xff0c;最后遍历5 &#xff0c;6 , 7 , 8。这也就是为什么叫做广度优先遍历&#xff0c;是一层一层的往…

36个数据分析方法与模型

目录一、战略与组织二、质量与生产三、营销服务四、财务管理五、人力资源六、互联网运营好的数据分析师不仅熟练地掌握了分析工具&#xff0c;还掌握了大量的数据分析方法和模型。这样得出的结论不仅具备条理性和逻辑性&#xff0c;而且还更具备结构化和体系化&#xff0c;并保…

Python连接MYSQL、SQL Server、Oracle数据入库一网打尽

描述&#xff1a; Python众所周知用来数据提取&#xff0c;通俗说用来抓数据&#xff0c;将拿到的数据进行数据清洗、加工,分析等等。而其中最重要的部分就是数据爬取、数据入库这两部分了&#xff0c;至于数据分析那就特别考察你的SQL能力&#xff0c;如果是自己设计页面&…

马齿苋多糖偶联顺铂复合物/黄连素偶联顺铂化合物/载顺铂mPEg-PGA纳米微球制备方法

小编今天整理了马齿苋多糖偶联顺铂复合物/黄连素偶联顺铂化合物/载顺铂mPEg-PGA纳米微球制备方法&#xff0c;一起来看&#xff01; 黄连素偶联顺铂化合物制备方法: 以A549/DDP细胞为研究对象,分别加入12 μg/mL的顺铂,浓度为20 μmol/L,40 μmol/L,80 μmol/L的黄连素12 μg/…

艾美捷EndoGrade卵清蛋白重组示例说明

卵清蛋白是一种优质蛋白质&#xff0c;占蛋清蛋白总量的 54%-69%&#xff0c;卵清蛋白是典型的球蛋白&#xff0c;分子量为 44.5k Da&#xff0c;属含磷糖蛋白&#xff0c;含有四个自由巯基、385 个氨基酸残基。这些氨基酸残基相互缠绕折叠形成具有高度二级结构的球型结构&…

spring cache (默认方式)

目录前置pom配置示列代码效果图部分源码关键类流程代码描述 (此类无用, 只是备注源码的逻辑)前置 什么是springcache: 通过注解就能实现缓存功能, 简化在业务中去操作缓存 Spring Cache只是提供了一层抽象, 底层可以切换不同的cache实现. 通过CacheManager接口来统一不同的缓存…

大数据培训课程MapTask工作机制

MapTask工作机制 MapTask工作机制如图4-12所示。 图4-12 MapTask工作机制 &#xff08;1&#xff09;Read阶段&#xff1a;MapTask通过用户编写的RecordReader&#xff0c;从输入InputSplit中解析出一个个key/value。 &#xff08;2&#xff09;Map阶段&#xff1a;该节点主要…

java面试强基(9)

字符串拼接用“” 还是 StringBuilder? ​ Java 语言本身并不支持运算符重载&#xff0c;“”和“”是专门为 String 类重载过的运算符&#xff0c;也是 Java 中仅有的两个重载过的运算符。 ​ 字符串对象通过“”的字符串拼接方式&#xff0c;实际上是通过 StringBuilder 调…

【MFC】一个最简单的MFC程序(9)

了解完MFC程序的流程后&#xff0c;会有 “果然不需要了解这些东西&#xff0c;直接用就可以了” 的感觉。这应该是MFC的初衷吧——按照框架来&#xff0c;集中精力做应用。但是没有了解呢&#xff1f; 最简单的MFC程序 步骤&#xff1a; 1、创建WIN32应用程序&#xff0c;空…

GoWeb 的 MVC 入门实战案例,基于 Iris 框架实现(附案例全代码)

1、什么是 MVC M 即 Model 模型是指模型表示业务规则。在MVC的三个部件中&#xff0c;模型拥有最多的处理任务。被模型返回的数据是中立的&#xff0c;模型与数据格式无关&#xff0c;这样一个模型能为多个视图提供数据&#xff0c;由于应用于模型的代码只需写一次就可以被多个…

1531_AURIX_TriCore内核架构_任务以及函数

全部学习汇总&#xff1a; GreyZhang/g_tricore_architecture: some learning note about tricore architecture. (github.com) 继续前面的内核架构学习&#xff0c;这次看一下任务以及函数的描述。 1. 在嵌入式系统中&#xff0c;内核以及函数的设计其实是有一定的模型或者说是…

day33 文件上传中间件解析漏洞编辑器安全

前言 先判断中间件&#xff0c;是否有解析漏洞&#xff0c;字典扫描拿到上传点&#xff0c;或者会员中心&#xff0c;有可能存在文件上传的地方&#xff0c;而后测试绕过/验证&#xff0c;根据实际情况判断是白名单、黑名单还是内容其他的绕过&#xff0c;绕过/验证和中间件的…

数字信号处理FFT快速傅立叶变换MATLAB实现——实例

今天做作业的时候发现要对一个信号进行FFT变换&#xff0c;在网上找了半天也没找到个能看懂的&#xff08;因为我太菜了&#xff09;&#xff0c;后来自己研究了一下&#xff0c;感觉一知半解的 起因是这道作业题 例题-满足奈奎斯特 我画了两个图&#xff0c;一个是原信号经过…

毕业论文管理系统的设计与实现

摘要 随着互联网技术的迅猛发展&#xff0c;网络给人们带来了很多便利&#xff0c;比如人们借助于网络进行相互交流、相互通信、共享信息、文件的上传下载等。在线毕业论文管理系统就是以上运用之一&#xff0c;它已经广泛的应用于目前的各大高校,但现有的这些系统都有一定的局…

如何在VScode和Jetbrain上使用备受争议的GitHub Copilot

如何在VScode和Jetbrain上使用备受争议的GitHub Copilot VSCDOE https://docs.github.com/en/copilot/quickstart 配置好之后&#xff0c;就是这种效果&#xff0c;真实太NB了&#xff01;&#xff01;&#xff01; 一个tab就把所有的代码都填充上去了&#xff01; Jetbrain…

MES系统以全流程优化为核心,实现全闭环的生产

MES系统是一个在车间中广泛使用的软件&#xff0c;它具有承上启下的功能.该系统采用企业ERP系统&#xff0c;获取计划、资源等数据&#xff0c;并与PLM、SRM、WMS等进行整合&#xff0c;获取BOM、流程等数据。该系统可对下级的控制系统进行操作&#xff0c;并将作业命令和恢复计…

Prometheus Operator 极简配置方式在k8s一条龙安装Prometheus 监控

在k8s上 Prometheus&#xff08;普罗米修斯&#xff09; 监控&#xff0c;需要部署各种组件&#xff0c;比如Prometheus、Alertmanager、Grafana。同时各个组件的配置文件也是需要到处各个配置&#xff0c;Prometheus配置监控服务时&#xff0c;你还要知道各个监控服务的地址&a…

JDBC编程

JDBC编程 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5QlM7GTR-1669108965995)(https://img1.baidu.com/it/u865461056,274570923&fm253&fmtauto&app138&fPNG?w794&h500)] 什么是JDBC Java数据库连接 Java Database Connect…