spring redis和缓存的应用

2023-11-15

spring redis和缓存的应用

1、在springboot项目中引入redis的包,即在pom.xml文件中导入一下依赖,刷新maven可看见右侧依赖
在这里插入图片描述
2、使用缓存前在项目启动类(Demo1Application)中开启缓存
在这里插入图片描述
3、启动redis
在这里插入图片描述
4、配置application.properties文件以连接redis
在这里插入图片描述
5、导入redis配置类

/**
 * Redis配置类
 * @author xiaoshu
 */

@Configuration
public class RedisConfig {

    // ${cache} 获取配置文件的配置信息   #{}是spring表达式,获取Bean对象的属性
    @Value("${spring.cache.ttl}")  //${spring.cache.ttl}:绝对路径
    private int ttlParams;

    /**
     * @param redisConnectionFactory
     * @功能描述 redis作为缓存时配置缓存管理器CacheManager,主要配置序列化方式、自定义
     * <p>
     * 注意:配置缓存管理器CacheManager有两种方式:
     * 方式1:通过RedisCacheConfiguration.defaultCacheConfig()获取到默认的RedisCacheConfiguration对象,
     * 修改RedisCacheConfiguration对象的序列化方式等参数【这里就采用的这种方式】
     * 方式2:通过继承CachingConfigurerSupport类自定义缓存管理器,覆写各方法,参考:
     * https://blog.csdn.net/echizao1839/article/details/102660649
     * <p>
     * 切记:在缓存配置类中配置以后,yaml配置文件中关于缓存的redis配置就不会生效,如果需要相关配置需要通过@value去读取
     */
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
        redisCacheConfiguration = redisCacheConfiguration
                // 设置key采用String的序列化方式
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(StringRedisSerializer.UTF_8))
                //设置value序列化方式采用jackson方式序列化
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(serializer()))
                //当value为null时不进行缓存
                .disableCachingNullValues()
                // 配置缓存空间名称的前缀
                .prefixCacheNameWith("demo:")
                //全局配置缓存过期时间【可以不配置】
                .entryTtl(Duration.ofMinutes(30L));
        //专门指定某些缓存空间的配置,如果过期时间【主要这里的key为缓存空间名称】
        Map<String, RedisCacheConfiguration> map = new HashMap<>();
        map.put("user", redisCacheConfiguration.entryTtl(Duration.ofSeconds(ttlParams)));
        return RedisCacheManager
                .builder(redisConnectionFactory)
                .cacheDefaults(redisCacheConfiguration)  //默认配置
                .withInitialCacheConfigurations(map)  //某些缓存空间的特定配置
                .build();
    }


    /**
     * 自定义缓存的redis的KeyGenerator【key生成策略】
     * 注意: 该方法只是声明了key的生成策略,需在@Cacheable注解中通过keyGenerator属性指定具体的key生成策略
     * 可以根据业务情况,配置多个生成策略
     * 如: @Cacheable(value = "key", keyGenerator = "cacheKeyGenerator")
     */
    @Bean
    public KeyGenerator keyGenerator() {
        /**
         * target: 类
         * method: 方法
         * params: 方法参数
         */
        return (target, method, params) -> {
            //获取代理对象的最终目标对象
            StringBuilder sb = new StringBuilder();
            sb.append(target.getClass().getSimpleName()).append(":");
            sb.append(method.getName()).append(":");
            //调用SimpleKey的key生成器
            Object key = SimpleKeyGenerator.generateKey(params);
            return sb.append(key);
        };
    }


    /**
     * @param redisConnectionFactory:配置不同的客户端,这里注入的redis连接工厂不同: JedisConnectionFactory、LettuceConnectionFactory
     * @功能描述 :配置Redis序列化,原因如下:
     * (1) StringRedisTemplate的序列化方式为字符串序列化,
     * RedisTemplate的序列化方式默为jdk序列化(实现Serializable接口)
     * (2) RedisTemplate的jdk序列化方式在Redis的客户端中为乱码,不方便查看,
     * 因此一般修改RedisTemplate的序列化为方式为JSON方式【建议使用GenericJackson2JsonRedisSerializer】
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = serializer();
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        // key采用String的序列化方式
        redisTemplate.setKeySerializer(StringRedisSerializer.UTF_8);
        // value序列化方式采用jackson
        redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
        // hash的key也采用String的序列化方式
        redisTemplate.setHashKeySerializer(StringRedisSerializer.UTF_8);
        //hash的value序列化方式采用jackson
        redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        return redisTemplate;
    }

    /**
     * 此方法不能用@Ben注解,避免替换Spring容器中的同类型对象
     */
    public GenericJackson2JsonRedisSerializer serializer() {
        return new GenericJackson2JsonRedisSerializer();
    }
}

6、自动装配cache对象
在这里插入图片描述
7、缓存注解使用
注解 作用 参数
@EnableCaching 开启缓存 /
@Cacheable 对方法返回结果进行缓存 cacheNames / value / key / keyGenerator
@CacheEvict 清空缓存 cacheNames / value / key / keyGenerator
@CachePut 保证方法被调用,又希望结果被缓存 cacheNames / value / key/ keyGenerator
在这里插入图片描述
在这里插入图片描述
8、安装redis helper并连接redis
在这里插入图片描述
9、使用RESTED查询一个用户
在这里插入图片描述
10、回到IDEA刷新缓存对象
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring redis和缓存的应用 的相关文章

