实现外部缓存-Redis

目录

实现

RedisTemplate

RedisTemplate的序列化

RedisSerializer

创建Redis缓存配置类

测试使用

创建配置类

创建注解测试实体

创建配置文件

创建单元测试类进行测试


  • 实现

  • RedisTemplate

  • XXXTemplate 是 Spring 的一大设计特色,其中,RedisTemplate 功能是提供对 Redis 的支持
  • RedisTemplate 是 Spring Boot 访问 Redis 的核心组件,是 SpringBoot 集成 Redis 的客户端方式
  • 它的底层通过 RedisConnectionFactory 对多种 Redis 驱动进行集成,上层通过 XXXOperations 提供丰富的 API,并结合 Spring 基于泛型的 bean 注入,为开发提供了极大的便利

  • RedisTemplate的序列化

  • 默认情况下,RedisTemplate使用的是JDK序列化
  • StringRedisTemplate使用的String的序列化,可读性好,将k和v都作为String进行处理
  • RedisTemplate把k和v经过了序列化存到了redis,k和v是序列化的内容,不能直接识别
  • 因此为了提高可读性,可以自定义序列化形式
  • 这里可设置key使用String序列化

  • 打开redis服务,使用Postman传入数据

  • 使用redis客户端查看数据,因此可看到String序列化的key以及未String序列化的value

  • 同理可将key和value都设置为String形式的序列化

  • 再次测试,redis客户端查看到的key和value均为String序列化的数据

  • RedisSerializer

  • RedisTemplate中的几个角色:
    • RedisSerializer:由于与Redis服务器的通信一定是使用字节数组完成的,所以RedisSerializer是将Java对象编码解码的组件
    • RedisOperations:封装了一些Redis操作
    • XXXOperations:封装了指定类型或功能的数据的操作,如ZSetOperations
  • RedisSerializer提供了两个方法,一个用于序列化,一个用于反序列化
  • 并且它提供了一个泛型T,代表该序列化器处理的类型

  • 它的实现类有下面这些:

  • 从实现类的名字可以看出,其中有将对象转换为json的,有使用JDK自带的序列化机制进行序列化反序列化的,有专门处理String的...
  • 默认情况下,RedisTemplate使用JdkSerializationRedisSerializer,也就是JDK默认的序列化机制来进行序列化
  • RedisTemplate的成员属性中有如下和序列化器相关的属性:

  • 从这里可以看出,可以对RedisTemplate进行设置,在不同的情况下使用不同的序列化器
  • 如在hash值的序列化上使用Jdk序列化器,而在普通的值上使用字符串序列化器
  • 而RedisCacheManager 是 Spring Boot 提供的一个缓存管理器,它基于 Redis 缓存提供程序
  • RedisCacheManager 允许将 Spring Boot 应用程序与 Redis 集成,从而提高应用程序的性能
  • RedisCacheManager 实现了 Spring 的 CacheManager 接口,这意味着它可以与 Spring 的缓存抽象一起使用
  • 可以使用 Spring 的 @Cacheable、@CachePut 和 @CacheEvict 注释来配置缓存策略,并使用 RedisCacheManager 来管理缓存
  • RedisCacheManager 还提供了一组管理缓存的方法,例如 clear、evict 等
  • 创建Redis缓存配置类

  • 默认的RedisTemplate和RedisCacheManager使用JDK的序列化方式,可以自定义为string和json序列化
  • 测试使用

  • 创建配置类

  • 创建注解测试实体

  • 创建配置文件

  • 创建单元测试类进行测试

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

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

相关文章

【基础算法】——双指针算法

文章目录 一、算法原理二、算法实战1. 力扣283 移动零2. 力扣1089 复写零3. 力扣15 三数之和4. 力扣18 四数之和 三、总结 一、算法原理 双指针算法是指在遍历对象的过程中不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(…

Tomcat服务器下载安装及配置教程(IDEA中使用Tomcat)

目录 友情提醒第一章、Tomcat下载与安装1.1)Tomcat介绍1.2)官网下载 第二章、Tomcat配置环境变量2.1)windows环境变量配置2.2)验证Tomcat配置是否成功2.3)报错解决 第三章、IDEA整合Tomcat3.1)打开IDEA开发…

【深度学习笔记】随机梯度下降法

本专栏是网易云课堂人工智能课程《神经网络与深度学习》的学习笔记,视频由网易云课堂与 deeplearning.ai 联合出品,主讲人是吴恩达 Andrew Ng 教授。感兴趣的网友可以观看网易云课堂的视频进行深入学习,视频的链接如下: 神经网络和…

springboot项目创建整个完成过程和注意事项

1:application.yml文件配置 server:port: 8088servlet:context-path: /test spring:datasource:name: text #????url: jdbc:mysql://localhost:3306/dsdd?serverTimezoneGMT&useUnicodetrue&characterEncodingutf-8&useSSLtrueusername: root #…

