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

在Spring Boot项目中整合Redis:高效数据存储与缓存的最佳实践

目录

1. 引入依赖

2. 创建序列化配置类

2.1 序列化的选择

3. 配置YAML文件

3.1 连接池的配置

4. 使用Redis

4.1 复杂数据类型的存储

4.2 列表、集合和哈希的使用

4.2.1 列表示例

4.2.2 集合示例

4.2.3 哈希示例

5.  处理事务和管道

5.1 事务示例

5.2 管道示例

6.  Redis的过期策略与持久化

7.  Redis集群与分布式

8.  总结


在现代应用开发中,缓存技术的使用越来越普遍。Redis作为一个高性能的键值存储数据库,因其快速、灵活的特性被广泛应用于各种场景。无论是提升数据访问速度,还是减轻后端数据库的压力,Redis都能发挥重要作用。本文将详细介绍如何在Spring Boot项目中整合Redis,以实现高效的数据存储和缓存功能。

1. 引入依赖

首先,我们需要在pom.xml中引入Spring Boot和Redis相关的依赖。以下是必要的依赖配置:

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-data-redis</artifactId>  
</dependency>  
<dependency>  <groupId>com.fasterxml.jackson.datatype</groupId>  <artifactId>jackson-datatype-jsr310</artifactId>  <version>2.13.0</version>  
</dependency>

这些依赖将使我们能够使用Spring Data Redis来简化与Redis的交互。spring-boot-starter-data-redis提供了与Redis的基本集成,而jackson-datatype-jsr310则用于处理Java 8的日期和时间API。

2. 创建序列化配置类

在Redis中,数据的序列化和反序列化是非常重要的。我们需要创建一个配置类来定义如何序列化存储在Redis中的数据。以下是一个示例配置类:

package com.dahua.evo.event.business.redis.config;  import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
import org.springframework.data.redis.connection.RedisConnectionFactory;  
import org.springframework.data.redis.core.RedisTemplate;  
import org.springframework.data.redis.serializer.StringRedisSerializer;  @Configuration  
public class ConfigRedis {  @Autowired  private RedisConnectionFactory redisConnectionFactory;  @Bean  public RedisTemplate<String, Object> redisTemplate() {  RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();  // 序列化key  redisTemplate.setKeySerializer(new StringRedisSerializer());  redisTemplate.setValueSerializer(new StringRedisSerializer());  // 序列化hash  redisTemplate.setHashKeySerializer(new StringRedisSerializer());  redisTemplate.setHashValueSerializer(new StringRedisSerializer());  // 连接redis数据库  redisTemplate.setConnectionFactory(redisConnectionFactory);  return redisTemplate;  }  
}

在这个配置类中,我们定义了一个RedisTemplate的Bean,并设置了键和值的序列化方式为StringRedisSerializer,这使得我们在存储和读取数据时更加方便。

2.1 序列化的选择

在选择序列化方式时,StringRedisSerializer适用于简单的字符串数据,但在处理复杂对象时可能不够灵活。可以考虑使用Jackson2JsonRedisSerializer,它支持将Java对象序列化为JSON格式,便于存储和读取复杂数据结构:

import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;  
import com.fasterxml.jackson.databind.ObjectMapper;  // ...  @Bean  
public RedisTemplate<String, Object> redisTemplate() {  RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();  // 使用Jackson序列化  Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);  ObjectMapper objectMapper = new ObjectMapper();  objectMapper.findAndRegisterModules();  serializer.setObjectMapper(objectMapper);  redisTemplate.setKeySerializer(new StringRedisSerializer());  redisTemplate.setValueSerializer(serializer);  redisTemplate.setHashKeySerializer(new StringRedisSerializer());  redisTemplate.setHashValueSerializer(serializer);  redisTemplate.setConnectionFactory(redisConnectionFactory);  return redisTemplate;  
}

3. 配置YAML文件

接下来,我们需要在application.yml中配置Redis的连接信息。以下是一个示例配置:

spring:  redis:  host: 10.56.11.34  port: 38235  password: 909a2c647  database: 7  client-name: vehicleService  lettuce:  pool:  max-active: 20  # 连接池最大连接数(使用负值表示没有限制)  max-wait: -1    # 最大阻塞等待时间(负数表示没有限制)  max-idle: 5     # 连接池中最大空闲连接  min-idle: 0     # 连接池中最小空闲连接

在这里,我们配置了Redis的主机、端口、密码和数据库索引,以及连接池的相关参数,以确保我们的应用能够高效地与Redis进行交互。

3.1 连接池的配置

使用连接池可以有效管理Redis连接,提升应用的性能。Lettuce是Spring Boot中默认的Redis客户端,支持异步和响应式编程。通过配置连接池参数,可以根据实际负载调整最大活动连接数、最大空闲连接数等,以确保在高并发场景下的稳定性。

4. 使用Redis

现在,我们可以在Spring Boot应用中使用Redis了。以下是一个简单的控制器示例,展示了如何使用RedisTemplate进行数据的存储和读取:

import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.RestController;  import java.util.concurrent.TimeUnit;  @RestController  
public class TestController {  @Autowired  private RedisTemplate<String, Object> redisTemplate;  @GetMapping(value = "/test1")  public String getAllDevice1() {  this.redisTemplate.opsForValue().set("k1", "cnk", 30, TimeUnit.SECONDS);  System.out.println(this.redisTemplate.opsForValue().get("k1"));  return "test1";  }  
}

在这个示例中,我们使用opsForValue()方法将一个键值对存储到Redis中,并设置过期时间为30秒。然后,我们读取这个键的值并打印到控制台。

4.1 复杂数据类型的存储

在实际应用中,可能需要存储复杂数据类型,例如用户对象、订单信息等。可以直接将对象存储到Redis中,前提是使用合适的序列化方式。例如,假设我们有一个User类:

public class User {  private String id;  private String name;  private int age;  // getters and setters  
}

我们可以这样存储和读取:

// 读取对象  
User retrievedUser = (User) redisTemplate.opsForValue().get("user:1");  
if (retrievedUser != null) {  System.out.println("Retrieved User: " + retrievedUser.getName() + ", Age: " + retrievedUser.getAge());  
} else {  System.out.println("No user found with the key 'user:1'");  
}

4.2 列表、集合和哈希的使用

Redis支持多种类型的数据结构,这些结构在很多场景中都非常有用,比如:

  • 列表(List):用于存储多个有序的数据项。
  • 集合(Set):用于存储不重复的数据项。
  • 哈希(Hash):用于存储一个对象的多个属性。

下面分别给出示例使用方式。

4.2.1 列表示例
// 添加元素到列表  
redisTemplate.opsForList().leftPush("userQueue", user1);  
redisTemplate.opsForList().leftPush("userQueue", user2);  // 获取列表中的所有元素  
List<User> userList = redisTemplate.opsForList().range("userQueue", 0, -1);  
userList.forEach(user -> System.out.println("User from List: " + user.getName()));
4.2.2 集合示例
// 向集合中添加元素  
redisTemplate.opsForSet().add("userSet", user1, user2, user3);  // 检查用户是否在集合中  
Boolean exists = redisTemplate.opsForSet().isMember("userSet", user1);  
System.out.println("User exists in set: " + exists);
4.2.3 哈希示例
// 将用户对象的属性存储在哈希中  
redisTemplate.opsForHash().put("user:1", "name", "John Doe");  
redisTemplate.opsForHash().put("user:1", "age", 30);  // 获取哈希中的属性  
String name = (String) redisTemplate.opsForHash().get("user:1", "name");  
Integer age = (Integer) redisTemplate.opsForHash().get("user:1", "age");  
System.out.println("User Hash - Name: " + name + ", Age: " + age);

5.  处理事务和管道

Redis也支持事务和管道功能,这在需要执行一系列命令时非常有用,可以提高效率并保证原子性。

5.1 事务示例
// 开启一个事务  
List<Object> results = redisTemplate.executePipelined((redisOperations) -> {  redisOperations.opsForValue().set("key1", "value1");  redisOperations.opsForValue().set("key2", "value2");  return null;  
});  // 提交事务  
redisTemplate.exec();
5.2 管道示例

管道可以将多个Redis命令打包发送,提高批量操作的性能:

List<Object> executedResults = redisTemplate.executePipelined((operations) -> {  for (int i = 0; i < 10; i++) {  operations.opsForValue().set("pipelinedKey" + i, "value" + i);  }  return null;  
});  // 处理返回值  
System.out.println("Pipelined operations completed.");

6.  Redis的过期策略与持久化

Redis支持设置键的过期时间,对应于不再需要的数据可以被自动清除,节省存储空间。可以通过设置expire方法来实现这一功能:

redisTemplate.opsForValue().set("temporaryKey", "temporaryValue", 60, TimeUnit.SECONDS);

当需要持久化Redis中的数据时,可以选择RDBAOF(Append Only File)策略。RDB适用于定期快照,而AOF则适用于每次写操作后立即持久化,用户可以根据需求选择。

7.  Redis集群与分布式

随着微服务架构的流行,使用Redis集群可以帮助处理高并发和大流量请求。Redis集群将数据分片存储在不同节点中,实现横向扩展。如果要部署Redis集群,Spring Boot与Redis的集成也同样简单,只需将集群配置添加到application.yml中。

spring:  redis:  cluster:  nodes:  - 10.56.11.34:38235  - 10.56.11.35:38235  - 10.56.11.36:38235

8.  总结

通过以上步骤,我们成功地在Spring Boot项目中整合了Redis。这种整合不仅提高了数据的访问速度,还有效地减轻了数据库的压力。Redis的高性能和灵活性使其成为现代应用不可或缺的组成部分。

在本文中,我们深入探讨了如何在Spring Boot项目中使用Redis,详细讲解了不同数据结构的使用、序列化方式的选择、事务和管道的使用、以及Redis的过期策略与持久化方法。这些都是确保应用高效与稳定的关键。

希望这篇文章能够帮助你快速上手Spring Boot与Redis的整合,为你的项目增添更多的高效能和可扩展性。如果你对Redis的更多高级特性或在Spring Boot中的应用有兴趣,欢迎在评论区留言讨论,或与我进一步探讨。

相关文章:

在Spring Boot项目中整合Redis:高效数据存储与缓存的最佳实践

目录 1. 引入依赖 2. 创建序列化配置类 2.1 序列化的选择 3. 配置YAML文件 3.1 连接池的配置 4. 使用Redis 4.1 复杂数据类型的存储 4.2 列表、集合和哈希的使用 4.2.1 列表示例 4.2.2 集合示例 4.2.3 哈希示例 5. 处理事务和管道 5.1 事务示例 5.2 管道示例 6…...

什么是自动化办公

自动化办公是指使用技术工具或软件&#xff0c;通过预设流程或脚本&#xff0c;自动执行日常办公任务&#xff0c;从而提升效率、减少错误、节约时间的办公模式。它适用于需要重复性、规则明确的工作流程&#xff0c;让员工将精力集中在更具创造性和战略性的工作上。 自动化办公…...

搜索引擎是如何理解你的查询并提供精准结果的?

目录 一、搜索引擎简单介绍 二、搜索引擎整体架构和工作过程 &#xff08;一&#xff09;整体分析 &#xff08;二&#xff09;爬虫系统 三个基本点 爬虫系统的工作流程 关键考虑因素和挑战 &#xff08;三&#xff09;索引系统 网页处理阶段 预处理阶段 反作弊分析…...

国内外网络安全政策动态(2024年11月)

▶︎ 1.13项网络安全国家标准自11月1日起实施 11月1日起&#xff0c;《网络安全技术 信息技术安全评估准则》等13项网络安全国家标准开始实施&#xff0c;其中&#xff0c;《网络安全技术 信息技术安全评估准则 第1-5部分》《网络安全技术 信息技术安全评估方法》等6项推荐性国…...

服务器---centos上前端从0到1配置项目部署

在进行前端开发时,我们经常会面临将项目部署到服务器上的需求。为了更好地管理和保护我们的前端应用,我们通常会使用反向代理来实现对后端服务的访问。而对于使用CentOS系统的开发者来说,Nginx就是一个非常强大且可靠的工具。 在本文中,我们将探讨如何在CentOS系统上配置Ng…...

【前端】深入解析 JavaScript 中的 instanceof 运算符与 number 数据类型 和 Number 对象 区别辨析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;理论基础&#xff1a;instanceof 运算符的设计初衷与核心功能基础定义与应用示例解析代码分解 &#x1f4af;typeof 与 instanceof&#xff1a;两种类型检测方法的语义与…...

为什么类 UNIX 操作系统通常内置编译器?为什么 Windows 更倾向于直接使用二进制文件?

操作系统是否内置编译器&#xff0c;取决于该系统的设计目标、用户群体以及常见的使用场景。以下是内置编译器和直接使用二进制的设计理念和原因的分析&#xff1a; 为什么类 UNIX 操作系统通常内置编译器&#xff1f; 面向开发者的需求&#xff1a; 类 UNIX 系统&#xff08;如…...

Ubuntu安装grafana

需求背景&#xff1a;管理服务器&#xff0c;并在线预警&#xff0c;通知 需求目的&#xff1a; 及时获取服务器状态 技能要求&#xff1a; 1、ubuntu 2、grafana 3、prometheus 4、node 步骤&#xff1a; 一、grafana安装 1、准备系统环境&#xff0c;配置号网络 2、…...

Java阶段三06

第3章-第6节 一、知识点 理解MVC三层模型、理解什么是SpringMVC、理解SpringMVC的工作流程、了解springMVC和Struts2的区别、学会使用SpringMVC封装不同请求、接收参数 二、目标 理解MVC三层模型 理解什么是SpringMVC 理解SpringMVC的工作流程 学会使用SpringMVC封装请求…...

C# .NET CORE 开发问题汇总

1. error MSB4803: .NET Core 版本的 MSBuild 不支持“ResolveComReference”。请使用 .NET Framework 版本的 MSBuild。 引用了一个COM组件, 使用donet 命令时,提示不支持, 可以先将项目设置为x86以构建, 将COM引用添加到核心项目中&#xff0c;构建它&#xff0c;在obj\x86\…...

短视频矩阵搭建/源码部署揭秘

短视频矩阵源码开发部署涉及使用开源技术构建和配置短视频平台。这一过程涵盖了从前端界面设计到后端逻辑处理&#xff0c;再到视频内容的存储管理的多个方面。以下是对关键技术的详细分析&#xff1a; 前端技术&#xff1a;为了提供流畅且互动性强的用户界面&#xff0c;短视…...

SpringBoot配置文件

文章目录 基本语法数据类型写法举例行内写法级联写法 配置提示用法举例逗号分隔默认值单个值集合值 映射到类 注意事项引用 基本语法 key: value形式&#xff0c;kv之间有空格大小写敏感使用缩进表示层级关系&#xff0c;缩进不允许使用tab&#xff0c;只允许空格。缩进的空格…...

[漏洞挖掘与防护] 05.CVE-2018-12613:phpMyAdmin 4.8.1后台文件包含缺陷复现及防御措施

这是作者新开的一个专栏——“漏洞挖掘与防护”,前期会复现各种经典和最新漏洞,并总结防护技巧;后期尝试从零学习漏洞挖掘技术,包括Web漏洞和二进制及IOT相关漏洞,以及Fuzzing技术。新的征程,新的开启,漫漫长征路,偏向虎山行。享受过程,感谢您的陪伴,一起加油~ 欢迎关…...

第四十七篇 Vision Transformer(VIT)模型解析

ViT&#xff08;Vision Transformer&#xff09;模型是一种基于Transformer架构的视觉模型&#xff0c;它成功地将Transformer从自然语言处理&#xff08;NLP&#xff09;领域引入到计算机视觉&#xff08;CV&#xff09;领域&#xff0c;专门用于处理图像数据。以下是对ViT模型…...

Redis篇-4--原理篇3--Redis发布/订阅(Pub/Sub)

1、概述 Redis 发布/订阅&#xff08;Publish/Subscribe&#xff0c;简称 Pub/Sub&#xff09;是一种消息传递模式&#xff0c;允许客户端订阅一个或多个通道&#xff08;channel&#xff09;&#xff0c;并接收其他客户端发布到这些通道的消息。 2、Redis 发布/订阅的主要概…...

Spring Boot 3 中Bean的配置和实例化详解

一、引言 在Java企业级开发领域&#xff0c;Spring Boot凭借其简洁、快速、高效的特点&#xff0c;迅速成为了众多开发者的首选框架。Spring Boot通过自动配置、起步依赖等特性&#xff0c;极大地简化了Spring应用的搭建和开发过程。而在Spring Boot的众多核心特性中&#xff…...

一文理解 “Bootstrap“ 在统计学背景下的含义

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一文理解 “Bootstrap“ 在统计学背景下的含义 类比&#xff1a;重新抽样 假设我参加了班级的考试&#xff0c;每位同学都获得了一个成绩。现在&#xff0c;我想了解整个班级的平均成绩&#xff0c;但…...

多媒体文件解复用(Demuxing)过程

多媒体文件的解复用&#xff08;Demuxing&#xff09;过程指的是从一个多媒体容器文件&#xff08;如 MP4、MKV、AVI 等&#xff09;中提取不同类型的多媒体数据流&#xff08;例如视频流、音频流、字幕流等&#xff09;的过程。 容器文件本身并不包含实际的视频或音频数据&…...

ARINC 标准全解析:航空电子领域多系列标准的核心内容、应用与重要意义

ARINC标准概述 ARINC标准是航空电子领域一系列重要的标准规范&#xff0c;由航空电子工程委员会&#xff08;AEEC&#xff09;编制&#xff0c;众多航空公司等参与支持。这些标准涵盖了从飞机设备安装、数据传输到航空电子设备功能等众多方面&#xff0c;确保航空电子系统的兼…...

开源架构安全深度解析:挑战、措施与未来

开源架构安全深度解析&#xff1a;挑战、措施与未来 一、引言二、开源架构面临的安全挑战&#xff08;一&#xff09;代码漏洞 —— 隐藏的定时炸弹&#xff08;二&#xff09;依赖项安全 —— 牵一发而动全身&#xff08;三&#xff09;社区安全 —— 开放中的潜在危机 三、开…...

Python装饰器设计模式:为函数增添风味

Python装饰器设计模式&#xff1a;为函数增添风味 什么是装饰器&#xff1f;为什么需要装饰器&#xff1f;如何使用装饰器&#xff1f;示例1&#xff1a;简单的装饰器示例2&#xff1a;带参数的装饰器 装饰器的使用场景总结 大家好&#xff0c;今天我们要学习一个非常有趣的Pyt…...

Vue.js的生命周期

Vue.js 是一个构建用户界面的渐进式框架&#xff0c;它提供了一个响应式和组件化的方式来构建前端应用。了解 Vue 的生命周期对于开发者来说至关重要&#xff0c;因为它可以帮助我们更好地控制组件的状态和行为。本文将详细介绍 Vue 的生命周期&#xff0c;并提供相应的代码示例…...

【数据库】关系代数和SQL语句

一 对于教学数据库的三个基本表 学生S(S#,SNAME,AGE,SEX) 学习SC(S#,C#,GRADE) 课程(C#,CNAME,TEACHER) &#xff08;1&#xff09;试用关系代数表达式和SQL语句表示&#xff1a;检索WANG同学不学的课程号 select C# from C where C# not in(select C# from SCwhere S# in…...

Pytest测试用例使用小结

基础使用 Pytest 测试用例实现代码 import pytest from server.service import Servicepytest.fixture def service():return Service(logger)class TestService:classmethoddef setup_class(cls):"""初始化设置一次:return:"""logger.info(&q…...

KV Shifting Attention Enhances Language Modeling

基本信息 &#x1f4dd; 原文链接: https://arxiv.org/abs/2411.19574&#x1f465; 作者: Mingyu Xu, Wei Cheng, Bingning Wang, Weipeng Chen&#x1f3f7;️ 关键词: KV shifting attention, induction heads, language modeling&#x1f4da; 分类: 机器学习, 自然语言处…...

从 Zuul 迁移到 Spring Cloud Gateway:一步步实现服务网关的升级

从 Zuul 迁移到 Spring Cloud Gateway&#xff1a;一步步实现服务网关的升级 迁移前的准备工作迁移步骤详解第一步&#xff1a;查看源码第二步&#xff1a;启动类迁移第三步&#xff1a;引入 Gateway 依赖第四步 编写bootstrap.yaml第五步&#xff1a;替换路由配置第六步&#…...

推荐几款国外AI音频工具

【加拿大】Resemble AI - 提供AI驱动的语音合成 【加拿大】Resemble AI - 提供AI驱动的语音合成和克隆工具 Resemble,AI提供AI驱动的语音合成和克隆工具,帮助用户高效生成和处理语音内容,其语音合成功能可以自动生成自然流畅的语音,提升音频项目的表现力,Resemble,AI的语音克…...

导入excel动态生成海报

需求&#xff1a;给出一份excel表格&#xff08;1000条数据&#xff09;,要将表格中的字段数据渲染到一张背景图片上&#xff0c;然后再下载图片&#xff0c;貌似浏览器做了限制&#xff0c;当连续下载10张图片后就不在下载了&#xff0c;然后用异步操作解决了这个问题。 // e…...

Unity 使用LineRenderer制作模拟2d绳子

效果展示&#xff1a; 实现如下&#xff1a; 首先&#xff0c;直接上代码&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;public class LineFourRender : MonoBehaviour {public Transform StartNode;public Transform MidNod…...

Android启动优化指南

文章目录 前言一、启动分类与优化目标1、冷启动1.1 优化思路1.2 延迟初始化与按需加载1.3 并行加载与异步执行1.4 资源优化与懒加载1.5 内存优化与垃圾回收控制 2. 温启动2.1 优化应用的生命周期管理2.2 数据缓存与懒加载2.3 延迟渲染与视图优化 3. 热启动3.1 保持应用的状态3.…...

每日一练 | 华为 eSight 创建的缺省角色

01 真题题目 下列选项中&#xff0c;不属于华为 eSight 创建的缺省角色的是&#xff1a; A. Administrator B. Monitor C. Operator D. End-User 02 真题答案 D 03 答案解析 华为 eSight 是一款综合性的网络管理平台&#xff0c;提供了多种管理和监控功能。 为了确保不同用…...

ubuntu 手动更换库文件解决nvcc -V和nvidia-smi不一致

NVML 库版本与驱动不匹配 问题现象问题排查限制解决禁止自动更新降低库版本 问题现象 笔主在训练之前想查看gpu占用情况&#xff0c;使用watch -n 1 nvidia-smi发现&#xff1a; 且在推理、训练时无法使用到显卡。 问题排查 cat /proc/driver/nvidia/version查看当前显卡驱…...

DataSophon集成CMAK KafkaManager

本次集成基于DDP1.2.1 集成CMAK-3.0.0.6 设计的json和tar包我放网盘了. 通过网盘分享的文件&#xff1a;DDP集成CMAK 链接: https://pan.baidu.com/s/1BR70Ajj9FxvjBlsOX4Ivhw?pwdcpmc 提取码: cpmc CMAK github上提供了zip压缩包.将压缩包解压之后 在根目录下加入启动脚本…...

2024-2025关于华为ICT大赛考试平台常见问题

一、考生考试流程 第一步&#xff1a;收到正式考试链接后点击考试链接并登录&#xff1b; 第二步&#xff1a;请仔细阅读诚信考试公约&#xff0c;阅读完成后勾选“我已阅读”&#xff0c;并点击确定&#xff1b; 第三步&#xff1a;上传身份证人像面进行考前校验&#xff0…...

Halcon中lines_gauss(Operator)算子原理及应用详解

在Halcon图像处理库中&#xff0c;lines_gauss算子是一个用于检测图像中线条的强大工具&#xff0c;它能够提供亚像素精度的线条轮廓。以下是对lines_gauss (ImageReducedTracks, Lines, 1.5, 1, 8, ‘light’, ‘true’, ‘bar-shaped’, ‘true’)算子的详细解释&#xff1a;…...

Flink集群搭建整合Yarn运行

Flink 集群 1. 服务器规划 服务器h1、h4、h5 2. StandAlone 模式&#xff08;不推荐&#xff09; 2.1 会话模式 在h1操作 #1、解压 tar -zxvf flink-1.19.1-bin-scala_2.12.tgz -C /app/#2、修改配置文件 cd /app/flink-1.19.1/conf vim conf.yaml ##内容&#xff1a;## j…...

FPGA工作原理、架构及底层资源

FPGA工作原理、架构及底层资源 文章目录 FPGA工作原理、架构及底层资源前言一、FPGA工作原理二、FPGA架构及底层资源 1.FPGA架构2.FPGA底层资源 2.1可编程输入/输出单元简称&#xff08;IOB&#xff09;2.2可配置逻辑块2.3丰富的布线资源2.4数字时钟管理模块(DCM)2.5嵌入式块 …...

Postman的使用

&#xff08;一&#xff09;创建Collections&#xff1a;Collections->New Collection->创建界面填入Collection名称&#xff0c;比如某个系统/模块名&#xff0c;描述里可以稍微更详细的介绍集合的信息 Collection创建时&#xff0c;还可以定义Authorization 如下&#…...

【报错】新建springboot项目时缺少resource

1.问题描述 在新建springboot项目时缺少resources,刚刚新建时的目录刚好就是去掉涂鸦的resources后的目录 2.解决方法 步骤如下&#xff1a;【文件】--【项目结构】--【模块】--【源】--在main文件夹右击选择新建文件夹并命名为resources--在test文件夹右击选择新建文件夹并命名…...

phpstudy访问本地localhost无目录解决办法

phpstudy访问本地localhost无目录解决办法 错误&#xff1a; 直接访问本地http://localhost/&#xff0c;出现hello word&#xff0c;或者直接报错&#xff0c;无法出现本地目录 解决办法&#xff1a; 对于Phpstudy-2018版本来说&#xff1a; 找到这里的Phpstudy设置 2. 打…...

架构16-向微服务迈进

零、文章目录 架构16-向微服务迈进 1、向微服务迈进 &#xff08;1&#xff09;软件开发中的“银弹”概念 **背景&#xff1a;**软件开发过程中常常出现工期延误、预算超支、产品质量低劣等问题&#xff0c;这使得管理者、程序员和用户都渴望找到一种能够显著降低成本的“银…...

基于Springboot汽车资讯网站【附源码】

基于Springboot汽车资讯网站 效果如下&#xff1a; 系统主页面 汽车信息页面 系统登陆页面 汽车信息推荐页面 经销商页面 留言反馈页面 用户管理页面 汽车信息页面 研究背景 随着信息技术的快速发展和互联网的普及&#xff0c;互联网已成为人们查找信息的重要场所。汽车资讯…...

Tomcat项目本地部署

今天分享一下如何在本地&#xff0c;不依赖于idea部署聚合项目&#xff0c;以我做过的哈米音乐项目为例&#xff0c;项目结构如下&#xff1a; ham-core模块为公共模块&#xff0c;我们只需将另外三个模块&#xff1a;前台、后台、文件服务器打包&#xff0c;将打好的jar、war包…...

【OpenCV】直方图

理论 可以将直方图视为图形或曲线图&#xff0c;从而使您对图像的强度分布有一个整体的了解。它是在X轴上具有像素值(不总是从0到255的范围)&#xff0c;在Y轴上具有图像中相应像素数的图。 这只是理解图像的另一种方式。通过查看图像的直方图&#xff0c;您可以直观地了解该…...

pika:适用于大数据量持久化的类redis组件|jedis集成pika(二)

文章目录 0. 引言1. pika客户端支持2. jedis集成pika3. pika性能测试 0. 引言 上节我们讲解了pika的搭建&#xff0c;这节我们来看下如何在java项目中利用jedis集成pika 1. pika客户端支持 pika支持的客户端与redis完全一致&#xff0c;所以理论上redis支持的客户端pika也都…...

Linux 进程间通信

Linux进程间通信 进程间通信&#xff08;IPC&#xff0c;Inter-Process Communication&#xff09;在 Linux 下常用的方法包括&#xff1a; 1&#xff09;管道&#xff08;Pipe&#xff09; 2&#xff09;有名管道&#xff08;FIFO&#xff09; 3&#xff09;消息队列&#x…...

【C++】快速排序详解与优化

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;快速排序的核心思想1. 算法原理2. 算法复杂度分析时间复杂度空间复杂度 &#x1f4af;快速排序的代码实现与解析代码实现代码解析1. 递归终止条件2. 动态分配子数组3. 分区…...

【JAVA高级篇教学】第二篇:使用 Redisson 实现高效限流机制

在高并发系统中&#xff0c;限流是一项非常重要的技术手段&#xff0c;用于保护后端服务&#xff0c;防止因流量过大导致系统崩溃。本文将详细介绍如何使用 Redisson 提供的 RRateLimiter 实现分布式限流&#xff0c;以及其原理、使用场景和完整代码示例。 目录 一、什么是限流…...

NanoLog起步笔记-1

nonolog起步笔记-1 背景与上下文写在前面Nanolog与一般的实时log的异同现代log的一般特性Nanolog的选择 背景与上下文 因为工作中用到了NanoLog。有必要研究一下。 前段时间研究了许多内容&#xff0c;以为写了比较详实的笔记&#xff0c;今天找了找&#xff0c;不仅笔记没找到…...

vs打开unity项目 新建文件后无法自动补全

问题 第一次双击c#文件自动打开vs编辑器的时候能自动补全&#xff0c;再一次在unity中新建c#文件后双击打开发现vs不能自动补全了。每次都要重新打开vs编辑器才能自动补全&#xff0c;导致效率很低&#xff0c;后面发现是没有安装扩展&#xff0c;注意扩展和工具的区别。 解决…...