当前位置: 首页 > article >正文

SpringBoot使用Redis缓存

耗时一月收集的学习资料,强烈建议学习一下https://pan.quark.cn/s/b5638e1405d7正文开始1pom.xml引入jar包如下dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency2修改项目启动类增加注解EnableCaching开启缓存功能如下packagespringboot;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cache.annotation.EnableCaching;importorg.springframework.scheduling.annotation.EnableScheduling;SpringBootApplicationEnableSchedulingEnableCachingpublicclassSpringbootApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SpringbootApplication.class,args);}}3application.properties中配置Redis连接信息如下#Redis数据库索引默认为0 spring.redis.database0#Redis服务器地址 spring.redis.host172.31.19.222#Redis服务器连接端口 spring.redis.port6379#Redis服务器连接密码默认为空 spring.redis.password# 连接池最大连接数使用负值表示没有限制 spring.redis.pool.max-active8# 连接池最大阻塞等待时间使用负值表示没有限制 spring.redis.pool.max-wait-1# 连接池中的最大空闲连接 spring.redis.pool.max-idle8# 连接池中的最小空闲连接 spring.redis.pool.min-idle0# 连接超时时间毫秒 spring.redis.timeout04新建Redis缓存配置类RedisConfig如下packagespringboot.config;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.cache.CacheManager;importorg.springframework.cache.annotation.CachingConfigurerSupport;importorg.springframework.cache.annotation.EnableCaching;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.data.redis.cache.RedisCacheManager;importorg.springframework.data.redis.connection.RedisConnectionFactory;importorg.springframework.data.redis.core.RedisTemplate;importorg.springframework.data.redis.core.StringRedisTemplate;importorg.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;importcom.fasterxml.jackson.annotation.JsonAutoDetect;importcom.fasterxml.jackson.annotation.PropertyAccessor;importcom.fasterxml.jackson.databind.ObjectMapper;/** * Redis缓存配置类 * author szekinwin * */ConfigurationEnableCachingpublicclassRedisConfigextendsCachingConfigurerSupport{Value(${spring.redis.host})privateStringhost;Value(${spring.redis.port})privateintport;Value(${spring.redis.timeout})privateinttimeout;//自定义缓存key生成策略// Bean// public KeyGenerator keyGenerator() {// return new KeyGenerator(){// Override// public Object generate(Object target, java.lang.reflect.Method method, Object... params) {// StringBuffer sb new StringBuffer();// sb.append(target.getClass().getName());// sb.append(method.getName());// for(Object obj:params){// sb.append(obj.toString());// }// return sb.toString();// }// };// }//缓存管理器BeanpublicCacheManagercacheManager(SuppressWarnings(rawtypes)RedisTemplateredisTemplate){RedisCacheManagercacheManagernewRedisCacheManager(redisTemplate);//设置缓存过期时间cacheManager.setDefaultExpiration(10000);returncacheManager;}BeanpublicRedisTemplateString,StringredisTemplate(RedisConnectionFactoryfactory){StringRedisTemplatetemplatenewStringRedisTemplate(factory);setSerializer(template);//设置序列化工具template.afterPropertiesSet();returntemplate;}privatevoidsetSerializer(StringRedisTemplatetemplate){SuppressWarnings({rawtypes,unchecked})Jackson2JsonRedisSerializerjackson2JsonRedisSerializernewJackson2JsonRedisSerializer(Object.class);ObjectMapperomnewObjectMapper();om.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);template.setValueSerializer(jackson2JsonRedisSerializer);}}5新建UserMapper如下packagespringboot.dao;importorg.apache.ibatis.annotations.Delete;importorg.apache.ibatis.annotations.Insert;importorg.apache.ibatis.annotations.Mapper;importorg.apache.ibatis.annotations.Param;importorg.apache.ibatis.annotations.Select;importorg.apache.ibatis.annotations.Update;importorg.springframework.cache.annotation.CacheConfig;importorg.springframework.cache.annotation.CacheEvict;importorg.springframework.cache.annotation.CachePut;importorg.springframework.cache.annotation.Cacheable;importspringboot.domain.User;MapperCacheConfig(cacheNamesusers)publicinterfaceUserMapper{Insert(insert into user(name,age) values(#{name},#{age}))intaddUser(Param(name)Stringname,Param(age)Stringage);Select(select * from user where id #{id})Cacheable(key#p0)UserfindById(Param(id)Stringid);CachePut(key#p0)Update(update user set name#{name} where id#{id})voidupdataById(Param(id)Stringid,Param(name)Stringname);//如果指定为 true则方法调用后将立即清空所有缓存CacheEvict(key#p0,allEntriestrue)Delete(delete from user where id#{id})voiddeleteById(Param(id)Stringid);}Cacheable将查询结果缓存到redis中key“#p0”指定传入的第一个参数作为redis的key。CachePut指定key将更新的结果同步到redis中CacheEvict指定key删除缓存数据allEntriestrue,方法调用后将立即清除缓存6service层与controller层跟上一篇整合一样启动redis服务器redis服务器的安装与启动可以参考之前的博客地址如下http://www.cnblogs.com/gdpuzxs/p/6623171.html7配置log4j日志信息如下##LOG4J配置 log4j.rootCategoryDEBUG,stdout ## 控制台输出 log4j.appender.stdoutorg.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layoutorg.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern%d{yyyy-MM-ddHH:mm:ss,SSS}%5p%c{1}:%L-%m%n8验证redis缓存首先我们向user表总插入一条数据数据库显示如下现在我们查询一下user表中id24的数据观擦控制台输出的信息如下通过控制台输出信息我们可以知道这次执行了数据库查询并开启了Redis缓存查询结果。接下来我们再次查询user表中id24的数据观察控制台如下通过控制台输出信息我们可以知道这次并没有执行数据库查询而是从Redis缓存中查询并返回查询结果。我们查看redis中的信息如下方法finduser方法使用了注解Cacheable(key“#p0”)即将id作为redis中的key值。当我们更新数据的时候应该使用CachePut(key“#p0”)进行缓存数据的更新否则将查询到脏数据。完结撒花

