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

Spring Boot整合Redis并提供多种实际场景的应用

Spring Boot整合Redis并提供多种实际场景的应用

  • 1. 整合Redis
  • 2. 场景应用
    • 2.1 缓存
    • 2.2 分布式锁
    • 2.3 计数器
    • 2.4 发布/订阅
  • 3. 总结

Spring Boot是一个快速构建基于Spring框架的应用程序的工具,它提供了大量的自动化配置选项,可以轻松地集成各种不同的技术。Redis是一个高性能的键值存储数据库,广泛用于缓存、队列、发布/订阅等场景。本文将介绍如何使用Spring Boot整合Redis,并提供多种实际场景的应用。

在这里插入图片描述

1. 整合Redis

在Spring Boot中,可以通过添加相关的依赖来整合Redis。以下是常用的Redis客户端库及其对应的依赖:

Jedis: spring-boot-starter-data-redis
Lettuce: spring-boot-starter-data-redis-reactive

这里以Jedis为例进行演示。首先在pom.xml中添加依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

然后在application.properties文件中配置Redis连接信息:

spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=

spring:redis:host: localhostpassword: ''port: 6379

这里配置了Redis的地址和端口号,如果Redis需要密码验证,也可以在这里配置密码。接下来可以通过注入RedisTemplate来使用Redis:

@Autowired
private RedisTemplate<String, Object> redisTemplate;public void setValue(String key, Object value) {redisTemplate.opsForValue().set(key, value);
}public Object getValue(String key) {return redisTemplate.opsForValue().get(key);
}

以上代码中的setValue方法将一个值存储到Redis中,getValue方法从Redis中获取一个值。Spring Boot会自动配置RedisTemplate,所以我们可以直接注入并使用它。

2. 场景应用

2.1 缓存

Redis最常见的应用场景就是缓存。在Spring Boot中,可以使用@Cacheable注解来开启缓存。下面的例子演示了如何使用@Cacheable注解实现缓存:

@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserRepository userRepository;@Cacheable(value = "userCache", key = "#id")public User getUserById(Integer id) {return userRepository.findById(id);}
}

以上代码中,getUserById方法使用@Cacheable注解进行了缓存。value属性指定了缓存名称,key属性指定了缓存的键值,这里以用户ID作为缓存的键。如果缓存中存在指定键值的数据,那么将直接从缓存中获取数据,而不会执行方法体中的代码。

2.2 分布式锁

在分布式环境中,为了保证数据的一致性,可能需要使用分布式锁。Redis提供了实现分布式锁的方法,可以使用setnx命令来实现。下面的例子演示了如何使用Redis实现分布式锁:

@Service
public class UserServiceImpl implements UserService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;/*** 获取锁*/public boolean acquireLock(String key, String value, long expireTime) {Boolean result = redisTemplate.opsForValue().setIfAbsent(key, value, expireTime, TimeUnit.MILLISECONDS);return result != null && result;}/*** 释放锁*/public void releaseLock(String key, String value) {Object currentValue = redisTemplate.opsForValue().get(key);if (currentValue != null && value.equals(currentValue.toString())) {redisTemplate.delete(key);}}
}

以上代码中,acquireLock方法尝试获取锁,如果获取成功,则返回true,否则返回false。releaseLock方法释放锁,只有持有相同value值的锁才能被释放。expireTime参数指定了锁的过期时间,避免锁被一直占用。

2.3 计数器

Redis提供了incr和decr命令来实现原子递增和递减操作。这些命令可以用于实现计数器。下面的例子演示了如何使用Redis实现计数器:

@Service
public class CounterServiceImpl implements CounterService {private static final String COUNTER_KEY = "counter";@Autowiredprivate RedisTemplate<String, Object> redisTemplate;/*** 自增1*/public long increase() {return redisTemplate.opsForValue().increment(COUNTER_KEY);}/*** 自减1*/public long decrease() {return redisTemplate.opsForValue().decrement(COUNTER_KEY);}/*** 获取计数*/public long getCount() {Object value = redisTemplate.opsForValue().get(COUNTER_KEY);if (value != null) {return Long.parseLong(value.toString());} else {return 0;}}
}

以上代码中,increase和decrease方法分别实现了原子递增和递减操作,getCount方法获取当前计数器的值。

2.4 发布/订阅

Redis提供了发布/订阅功能,可以用于实现消息队列等功能。下面的例子演示了如何使用Redis实现发布/订阅:

@Service
public class MessageServiceImpl implements MessageService {private static final String CHANNEL_NAME = "message";@Autowiredprivate RedisTemplate<String, Object> redisTemplate;@Overridepublic void sendMessage(String message) {redisTemplate.convertAndSend(CHANNEL_NAME, message);}@Overridepublic void subscribeMessage(MessageListener listener) {MessageListenerAdapter adapter = new MessageListenerAdapter(listener);redisTemplate.getConnectionFactory().getConnection().subscribe(adapter, CHANNEL_NAME.getBytes());}
}

以上代码中,sendMessage方法发布一条消息到指定的频道,subscribeMessage方法订阅指定频道的消息,并将消息交给MessageListener处理。

3. 总结

本文介绍了如何使用Spring Boot整合Redis,并提供了多种实际场景的应用。在实际开发中,Redis的应用场景非常广泛,可以根据需求选择合适的Redis客户端库及相关的操作命令来实现功能。

相关文章:

Spring Boot整合Redis并提供多种实际场景的应用

Spring Boot整合Redis并提供多种实际场景的应用1. 整合Redis2. 场景应用2.1 缓存2.2 分布式锁2.3 计数器2.4 发布/订阅3. 总结Spring Boot是一个快速构建基于Spring框架的应用程序的工具&#xff0c;它提供了大量的自动化配置选项&#xff0c;可以轻松地集成各种不同的技术。Re…...

VR全景图片,助力VR全景制作,720全景效果图

VR全景图片是指通过全景相机或多相机组合拍摄全景画面&#xff0c;并进行拼接处理生成全景图像的过程。VR全景图片的应用范围广泛&#xff0c;包括旅游和景区、房地产、汽车、艺术和文化、电影和娱乐等领域。本文将详细介绍VR全景图片的类型、应用场景、市场前景和发展趋势。 一…...

Kali Linux20款重要软件

Kali Linux 是一个流行的网络安全测试平台&#xff0c;它包含了大量的工具和应用程序&#xff0c;以下是其中20款最常用的软件和工具&#xff1a; Metasploit&#xff1a;Metasploit 是一个广泛使用的漏洞评估工具&#xff0c;可以帮助安全专业人员测试系统中的漏洞。Aircrack…...

C语言测试五

windows是什么类型的系统&#xff08;实时还是分时&#xff09;&#xff1f;有什么区别&#xff1f; 分时操作系统。如果在单核的情况下&#xff0c;分时操作系统多个进程共用一个单核&#xff0c;该单核会将其执行时间分成相应的时间片&#xff0c;每个进程占用一定的时间片&a…...

【微服务~原始真解】Spring Cloud —— 访问数据库整合Druid数据源

&#x1f50e;这里是【秒懂云原生】&#xff0c;关注我学习云原生不迷路 &#x1f44d;如果对你有帮助&#xff0c;给博主一个免费的点赞以示鼓励 欢迎各位&#x1f50e;点赞&#x1f44d;评论收藏⭐️ &#x1f440;专栏介绍 【秒懂云原生】 目前主要更新微服务&#xff0c;…...

前端入门必刷题,经典算法—两数之和

优美的前⾔ 年轻的码农哟~ 你是不是⼀直在思考⾃我提升的问题~ 思来想去&#xff0c;决定从算法抓起&#xff08;单押&#xff09;~ 拿起⼜放下&#xff0c;经历过多少次放弃&#xff08;单押 ✖ 2&#xff09;~ 决定了&#xff01;这次让我来帮你梳理&#xff08;单押 ✖ 3&a…...

‘海外/国外‘地区微博签到shu据(正题在第二部分)

最近失眠&#xff0c;研究了项关于weibo爬虫的新功能&#xff0c;种种原因&#xff0c;大家可跳过第一部分的引用直接看第二部分。 内容来源&#xff1a;健康中国、生命时报、央视等​​​​ 失眠标准一&#xff1a;3个“30分钟” ● 入睡困难&#xff0c;从躺下想睡到睡着间隔…...

Springboot——SB整合Mybatis的CURD(基于注解进行开发)

此处是根据需求实现基本操作 上面这里涉及到了条件分页查询&#xff0c;还有增加和批量删除员工信息&#xff0c;右边编辑就是先查询后更新操作&#xff0c;叫做查询回显&#xff0c;然后在原有基础上进行更新 环境准备 在下面的入门案例的整体环境下把数据库表换成empSpring…...

现在大专生转IT可行吗?