随机推荐

  • Linux中执行shell脚本

    在Linux系统下运行 sh文件有三种方法 比如我在root目录下有个test sh文件 第一种 在任何路径下 输入该文件的绝对路径 root test sh就可执行该文件 当然要在权限允许情况下 chmod 777 test sh tes
  • MATLAB二维绘图(一)使用plot函数进行简单绘图

    MATLAB二维绘图 一 使用plot函数进行简单绘图 1 使用plot绘制一个简单的图形 示例 单个参数绘图 clear clc close all t 1 200 y sin t pi 100 plot y t会默认从1开始间隔为1 结
  • 3dmax KeyError: ‘ Alphabet_S‘

    python opengl加载3d模型 报错 原因 mtl文件的name改了 更新一下就可以了 KeyError Alphabet S
  • QGIS-环境配置

    学习笔记 主要用于记录学习过程 及解决问题 如有侵权 请联系我 前言 本人是一名在校学生 应学校要求 学习QT QGIS 进行简单的遥感应用实现 一 学习环境 Windows10 VS2022 QT5 14 2 QGIS3 22 14 二
  • 蓝桥杯——《123》——python组十二届国赛真题

    题目描述 小蓝发现了一个有趣的数列 这个数列的前几项如下 1 1 2 1 2 3 1 2 3 4 小蓝发现 这个数列前 1 项是整数 1 接下来 2 项是整数 1 至 2 接下来3 项是整数 1 至 3 接下来 4 项是整数 1 至 4 依
  • iPhone/iPad如何与Windows10互传文件?

    本文提供共享文件夹的方式实现 例如在win10 D盘新建一个文件夹apple 右键属性 先后在 共享 S 高级共享 D 中设置 点击共享 S 添加Guest 权限设为读取 写入 之后依次点击共享 H 完成 D 按钮 点击高级共享 结果为下图
  • 4.11+4.12实习日志

    1 Qt帮助文档路径 Qt帮助文档路径 E Qt Qt5 9 9 5 9 9 mingw53 32 bin assistant exe 2 对象树 2 1 当创建的对象在堆区时候 如果指定的父亲是QObject派生下来的类或者QObject
  • SpringBoot返回json数据

    1 pom文件
  • uni-app搜索-历史记录

    效果图
  • 自建纯内网iot平台服务,软硬件服务器全栈实践

    基于以下几个考虑 自制硬件设备 mqtt内网服务器 1 米家app不稳定 逻辑在云端或xiaomi中枢网关只支持少部分在本地计算 2 监控homeassistant官方服务有大量数据交互 可能与hass安装小米账户有关 3 硬件 原理图 l
  • 【windTerm

    前言 随着时间的推移 在我们的日常工作中对于 SSH 工具的新鲜感日益不足 好多同学都在寻求一款新奇的 好用的 SSH 客户端 虽然目前市场上现存的 MobaXterm FinalShell CRT Putty Tabby 等工具已经能够满
  • Matlab/Simulink-PSFB移相全桥电路仿真搭建

    1 前言 Simulink零基础 PSFB移相全桥电路仿真搭建 PSFB电路仿真 移相全桥短路仿真 十分钟让你掌握PSFB移相全桥电路的闭环控制 移相全桥 PSFB DC DC转换器经常用于降压高直流母线电压 并在中大功率应用中提供隔离 P
  • python 线程池threadpool(使用篇)

    最近在做一个视频设备管理的项目 设备包括 摄像机 DVR NVR等 包括设备信息补全 设备状态推送 设备流地址推送等 如果同时导入的设备数量较多 如果使用单线程进行设备检测 那么由于设备数量较多 会带来较大的延时 因此考虑多线程处理此问题
  • python定义类的时候继承object类

    区别在于python2和python3 python3继承不继承object类都没有区别 但是python2继承object类的话 可以获得更多的魔术方法 静态方法 类方法的构造 类属性的快速访问 定制类实例的实现方法 PS python2
  • Python request content 和 text 的区别

    Python request content和text的区别 text 返回的是 unicode 型的数据 一般是在网页的 header 中定义的编码形式 content 返回的是 bytes 二级制型的数据 也就是说你如果想要提取文本就用
  • (20181206)在线计算GPS周、北斗周、周内日、年积日、简化儒略日

    介绍两个用于在线计算GPS周 周内日 年积日 简化儒略日的网站 网站一 http www gnsscalendar com 使用说明 网站二 http webapp geod nrcan gc ca geod tools outils ca
  • 根据相同主键,合并其他字段值,形成一条记录(oracle)

    将具有相同的主键INVT PROD ID值 其他列值CLAUSE MEMO CLAUSE TP CD BBCK DT使用 进行合并 形成一条记录 select INVT PROD ID MAX subStr CLAUSE MEMO 3 CL
  • Echarts折线图的部分修改

    x轴刻度的隐藏显示 xAxis axisTick show true false x轴的显示隐藏 xAxis axisLine show true false y轴去掉0刻度线 yAxis min 0 scale true axisLine
  • 基于openlayer4实现多个popu展示

    这个超出屏幕能自动平移 没有试 https blog csdn net qq 27186245 article details 82227282 https blog csdn net qq 27186245 article details
  • spring redis和缓存的应用

    spring redis和缓存的应用 1 在springboot项目中引入redis的包 即在pom xml文件中导入一下依赖 刷新maven可看见右侧依赖 2 使用缓存前在项目启动类 Demo1Application 中开启缓存 3 启动