相关文章:

SpringBoot使用Redis缓存

耗时一月收集的学习资料,强烈建议学习一下&#xff1a; https://pan.quark.cn/s/b5638e1405d7 正文开始&#xff1a; &#xff08;1&#xff09;pom.xml引入jar包&#xff0c;如下&#xff1a; <dependency><groupId>org.springframework.boot</groupId>&l…...

Phi-4-mini-reasoning效果展示:数理逻辑符号(∀, ∃, →)在中文输出中的保真度

Phi-4-mini-reasoning效果展示&#xff1a;数理逻辑符号&#xff08;∀, ∃, →&#xff09;在中文输出中的保真度 1. 模型核心能力概览 Phi-4-mini-reasoning是一款专为推理任务优化的文本生成模型&#xff0c;特别擅长处理数学证明、逻辑推理和多步骤分析任务。与通用聊天模…...

跨平台资源获取神器:3个技巧让全网视频音频轻松到手

跨平台资源获取神器&#xff1a;3个技巧让全网视频音频轻松到手 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是否曾遇到…...

龙芯k - 走马观碑组MPU驱动移植芯

先回顾&#xff1a;三次握手&#xff08;建立连接&#xff09;核心流程&#xff08;实际版&#xff09; 为了让挥手流程衔接更顺畅&#xff0c;咱们先快速回顾三次握手的实际核心&#xff0c;避免上下文脱节&#xff1a; 第一步&#xff08;客户端→服务器&#xff09;&#xf…...

Linux 装海康/Basler/堡盟相机驱动总失败?

Linux 装海康/Basler/堡盟相机驱动总失败&#xff1f; 别再盲目重装&#xff01;90% 的问题出在这 3 个地方&#xff01; “下载了 SDK&#xff0c;运行 install.sh 却报错&#xff1f;” “Pylon Viewer 找不到相机&#xff1f;” “MVS 能识别&#xff0c;但 Python 调用就崩…...

RAG 还是 Lucene:私有化部署客服系统的 AI 知识库架构选型娜

在之前的文章中&#xff0c;我们花了大量的篇幅&#xff0c;从记录后端pod真实ip开始说起&#xff0c;然后引入envoy&#xff0c;再解决了各种各样的需求&#xff1a;配置自动重载、流量劫持、sidecar自动注入&#xff0c;到envoy的各种能力&#xff1a;熔断、流控、分流、透明…...

Clawdbot汉化版代码实例:crontab定时任务+每日天气报告Telegram推送

Clawdbot汉化版代码实例&#xff1a;crontab定时任务每日天气报告Telegram推送 1. 项目概述与使用场景 Clawdbot汉化版是一个可以在微信、WhatsApp、Telegram等社交平台中使用的智能对话助手。与传统的在线AI服务不同&#xff0c;Clawdbot完全运行在用户自己的设备上&#xf…...

Pi0智能教育助手:个性化学习路径推荐

Pi0智能教育助手&#xff1a;个性化学习路径推荐 教育不是填鸭式的灌输&#xff0c;而是点燃学生内心的火焰。每个学生都有独特的学习节奏和方式&#xff0c;而传统教育往往难以满足这种个性化需求。 1. 为什么教育需要个性化&#xff1f; 你有没有遇到过这样的情况&#xff1…...

从Linux驱动本质到IgH EtherCAT完整流程:一篇彻底打通驱动、配置、库、硬件的硬核博客

