0

0

springboot缓存之redis整合的方法

WBOY

WBOY

发布时间:2023-05-30 13:22:12

|

895人浏览过

|

来源于亿速云

转载

    默认使用的是ConcurrentMapCacheManager的ConcurrentMapCache作为缓存组件。

    使用ConcurrentMap的时候,是将数据保存在ConcurrentMap<Object,Object>当中的。

    实际在开发过程中,我们经常使用的,是一些缓存中间件的。

    比如我们经常使用的redis,memcache,包括我们使用的ehcache,等等,我们都是使用一些缓存中间件。

    我们之前讲解原理的时候,也发现了,springboot是支持很多的缓存配置的:

    如下图所示的:

    springboot缓存之redis整合的方法

    默认开始的配置的是:SimpleCacheConfiguration。

    其他的缓存是在什么时候开启呢?

    我们可以ctrl+n搜索一下,这些配置类,然后进去看看他们的conditional条件:

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    这些都是表示,当你导入了相应的包的时候,这些配置才会是生效的哦。

    整合redis作为缓存

    如果有不会redis这个技术的同学,尚硅谷当中有周阳老师发布的redis系列的讲解视频。或者大家可以最快地访问redis的官方网站,来进行学习,redis.cn是redis学习的中文网。

    安装redis

    搜索redis镜像

    springboot缓存之redis整合的方法

    这个是连接国外的仓库,速度是比较慢的。

    我们推荐使用docker 中国。

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    docker pull registry.docker-cn.com/library/redis

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    启动redis镜像

    docker run -d -p 6379:6379 --name myredis [REPOSITORY]
    docker ps

    为了测试,打开redis的连接工具。

    redis desktop manager

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    测试redis常用的数据操作

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    redis操作list

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    redis的set操作

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    引入redis的starter

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    配置redis

    springboot缓存之redis整合的方法

    简单说下redis原理

    我们引入了redis的starter之后,redisAutoConfiguration就起作用了。

    springboot缓存之redis整合的方法

    这个RedisAutoConfiguration是给容器当中加入了两个组件:

    springboot缓存之redis整合的方法

    给容器中加入的组件,一个是叫做RedisTemplate,一个是叫做StringRedisTemplate,两个东西。

    这两个东西就是用来操作redis的。

    这就跟大家以前用的jdbcTemplate一样,用来操作数据库的东西。

    这就是spring用来简化操作redis的两个template,如果在程序当中想要用这两个东西,就自动注入就可以了。

    springboot缓存之redis整合的方法

    redis测试

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    redis操作list:

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    redis测试保存对象

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    这些看不懂的玩意,全部都是序列化的结果。

    redisTemplate默认的序列化规则

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    默认的序列化器,就是使用的JdkSerializationRedisSerializer。

    默认的序列化器,就是使用的JDK的序列化器。

    我们来切换成json的序列化器,就可以了。

    redis配置

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    在测试类当中,自动注入我们自己配置的redisTemplate。

    springboot缓存之redis整合的方法

    然后我们再次测试保存对象。

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    这就说明了,我们的序列化器修改成功了。

    这就说明白了,如果我们后面要保存对象的时候,我们经常是要修改序列化器的。

    springboot缓存之redis整合的方法

    测试缓存

    springboot缓存之redis整合的方法

    我们之前使用的是ConCurrentMap的缓存管理器的。
    这个缓存管理器,帮我们来创建出来缓存组件的。
    缓存组件来实际给缓存中,进行CRUD的工作的。

    Magic AI Avatars
    Magic AI Avatars

    神奇的AI头像,获得200多个由AI制作的自定义头像。

    下载

    现在我们引入了redis之后,会发生什么样的效果呢?
    我们还是在application.properties当中将debug=true,这样就可以将自动配置报告来打开。
    这样的时候,我们重新启动我们的程序,在控制台当中,我们去搜索一下。
    看看是哪一个自动配置类,是生效的呢?

    springboot缓存之redis整合的方法

    原来默认开启的是:SimpleCacheConfiguration的。

    现在我们引入了redis相关的starters之后,程序默认开启的是RedisCacheConfiguration了。

    springboot缓存之redis整合的方法

    启动程序,直接进行测试就可以了。

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    说明第一次查询的时候,是查询数据库了。

    第二次查询的时候,控制台是没有任何输出的,说明是查询了缓存了。

    缓存默认是只有redis开启的。

    那么肯定是在redis当中了。

    我们可以查看一下:

    springboot缓存之redis整合的方法

    这个说明一个问题,在k和v都是object的时候,默认保存对象的时候,利用序列化来保存的。我们是想要让redis自动保存为json的。

    我们应该怎么做呢?

    我们先来分析一下这些过程当中的原理。

    1、我们是引入了redis的starter,所以我们的cachemanager变为了rediscachemanager了,

    2、默认创建的rediscachemanager在操作我们的数据的时候,传入了一个redistemplate的东西。

    springboot缓存之redis整合的方法

    3、这个redistemplate是redisautoconfiguration帮我们创建的。这个redistemplate默认使用的序列化机制是jdkserializationredisserializer的。这个就是相当于,redis默认给我们防止的redisCacheManager还不太符合我们的要求的。

    我们怎么办呢?

    我们应该自定义CacheManager的。

    自定义redisCacheManager

    springboot缓存之redis整合的方法

    这个时候,我们再启动项目,来进行测试,这个时候,我们就可以看到redis当中的结果,是我们想要的了。

    springboot缓存之redis整合的方法

    韫秋下次面试的时候,就可以问那些想要来软件园的人,说,你知道redis starter保存对象的时候,redisTemplate默认的序列化规则是什么吗?

    如果我们在使用redis的过程中,我们想要修改默认的序列化规则,我们应该怎么做呢?

    我们可以自定义redisCacheManager,然后自定义redisTemplate,在redisTemplate当中传入json相关的序列化器的哦。

    springboot缓存之redis整合的方法

    遗留的小问题

    数据库

    我们在数据库当中的,department表当中,放进去一条数据:

    springboot缓存之redis整合的方法

    mapper

    我们写一个对应的department操作的mapper。

    springboot缓存之redis整合的方法

    service

    我们再写一个对应的service

    springboot缓存之redis整合的方法

    controller

    springboot缓存之redis整合的方法

    启动项目测试

    springboot缓存之redis整合的方法

    然后我们看看redis当中,是否是有数据的呢?

    springboot缓存之redis整合的方法

    我们看了,redis当中dept相关的数据,是有的。

    我们第二次来查询dept的时候,就应该走缓存redis了。

    但是我们第二次去查询的,时候,出现了下面的错误。

    错误

    springboot缓存之redis整合的方法

    上面报错的意思就是说,不能够去读取json的。

    因为是要把部门的json对象,转换成为员工的json对象,这是不可以的。

    这个就是因为,我们放置的redisCacheManager是操作员工的。

    springboot缓存之redis整合的方法

    所以,现在我们看到的这个效果,就是很神奇的哦。

    缓存的数据,能够存入到redis当中。

    但是我们第二次从缓存中查询的时候,就不能够反序列化回来了。

    原来就是,我们存的是dept的json的数据,我们的cachemanager,默认是用employee的template来操作redis的。

    这个东西只能够将employee的数据反序列化过来的。

    解决错误

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    这个时候,就等于有了2个redisCacheManager了,我们用哪个呢?

    我们在service当中,是可以指定的。

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    然后我们重启项目,结果是报错了:

    springboot缓存之redis整合的方法

    如果,我们是有多个cacheManager的话,我们一定是要把某一个cacheManager作为,我们的默认配置的缓存管理器的。

    比如,我们可以进行下面的操作,来修复这个启动报错的内容的呢:

    springboot缓存之redis整合的方法

    重新启动进行项目测试

    这个时候,看看,我们在进行第二次部门查询的时候,能不能够正常地,成功地,从redis当中反序列化地读取到,我们的部门信息呢?

    springboot缓存之redis整合的方法

    springboot缓存之redis整合的方法

    这个时候,我们就发现,不管是员工还是部门,我们都是可以从redis当中反序列化成功查询的。

    这个就是很完美的啦。

    编码的方式操作缓存

    前面我们说的,全部都是使用注解的方式,来给缓存当中,来放置数据的。

    但是,在开发当中,我们经常会,遇到这样的情况。

    就是,我们开发进行到某个阶段,我们是需要将一些数据,放到缓存当中的。

    我们是需要,使用编码的方式,来操作缓存的。

    比如我们在查询出来了部门的信息之后,就希望把这个信息,放入到redis当中。

    我们可以把部门的cacheManager注入进来。

    springboot缓存之redis整合的方法

    然后我们在编码的过程中,可以通过操作这个cacheManager来获取缓存,

    然后,再操作缓存组件,来对数据进行增删改查。

    springboot缓存之redis整合的方法

    我们对上面的代码,启动项目进行测试,发现是可以的,是成功地给redis当中放进去了数据的:

    springboot缓存之redis整合的方法

    热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    WorkBuddy
    WorkBuddy

    腾讯云推出的AI原生桌面智能体工作台

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    C# ASP.NET Core微服务架构与API网关实践
    C# ASP.NET Core微服务架构与API网关实践

    本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

    76

    2026.03.11

    Go高并发任务调度与Goroutine池化实践
    Go高并发任务调度与Goroutine池化实践

    本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

    38

    2026.03.10

    Kotlin Android模块化架构与组件化开发实践
    Kotlin Android模块化架构与组件化开发实践

    本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

    83

    2026.03.09

    JavaScript浏览器渲染机制与前端性能优化实践
    JavaScript浏览器渲染机制与前端性能优化实践

    本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

    97

    2026.03.06

    Rust内存安全机制与所有权模型深度实践
    Rust内存安全机制与所有权模型深度实践

    本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

    223

    2026.03.05

    PHP高性能API设计与Laravel服务架构实践
    PHP高性能API设计与Laravel服务架构实践

    本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

    458

    2026.03.04

    AI安装教程大全
    AI安装教程大全

    2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

    169

    2026.03.04

    Swift iOS架构设计与MVVM模式实战
    Swift iOS架构设计与MVVM模式实战

    本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

    246

    2026.03.03

    C++高性能网络编程与Reactor模型实践
    C++高性能网络编程与Reactor模型实践

    本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

    34

    2026.03.03

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    进程与SOCKET
    进程与SOCKET

    共6课时 | 0.4万人学习

    Redis+MySQL数据库面试教程
    Redis+MySQL数据库面试教程

    共72课时 | 7.1万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号