基于SpringBoot的Redis开发实战教程
配置和集成缓存涉及多个步骤,从选择适当的缓存技术到实现缓存的存取操作。以下是具体的步骤和示例,假设我们使用Redis作为缓存工具,并基于Spring Boot进行开发。
1. 选择和配置缓存技术
a. 选择缓存工具
- Redis 是一个流行的内存数据结构存储工具,适用于各种缓存需求。
b. 添加依赖
在你的Spring Boot项目中,添加Redis相关的依赖。以下是使用Maven的示例:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId>
</dependency>
c. 配置Redis
在 application.properties 或 application.yml 文件中配置Redis连接:
application.properties 示例:
spring.redis.host=localhost
spring.redis.port=6379
application.yml 示例:
spring:redis:host: localhostport: 6379
2. 配置Spring Boot集成Redis
a. 创建Redis配置类
创建一个Redis配置类,配置RedisTemplate和相关的序列化设置:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new GenericToStringSerializer<>(Object.class));return template;}@Beanpublic LettuceConnectionFactory redisConnectionFactory() {return new LettuceConnectionFactory();}
}
b. 使用RedisTemplate进行缓存操作
创建服务类来实现缓存操作,包括缓存的存取:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;import java.util.concurrent.TimeUnit;@Service
public class CachedProductService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;private static final String PRODUCT_KEY_PREFIX = "product:";public Product getProduct(Long id) {String key = PRODUCT_KEY_PREFIX + id;Product product = (Product) redisTemplate.opsForValue().get(key);if (product == null) {// Cache miss: retrieve data from the databaseproduct = fetchProductFromDatabase(id);// Store data in the cacheredisTemplate.opsForValue().set(key, product, 1, TimeUnit.HOURS);}return product;}public void addProduct(Product product) {// Save product to the databasesaveProductToDatabase(product);// Invalidate cacheredisTemplate.delete(PRODUCT_KEY_PREFIX + product.getId());}public void updateProduct(Product product) {// Update product in the databaseupdateProductInDatabase(product);// Update cacheredisTemplate.opsForValue().set(PRODUCT_KEY_PREFIX + product.getId(), product, 1, TimeUnit.HOURS);}public void deleteProduct(Long id) {// Delete product from the databasedeleteProductFromDatabase(id);// Remove from cacheredisTemplate.delete(PRODUCT_KEY_PREFIX + id);}private Product fetchProductFromDatabase(Long id) {// Implement database fetch logicreturn new Product(); // Placeholder}private void saveProductToDatabase(Product product) {// Implement database save logic}private void updateProductInDatabase(Product product) {// Implement database update logic}private void deleteProductFromDatabase(Long id) {// Implement database delete logic}
}
3. 实现缓存操作
a. 存取缓存
- 存取数据:使用
redisTemplate.opsForValue().get(key)从缓存中读取数据,使用redisTemplate.opsForValue().set(key, value, timeout, unit)将数据存入缓存。
b. 缓存失效
- 过期时间:在将数据存入缓存时设置过期时间,以避免缓存数据过期。
c. 缓存更新和删除
- 更新缓存:在数据更新或删除时,确保缓存中的数据也被相应更新或删除。
4. 测试和优化
a. 测试
-
单元测试:编写测试用例,验证缓存操作是否正常工作。
@SpringBootTest public class CachedProductServiceTests {@Autowiredprivate CachedProductService cachedProductService;@Testpublic void testGetProduct() {Product product = cachedProductService.getProduct(1L);assertNotNull(product);}@Testpublic void testAddProduct() {Product product = new Product();cachedProductService.addProduct(product);// Verify product addition logic}@Testpublic void testUpdateProduct() {Product product = new Product();cachedProductService.updateProduct(product);// Verify product update logic}@Testpublic void testDeleteProduct() {cachedProductService.deleteProduct(1L);// Verify product deletion logic} }
b. 优化
- 缓存配置:根据实际使用情况调整缓存大小、过期时间等配置。
- 监控和分析:监控缓存命中率和性能,进行优化。
通过以上步骤,你可以成功配置和集成缓存,并定义缓存操作。这将显著提升数据服务的性能和响应速度,同时减轻数据库的负担。
相关文章:
基于SpringBoot的Redis开发实战教程
配置和集成缓存涉及多个步骤,从选择适当的缓存技术到实现缓存的存取操作。以下是具体的步骤和示例,假设我们使用Redis作为缓存工具,并基于Spring Boot进行开发。 1. 选择和配置缓存技术 a. 选择缓存工具 Redis 是一个流行的内存数据结构存…...
mysql 分区操作
1。新建分区 mysql 没有全局唯一索引,因此所有涉及唯一索引的都需要加上分区键,因此要做好权衡,键分区不一定能提高效率哦,建分区的主要目的是为了分区查询和删除数据 --将CREATE_TIME 加入主键 ALTER TABLE your_table DROP PR…...
[网鼎杯 2018]Comment
使用环境为https://adworld.xctf.org.cn/challenges,搜索题目[网鼎杯 2018]Comment。 进入环境,发现为一个留言板,点击发帖试试。 尝试发帖 跳转到登录页面,根据提示使用burp进行暴力破解。 发现payload为666时状态码不同。 尝试…...
LVS详解
目录 一、LVS简介 LVS 官网: 二、LVS 负载均衡模式 2.1 LVS-NAT模式: 2.1.1 简介 2.1.2 工作流程图: 2.1.3 说明: 2.1.4 LVS-NAT的优缺点: 2.2 LVS-DR模式: 2.2.1 简介 2.2.2 工作原理: 2.2.3 工作…...
Yolo-World初步使用
Yolo v8目前已经支持Yolo-World,整理一下初步使用步骤。 使用步骤 1 先下载Yolo-World的pt文件,下载地址:GitHub - AILab-CVC/YOLO-World: [CVPR 2024] Real-Time Open-Vocabulary Object Detection 官网应该是点这里(有个笑脸…...
Navicat Premium使用
文章目录 Navicat Premium 16的使用连接MySQL建立数据库并构建表导入数据 Navicat Premium 16是一款功能强大的数据库管理工具,它允许用户从单一应用程序中同时连接多种数据库,提供了极其便捷和高效的管理和开发环境,对于 MySQL 用户来说&…...
LLC数字控制TMS320F28034,4-DSP的epwm配置介绍
LLC数字控制TMS320F28034,4-DSP的epwm配置介绍 1 TMS320F280341.1 概述1.2 PWM详细介绍 2 TMS320F28034 PWM功能框图2.1 ePWM功能模块2.2 ePWM功能寄存器框图 3 TMS320F28034 PWM初始化流程4 结合项目设计5 代码设计5.1 PWM初始化程序5.2 工程代码 6 总结 配套代码示…...
MongoDB学习记录
1、初识Mongo 概述:与关系型数据库不同,MongoDB 的数据以类似于 JSON 格式的二进制文档存储,通常称这种格式为Bson,Bson不仅支持JSON中已有的数据类型,还增加了一些额外的数据类型,例如日期和二进制数据&a…...
vlunstack-2(复现红日安全-ATT CK实战)
环境搭建 配置信息 DC IP:10.10.10.10 OS:Windows 2012(64) 应用:AD域 WEB IP1:10.10.10.80 IP2:192.168.47.131 OS:Windows 2008(64) 应用:Weblogic 10.3.6MSSQL 2008 PC IP1:10.10…...
【生信入门】预览快速体验Linux-重生之小明闯Linux
生信少走弯路,快试试生信云专用服务器。新用户注册免费体验5小时。https://www.tebteb.cc 一.故事 小明的Linux冒险 在一片混沌的黑暗中,小明睁开了眼睛。他感到头痛欲裂,四周一片漆黑,只有一行闪烁的字符映入眼帘: [xiaomingu…...
用.net core简易搭建webapi托管到IIS
1、从官网下载.NET Core 托管捆绑包 https://learn.microsoft.com/zh-cn/aspnet/core/tutorials/publish-to-iis?viewaspnetcore-8.0&tabsvisual-studio 2、新建ASP.NET Core WEB API项目 新建控制器TestController并生成GetInfo方法 3、发布 目标路径选择 2)显示所有…...
【计算机网络---OSI七层模型】
一、OSI的基本概念及原则 OSI是Open System Interconnect的缩写,意为开放式系统互联。各个层次的划分遵循以下原则: 1. 同一层的各网络节点都有相同的层次结构,具有同样的功能; 2. 同一节点的内相邻层之间通过接口进行通信&…...
Error updating database. Cause: org.apache.shiro.UnavailableSecurity
mybtisplus查看MetaObjectHandler是否有自定义获取用户信息填充用户的方法...
【网络安全】本地文件包含及远程文件包含漏洞详解
一、文件包含漏洞概述 1.1 什么是文件包含 开发人员将需要重复调用的函数写入一个文件,对该文件进行包含时产生的操作。这样编写代码能减少冗余,降低代码后期维护难度。 保证网站整体风格统一:导航栏、底部footer栏等,把这些不…...
redis启动的三种方式
默认启动: # 默认的启动指令 redis-server 默认启动属于前台启动,会阻塞整个会话窗口,窗口关闭或者按下CTRL C则Redis停止。不推荐使用。 //查看云服务器是否安装过redis redis-server -v//检查安装目录 which redis-server//查看redis进…...
手机怎么远程控制电脑屏幕?手机远程控制电脑方法分享
手机与电脑之间的互联互通变得越来越便捷。 无论是工作还是学习,有时我们需要在手机上远程控制电脑屏幕,以完成一些复杂的操作或查看电脑上的文件。 本文将详细介绍几种实用的手机远程控制电脑屏幕的方法,帮助读者轻松实现这一目标。 一、使…...
NET的全称、主要功能以及在计算机网络中的作用?
.NET是一个广泛的、全方位的平台,应用于开发网站、应用程式、网页应用程式和网络服务。以下是.NET的全称、主要功能以及在计算机网络中的作用: .NET的全称 .NET的全称实际上是Microsoft .NET Framework。它是微软公司推出的一种面向网络的开发框架&…...
LLM - 使用 HuggingFace + Ollama 部署最新大模型 (GGUF 格式 与 Llama 3.1)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/141028040 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Ollama…...
如何实现Redis和Mysql中数据双写一致性
在我们的实际开发中,我们用到了redis缓存一些常用的数据(如热点数据)用来提高系统的吞吐量。 但是不可以避免的出现了数据的修改场景,这就导致了数据库中的数据和Redis中出现不一致性的情况。如何保证数据一致性就显得非常重要了&…...
three.js 模型高亮效果实现说明(结合react)
three.js react 实现鼠标移入模型高亮选中效果 使用EffectComposer和其附加的渲染效果Passes(如RenderPass和OutlinePass)来实现高级渲染效果。首先创建EffectComposer实例,并添加RenderPass和OutlinePass,最后在渲染循环中调用…...
OpenClaw低配优化:千问3.5-9B在4GB内存设备运行
OpenClaw低配优化:千问3.5-9B在4GB内存设备运行 1. 为什么需要低配优化? 去年冬天,我在一台老旧的MacBook Air上第一次尝试部署OpenClaw时,遇到了内存不足的报错。这台2017年的设备只有4GB内存,而默认配置的千问3.5-…...
OpenClaw云端调试技巧:SSH连接星图平台Qwen3-4B镜像实例
OpenClaw云端调试技巧:SSH连接星图平台Qwen3-4B镜像实例 1. 为什么需要云端调试OpenClaw? 上周我在星图平台部署了Qwen3-4B镜像实例,准备用它作为OpenClaw的后端大脑。本以为本地调试和云端调试差不多,结果第一天就遇到了大麻烦…...
网店SEO优化包括哪些方面
网店SEO优化包括哪些方面 在当今数字化时代,电子商务已经成为了各行各业发展的重要组成部分。无论你是一个小型的手工艺品店,还是一个大型的电商平台,一个成功的网店都离不开搜索引擎优化(SEO)的支持。网店SEO优化包括…...
别再为GEO数据注释发愁了!三种方法(TXT/Soft/R包)保姆级代码对比与避坑指南
GEO数据注释实战:TXT/Soft/R包三大方法深度解析与避坑手册 每次处理GEO数据时,注释环节总像一场未知的冒险——你永远不知道下一个报错会在哪行代码等着你。作为生物信息学分析的关键第一步,注释质量直接决定了后续差异分析、功能富集等结果的…...
OpenClaw性能调优:千问3.5-9B响应速度提升30%的实操方法
OpenClaw性能调优:千问3.5-9B响应速度提升30%的实操方法 1. 为什么需要性能调优 第一次在本地部署OpenClaw对接千问3.5-9B模型时,我被它的响应速度惊到了——平均每个简单指令需要等待5-7秒才能得到响应。作为一个追求效率的工具,这样的延迟…...
3步终极指南:用Docker容器让老旧打印机秒变AirPrint无线打印神器
3步终极指南:用Docker容器让老旧打印机秒变AirPrint无线打印神器 【免费下载链接】cups-avahi-airprint Docker image for CUPS intended as an AirPrint relay 项目地址: https://gitcode.com/gh_mirrors/cu/cups-avahi-airprint 还在为家里或办公室的老旧打…...
002、YOLOv1深度解析:You Only Look Once的开创性架构与核心思想
从一次深夜调试说起 上周在部署一个老版本的实时检测模型时,我又遇到了那个经典问题:检测框在物体快速移动时总会出现“抖动”,相邻帧之间的预测结果不一致。同事建议上卡尔曼滤波做后处理,我却在想——如果模型本身就能看到“全局…...
OpenClaw会议纪要助手:Qwen3-14b_int4_awq转写与重点提炼
OpenClaw会议纪要助手:Qwen3-14b_int4_awq转写与重点提炼 1. 为什么需要自动化会议纪要 作为远程工作者,我每周要参加至少15场跨时区会议。过去手动整理纪要时经常遇到三个痛点:一是录音转文字耗时(1小时会议需要2小时整理&…...
从 Linux 后端到机器人系统:核心能力迁移与技术实践
摘要: 机器人系统工程师是当前人工智能与自动化浪潮中的关键角色。该职位要求工程师不仅具备扎实的传统软件工程功底,还需深刻理解机器人系统的特殊性与复杂性。本文基于一份典型的机器人系统工程师职位描述,深入探讨了其核心能力要求、技术栈构成、系统设计思想、实际开发挑…...
C语言指针核心概念与安全实践指南
1. 指针变量基础概念解析指针是C语言中最强大也最容易让人困惑的特性之一。理解指针的关键在于区分指针变量本身和它所指向的内存空间。让我们从一个简单的例子开始:int a 42; int *ptr &a;这里,ptr是一个指针变量,它存储的是变量a的地…...