在做EtherCAT运动控制、机械臂开发、机器人控制系统时&#xff0c;几乎所有人都会遇到一连串灵魂拷问&#xff1a;- Linux驱动到底是什么&#xff1f;- 为什么用户程序不能直接操作硬件&#xff1f;- ethercat.conf 绑定MAC、设置 generic 到底有什么用&#xff1f;- 用户程序…...

为什么专业编剧都在用Trelby?免费开源剧本写作软件的终极指南

为什么专业编剧都在用Trelby&#xff1f;免费开源剧本写作软件的终极指南 【免费下载链接】trelby The free, multiplatform, feature-rich screenwriting program! 项目地址: https://gitcode.com/gh_mirrors/tr/trelby 你是否曾经因为剧本格式问题而烦恼&#xff1f;是…...

Qwen3.5-2B轻量化教程:从模型下载、环境配置到7860界面访问完整链路

Qwen3.5-2B轻量化教程&#xff1a;从模型下载、环境配置到7860界面访问完整链路 1. 前言&#xff1a;认识Qwen3.5-2B轻量化模型 Qwen3.5-2B是Qwen3.5系列中的轻量化多模态基础模型&#xff0c;仅有20亿参数规模&#xff0c;专为低功耗设备优化设计。这个版本特别适合需要在端…...

我不是狐狸,我是那Harness Engineering廖

Julia&#xff08;julialang.org&#xff09;由Stefan Karpinski、Jeff Bezanson等在2009年创建&#xff0c;目标是融合Python的易用性、C的高性能、R的统计能力、Matlab的科学计算生态。 其核心设计哲学是&#xff1a; 高性能&#xff1a;编译型语言&#xff08;JIT&#xff0…...

戴尔笔记本风扇控制终极指南:如何精准管理散热与噪音

戴尔笔记本风扇控制终极指南&#xff1a;如何精准管理散热与噪音 【免费下载链接】DellFanManagement A suite of tools for managing the fans in many Dell laptops. 项目地址: https://gitcode.com/gh_mirrors/de/DellFanManagement 你是否曾因戴尔笔记本风扇噪音过大…...

500+ RPG Maker插件终极指南:如何快速提升你的游戏开发效率

500 RPG Maker插件终极指南&#xff1a;如何快速提升你的游戏开发效率 【免费下载链接】RPGMakerMV RPGツクールMV、MZで動作するプラグインです。 项目地址: https://gitcode.com/gh_mirrors/rp/RPGMakerMV 你是否正在为RPG Maker MV和MZ寻找高质量的插件资源&#xff…...

Mac外接显示器必看:从排列到亮度调节的完整避坑指南

Mac外接显示器完全指南&#xff1a;从基础设置到高阶调校 开篇&#xff1a;为什么你的Mac需要外接显示器&#xff1f; 作为一名长期使用MacBook Pro的深度用户&#xff0c;我清楚地记得第一次连接外接显示器时的困惑与惊喜。那块13英寸的Retina屏幕虽然精致&#xff0c;但在处理…...

国产FPGA进阶:紫光PDS中adf网表的5种应用场景与性能对比

国产FPGA进阶&#xff1a;紫光PDS中ADF网表的5种应用场景与性能对比 1. 技术背景与核心价值 在FPGA设计领域&#xff0c;网表文件作为设计流程中的关键中间产物&#xff0c;其应用方式直接影响项目的开发效率和质量控制。紫光同创PDS工具链中的ADF&#xff08;Advanced Design …...

C语言期末突击:手把手教你搞定吉林大学计算机系高频考题(附完整代码)

C语言期末突击&#xff1a;吉林大学计算机系高频考题深度解析与实战指南 期末考试临近&#xff0c;对于吉林大学计算机系的同学们来说&#xff0c;C语言程序设计无疑是重点科目之一。面对复杂的指针操作、链表处理和递归算法&#xff0c;很多同学感到无从下手。本文将从历年高频…...

SetDPI完全指南:掌握Windows多显示器DPI缩放控制的高效方案

SetDPI完全指南&#xff1a;掌握Windows多显示器DPI缩放控制的高效方案 【免费下载链接】SetDPI 项目地址: https://gitcode.com/gh_mirrors/se/SetDPI Windows多显示器DPI缩放控制一直是专业用户面临的痛点&#xff0c;SetDPI作为一款开源命令行工具&#xff0c;提供了…...

BERT文本分割模型部署:为语音转写稿添加段落结构

BERT文本分割模型部署&#xff1a;为语音转写稿添加段落结构 1. 引言&#xff1a;语音转写稿的结构化困境 在会议记录、在线课程、访谈整理等场景中&#xff0c;我们经常需要将语音内容转换为文字稿。虽然自动语音识别(ASR)技术已经相当成熟&#xff0c;但生成的文本往往缺乏…...