当然可行的。 大专也是人&#xff0c;为什么不可以选择喜欢的专业学习&#xff0c;现在大学生遍地都是&#xff0c;学历已经不是限制你发展的因素了。有的人就是不擅长理论学习&#xff0c;更喜欢技术。IT也只是一个普普通通的技术行业&#xff0c;跟其他技术行业一样&#xf…...

XC7A50T-1CSG324I、XC7A50T-2CSG324I Artix-7 FPGA可编程门阵列

Artix-7 FPGA能够在多个方面实现更高的性价比&#xff0c;这些方面包括逻辑、信号处理、嵌入式内存、LVDS I/O、内存接口&#xff0c;以及收发器。MicroBlaze CPU针对Xilinx FPGA进行了优化&#xff0c;是一种可高度配置的32位RISC处理器&#xff0c;可为微控制器、实时处理器和…...

linux安装图片处理软件ImageMagick

下载地址&#xff1a; wget https://download.imagemagick.org/archive/ImageMagick-7.1.1-4.tar.gz 或者 wget --no-check-certificate https://download.imagemagick.org/archive/ImageMagick-7.1.1-4.tar.gz 安装命令&#xff1a; tar -zxvf ImageMagick-7.1.1-4.tar.…...

【Java基础】JavaCore核心-反射技术

文章目录1.什么是反射技术2.反射-获取类对象方式3.反射-获取声明构造器4.反射-对象创建实战5.反射-方法和属性实战6.反射-属性值操作实战7.反射-invoke运行类方法1.什么是反射技术 Java的反射&#xff08;reflection&#xff09;机制是指在程序的运行状态中 可以构造任意一个类…...

AWGN后验估计下的均值与协方差关系(向量和标量形式)

文章目录AWGN信道向量模型后验均值与协方差的关系从实数域拓展到复数域小结AWGN信道向量模型 考虑一个随机向量x∼pX(x)\boldsymbol x \sim p_{\boldsymbol X}(\boldsymbol x)x∼pX​(x)&#xff0c;信道模型为 qxv,v∼N(0,Σ)\boldsymbol q \boldsymbol x \boldsymbol v, \…...

Linux常用命令之文件搜索命令

1、常用搜索-find 命令find英文原意find所在路径/bin/find执行权限所有用户功能描述文件搜索语法find [搜索范围] [搜索条件] (默认准确搜索)范例find /etc -name init?? 常用的搜索条件的选项包括&#xff1a; -name&#xff1a;按照文件名进行匹配查找&#xff0c;例&…...

ChatGPT给软件测试行业带来的可能

软件测试在软件开发过程中扮演着至关重要的角色&#xff0c;因为它可以确保软件的质量和可靠性。而随着人工智能技术的不断发展&#xff0c;ChatGPT作为一个强大的自然语言处理工具&#xff0c;可以在软件测试中发挥出许多重要的作用。本文将介绍ChatGPT在软件测试应用中带来的…...

Cadence Allegro 导出Properties on Nets Report报告详解

⏪《上一篇》   🏡《上级目录》   ⏩《下一篇》 目录 1,概述2,Properties on Nets Report作用3,Properties on Nets Report示例4,Properties on Nets Report导出方法4.1,方法14.2,方法2B站关注“硬小二”浏览更多演示视频...

JAVA代码 实现定位数据动态聚集并绘制多边形区域

文章目录思路1、限制聚合距离2、绘制多边形区域3、多边形区域之间合并4、多边形定边点4、逻辑流程一些性能上的优化1、多边形设置圆心2、采用分支合并思路3、清理聚集较分散区域合理性处理1、解决多边形内凹角问题2、解决定边点插入位置问题3、多边形区域扩展成果展示最近有根据…...

基于储能进行调峰和频率调节研究【超线性增益的联合优化】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

体验 Linux 的几个监控命令(htop、nmon、netdata)

体验 Linux 的几个监控命令htopnmonnetdatahtop 安装&#xff0c; sudo dnf install -y htop使用&#xff0c; htopnmon 安装&#xff0c; sudo dnf install -y nmon使用&#xff0c; nmon输入c&#xff0c; 输入C&#xff0c; 输入m&#xff0c; 输入n&#xff0c; 输入…...

NOC大赛2022NOC软件创意编程初赛图形化小低组(小学高年级组)