Rust 数据类型 之 结构体(Struct)

目录 结构体(Struct) 定义与声明 结构体定义 结构体实例 结构体分类 单元结构体(Unit Struct) 元组结构体(Tuple Struct) 具名结构体(Named Struct) 结构体嵌套 结构体方法…

【后端面经】前言汇总(0)

文章目录 一、机会是留给有准备的人二、课程设计第一部分:微服务架构第二部分:数据库与 MySQL第三部分:消息队列第四部分:缓存所谓缓存用得好,性能没烦恼。第五部分:NoSQL三、总结一、机会是留给有准备的人 近两年互联网行业增速放缓,ChatGPT 又引发了一波新的 AI 浪潮,…

69. x 的平方根

69. x 的平方根 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。 示…

线段树模板+例题

线段树是一种二叉搜索数,一般用来实现动态的区间询问,与树状数组有相似之处,但是能用树状数组实现的操作都能用线段树实现。 一般线段树用于以下几种操作: 建树,单点修改,区间查询,区间修改。…

VSCode 常用插件集合

目录 一、基础插件二、AI三、Rust插件 一、基础插件 Chinese (Simplified) (简体中文) 此中文(简体)语言包为 VS Code 提供本地化界面。 Native Debug 本地VSCode调试器。 CodeLLDB 一个由LLDB提供支持的本地调试器。调试c, Rust等编译语言…

【Android实现 资源路径/手机内存/网络文件 下的视频播放】

业务场景:安卓实现播放视频的功能,支持播放不同类型资源下的视频,下面在使用中封装了一个方法,可以根据需要修改调用 一、直接上封装方法 void videoReady(String videoPath ,String videoType){switch (videoType) {case "…

使用ffmpeg合并视频遇到的坑

下面以Linux环境介绍为主 1.ffmpeg可执行命令不同的环境是不同的,Linux在执行命令前还需要授权。 2.合并视频命令: 主要命令: {} -f concat -auto_convert 0 -safe 0 -i {} -y -c:v copy 坑一:其中第一个花括号替换的是可执行命令所在的…

【GitOps系列】使用Kustomize和Helm定义应用配置

文章目录 使用 Kustomize 定义应用改造示例应用1.创建基准和多环境目录2.环境差异分析3.为 Base 目录创建通用 Manifest4.为开发环境目录创建差异 Manifest5.为预发布环境创建差异 Manifest6.为生产环境创建差异 Manifest 部署 Kustomize 应用部署到开发环境部署到生产环境 使用…

c++ 的引用

c 引用 引用的概念 应用不是重新去定义一个变量,而是给变量取别名。 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间 比如: int a…

OpenCv (C++) 使用矩形 Rect 覆盖图像中某个区域

文章目录 1. 使用矩形将图像中某个区域置为黑色2. cv::Rect 类介绍 1. 使用矩形将图像中某个区域置为黑色 推荐参考博客:OpenCV实现将任意形状ROI区域置黑(多边形区域置黑) 比较常用的是使用 Rect 矩形实现该功能,代码如下&…

打造i-SMART智能网联平台,亚马逊云科技助力上汽快速出海

当前在各大外资车企不断加码在华投资之际,越来越多的中国汽车品牌纷纷开始走出国门,加速推进全球化业务,将赛道转至更为广阔的海外市场。 上汽海外出行科技有限公司(简称“上汽海外出行”)成立于2018年,承…

linux高并发web服务器开发(web服务器)18_函数解析http请求, 正则表达式,sscanf使用,http中数据特殊字符编码解码

pdf详情版 01 学习目标 编写函数解析http请求 ○ GET /hello.html HTTP/1.1\r\n ○ 将上述字符串分为三部分解析出来编写函数根据文件后缀,返回对应的文件类型sscanf - 读取格式化的字符串中的数据 ○ 使用正则表达式拆分 ○ [^ ]的用法通过浏览器请求目录数据 ○…

【unity之IMGUI实践】单例模式管理数据存储【二】

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

每日一题——迷宫问题(I)

迷宫问题——I 题目链接 思路 创建二维数组,并实现输入 首先输入二维数组的行和列: int n, m; scanf("%d%d", &n, &m);然后动态开辟二维数组: 注:对动态开辟还不太了解的同学可以看看👉C语言—…

CPU密集型和IO密集型任务的权衡:如何找到最佳平衡点

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、CPU密集型与IO密集型3.1、CPU密集型3.2、I/O密…

opencv-15 数字水印原理

最低有效位(Least Significant Bit,LSB)指的是一个二进制数中的第 0 位(即最低位)。 最低有效位信息隐藏指的是,将一个需要隐藏的二值图像信息嵌入载体图像的最低有效位,即将载体图像的最低有效…