FPGA双边滤波实战:如何用查找表(LUT)和流水线设计搞定实时图像去噪

FPGA双边滤波实战&#xff1a;如何用查找表&#xff08;LUT&#xff09;和流水线设计搞定实时图像去噪 在嵌入式视觉系统中&#xff0c;实时图像处理一直是开发者面临的核心挑战之一。无论是无人机避障、工业质检还是医疗内窥镜&#xff0c;对1080p60fps视频流的实时去噪需求日…...

收藏!小白程序员必看:如何低成本精准选型大模型,避免花冤枉钱?

选择大模型的关键在于匹配自身需求&#xff0c;需结合成本预算、技术能力、业务场景、合规要求四大维度进行筛选。文章提出先明确核心需求&#xff0c;拒绝参数崇拜&#xff0c;再根据个人开发者、小团队、垂直领域用户等不同类型给出具体选型建议。同时&#xff0c;文章还提醒…...

终极解决方案:如何让AMD显卡驱动轻装上阵

终极解决方案&#xff1a;如何让AMD显卡驱动轻装上阵 【免费下载链接】RadeonSoftwareSlimmer Radeon Software Slimmer is a utility to trim down the bloat with Radeon Software for AMD GPUs on Microsoft Windows. 项目地址: https://gitcode.com/gh_mirrors/ra/Radeon…...

CoPaw多模态理解初步探索:处理图像描述与图文关联任务

CoPaw多模态理解初步探索&#xff1a;处理图像描述与图文关联任务 1. 多模态理解的新尝试 最近在测试CoPaw模型时&#xff0c;我发现一个有趣的现象&#xff1a;虽然它并非原生支持多模态输入&#xff0c;但通过巧妙的提示工程&#xff0c;这个文本模型竟然能展现出对图像内容…...

WinBtrfs:让Windows用户也能享受Btrfs文件系统的强大功能

WinBtrfs&#xff1a;让Windows用户也能享受Btrfs文件系统的强大功能 【免费下载链接】btrfs WinBtrfs - an open-source btrfs driver for Windows 项目地址: https://gitcode.com/gh_mirrors/bt/btrfs WinBtrfs是一款专为Windows系统设计的开源Btrfs文件系统驱动程序&…...

MiniCPM-o-4.5-nvidia-FlagOS实战案例:企业级图文多模态助手在客服场景中的应用

MiniCPM-o-4.5-nvidia-FlagOS实战案例&#xff1a;企业级图文多模态助手在客服场景中的应用 想象一下&#xff0c;你的电商客服每天要处理上百张用户发来的商品图片&#xff0c;询问“这个衣服是什么材质&#xff1f;”、“这个零件怎么安装&#xff1f;”、“这个食品过期了吗…...

告别固定指纹:手把手教你修改Chromium源码,实现TLS JA4指纹随机化

深度定制Chromium&#xff1a;实现TLS JA4指纹动态随机化的完整实践指南 在当今高度监控的网络环境中&#xff0c;浏览器指纹识别已成为追踪用户行为的主要手段之一。TLS JA4指纹作为新一代网络指纹技术&#xff0c;能够通过分析客户端在SSL/TLS握手阶段提供的加密套件顺序来唯…...

快速上手LingBot-Depth:从镜像部署到深度图生成全流程

快速上手LingBot-Depth&#xff1a;从镜像部署到深度图生成全流程 1. 认识LingBot-Depth&#xff1a;深度感知的智能助手 1.1 深度图生成的核心价值 想象一下&#xff0c;当你看到一张照片时&#xff0c;大脑能自动判断画面中物体的远近关系——近处的树木轮廓清晰&#xff…...

如何自动化管理音乐元数据:开源音乐标签编辑器实战指南

如何自动化管理音乐元数据&#xff1a;开源音乐标签编辑器实战指南 【免费下载链接】music-tag-web 音乐标签编辑器&#xff0c;可编辑本地音乐文件的元数据&#xff08;Editable local music file metadata.&#xff09; 项目地址: https://gitcode.com/gh_mirrors/mu/music…...

深度解析Windows 11系统优化:3大高效修复策略实战指南

深度解析Windows 11系统优化&#xff1a;3大高效修复策略实战指南 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher Windows 11更新后&#xff0…...

个人品牌视觉打造:SPIRAN ART SUMMONER AI Agent学习你的偏好,定制专属头像与海报

个人品牌视觉打造&#xff1a;SPIRAN ART SUMMONER AI Agent学习你的偏好&#xff0c;定制专属头像与海报 1. 为什么需要AI驱动的个人品牌视觉 在数字时代&#xff0c;个人品牌视觉识别度直接影响专业形象和社交影响力。传统设计流程面临三个核心痛点&#xff1a;高昂的设计成…...