一、选择题 1.如果要控制所有角色一起朝舞台区右侧移动,下面哪个积太块是不需要的 2.要想让三个角色一起移动起来,下面哪个积木块没有作用 ? 3.小猴按照下面的程序前进,小猴最后一次前进了()步。 4.小可同学写了一个画笔程序画出花朵,但是运行后什么都看不到,不可…...

Docker容器中运行Windows系统的突破性企业级解决方案:架构解析与部署实践

Docker容器中运行Windows系统的突破性企业级解决方案&#xff1a;架构解析与部署实践 【免费下载链接】windows Windows inside a Docker container. 项目地址: https://gitcode.com/GitHub_Trending/wi/windows 在当今云原生和容器化技术快速发展的背景下&#xff0c;如…...

组合导航(五):惯性导航系统的误差分析与校正方法

1. 惯性导航系统误差的根源剖析 刚接触惯性导航的朋友们常会遇到这样的困惑&#xff1a;为什么同样的设备&#xff0c;在不同环境下定位精度差异这么大&#xff1f;这就像用同一把尺子测量物体&#xff0c;有时准有时不准&#xff0c;问题往往出在尺子本身的误差上。惯性导航系…...

AsyncAPI消息模式匹配:基于内容路由消息的终极指南

AsyncAPI消息模式匹配&#xff1a;基于内容路由消息的终极指南 【免费下载链接】spec The AsyncAPI specification allows you to create machine-readable definitions of your asynchronous APIs. 项目地址: https://gitcode.com/gh_mirrors/spec/spec AsyncAPI规范允…...

C++动态内存/内存管理

文章目录 前言 一、内存分区 二、C 语言动态内存&#xff08;标准库函数&#xff09; 1.核心函数 2.代码示例 3.关键注意点 三、C 动态内存&#xff08;关键字 / 操作符&#xff09; 1.核心用法 &#xff08;1&#xff09;单个对象 &#xff08;2&#xff09;数组对象…...

Comsol光子晶体:谷霍尔效应、单胞与超胞能带计算及谷单向传输

Comsol光子晶体谷霍尔效应。 单胞&#xff0c;超胞能带计算。 谷单向传输等。光子晶体玩拓扑这件事最近越来越上头。今天咱们撸起袖子直接干一个谷霍尔效应仿真&#xff0c;手把手教你在COMSOL里搞出单向传输这种神奇现象。先说重点&#xff1a;结构旋转6度就能打开带隙&#x…...

福人板材靠谱供应商:企业采购决策核心要素解析

福人板材靠谱供应商&#xff1a;企业采购决策核心要素解析“选对福人板材靠谱供应商&#xff0c;比砍价更重要——企业采购决策的8个核心要素&#xff0c;少一个都可能踩坑”对于中小制造企业、装饰公司等采购方而言&#xff0c;福人板材作为行业知名的环保板材品牌&#xff0c…...

硬件编译器工具链新手指南:从概念到实践

硬件编译器工具链新手指南&#xff1a;从概念到实践 【免费下载链接】circt Circuit IR Compilers and Tools 项目地址: https://gitcode.com/gh_mirrors/ci/circt 一、CIRCT核心价值解析 在硬件设计领域&#xff0c;你是否曾面临这些挑战&#xff1a;高级算法难以直接…...

开源入门踩坑全实录:从PR被拒到核心贡献者的全周期避坑指南

根据中国开源软件推进联盟2025年发布的《中国开源开发者生态报告》&#xff0c;国内开源开发者规模已突破1200万&#xff0c;但入门1年内就停止贡献的开发者占比高达78.6%。换句话说&#xff0c;每5个尝试入门开源的新手&#xff0c;就有4个会在一年内彻底放弃。 作为从0起步&a…...

DNF联机搭建避坑指南:从‘花枝登录器’授权到PVF加密的全流程解析

DNF私服联机搭建实战&#xff1a;从授权配置到加密通信的完整解决方案 当几个朋友想搭建一个私人DNF服务器享受联机乐趣时&#xff0c;最令人头疼的往往不是服务端的启动&#xff0c;而是如何让客户端顺利连接。本文将聚焦于那些让"单机变联机"的关键技术环节——登录…...

Python智能内存管理策略深度拆解(CPython内存池机制全图谱曝光)

第一章&#xff1a;Python智能内存管理策略全景导览Python 的内存管理并非由开发者手动控制&#xff0c;而是通过一套高度集成的自动化机制协同运作&#xff0c;涵盖引用计数、循环垃圾回收&#xff08;GC&#xff09;、内存池分配&#xff08;pymalloc&#xff09;三大核心支柱…...