Redis分片集群+MQ处理高并发
Redis的三大集群模式:主从复制、哨兵模式和Cluster模式。每种模式都有其特点和应用场景,具体如下:
- 主从复制模式:适用于数据备份和读写分离场景,配置简单,但在主节点故障时需要手动切换。
- 哨兵模式:在主从复制的基础上实现自动故障转移,提高高可用性,适用于高可用性要求较高的场景。
- Cluster模式:通过数据分片和负载均衡实现大规模数据存储和高性能,适用于大规模数据存储和高性能要求场景。
在实际应用中,可以根据系统的需求和特点选择合适的Redis集群模式,以实现高可用性、高性能和大规模数据存储。
一.Redis分片集群:
1.什么是Redis分片集群?
Redis 集群(Redis Cluster)是一种分布式的 Redis 实现,它可以将数据分布到多个 Redis 节点上,从而实现 数据分片(Sharding)和 高可用性。Redis 集群的分片方式是通过哈希槽(Hash Slots)将数据分布到多个节点中,而每个 Redis 集群节点负责一部分哈希槽的管理。
2.工作原理:
哈希槽(Hash Slots): Redis 集群将数据分配到 16384 个哈希槽中。每个键会通过哈希函数计算出它所属的哈希槽,然后根据哈希槽将数据存储到对应的 Redis 节点上。
节点角色:
- 主节点(Master Node):负责存储数据并处理读写请求。
- 从节点(Replica Node):用于备份主节点数据,提供高可用性。在主节点宕机时,从节点可以被提升为新的主节点。
数据迁移: Redis 集群会根据集群状态进行 数据迁移,当节点加入或退出时,数据会自动迁移到新的节点,确保数据分布均衡。
故障转移: 如果某个主节点发生故障,Redis 集群会自动将一个从节点提升为主节点,确保系统持续可用。
客户端与集群的交互: 客户端不直接访问集群中的节点,而是通过集群的代理来实现。客户端会根据哈希槽将请求发送到正确的 Redis 节点。客户端还会根据集群的状态信息自动切换节点。
二.创建Redis集群:
我们可以使用 redis-cli
工具创建 Redis 集群,需要以下几个步骤。首先,确保你已经安装了 Redis,并且有多个 Redis 实例在不同的端口上运行。这些实例将用于构建 Redis 集群。
1.启动 Redis 实例:
在创建 Redis 集群之前,需要至少 6 个 Redis 实例(3 个主节点和 3 个从节点)。每个实例都需要配置为支持集群模式。
(1)配置每个 Redis 实例:
确保每个 Redis 实例的配置文件中启用了集群模式。打开每个 Redis 实例的配置文件(通常位于 redis.conf
),并确保以下选项已启用:
# 启用集群模式
cluster-enabled yes
# 配置集群的配置文件路径
cluster-config-file nodes.conf
# 配置集群的超时时间
cluster-node-timeout 5000
# 启用 AOF(追加文件)以保证数据持久化
appendonly yes
(2)启动 Redis 实例:
假设已经创建了 6 个 Redis 配置文件并且已经修改了配置(每个配置文件的端口不同)。我们可以通过以下命令启动 Redis 实例:
redis-server /path/to/redis.conf
假设你有以下端口配置:
- Redis 实例 1:
127.0.0.1:7000
- Redis 实例 2:
127.0.0.1:7001
- Redis 实例 3:
127.0.0.1:7002
- Redis 实例 4:
127.0.0.1:7003
- Redis 实例 5:
127.0.0.1:7004
- Redis 实例 6:
127.0.0.1:7005
启动这些实例:
redis-server /path/to/redis_7000.conf
redis-server /path/to/redis_7001.conf
redis-server /path/to/redis_7002.conf
redis-server /path/to/redis_7003.conf
redis-server /path/to/redis_7004.conf
redis-server /path/to/redis_7005.conf
目前这只是启动了 6 个 Redis 实例,它们并没有指定主节点和从节点的角色,因此还需要手动配置集群的主从关系。
2.使用 redis-cli
创建 Redis 集群:
一旦 Redis 实例启动并且配置为支持集群模式,我们就可以使用 redis-cli
工具来创建 Redis 集群。
(1)使用 redis-cli --cluster
命令:
redis-cli
提供了一个集群管理命令--cluster
,允许你将多个 Redis 实例组织成一个集群。
通常,Redis 集群需要 至少 3 个主节点,每个主节点都有 一个或多个从节点。我们可以通过运行以下命令来创建 Redis 集群并自动配置主从节点:
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
:这些是要加入集群的 Redis 实例的 IP 和端口。--cluster-replicas 1
:指定每个主节点有 1 个从节点。这样这个命令会自动创建 3 个主节点 和 3 个从节点。
(2)确认集群创建:
在运行上述命令后,redis-cli
会要求你确认是否要创建集群,输入 yes
即可继续。
>>> Proceed with the cluster creation? (yes/no): yes
然后,Redis 会自动将节点配置为 Redis 集群,并且分配槽。
(3)检查集群状态:
创建集群后,你可以使用 redis-cli
连接到集群中的任一节点,执行以下命令查看集群的状态:
redis-cli -c -h 127.0.0.1 -p 7000 cluster info
这会显示集群的状态信息,例如:
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:3
cluster_stats_messages_ping_sent:0
cluster_stats_messages_pong_sent:0
cluster_stats_messages_ping_received:0
cluster_stats_messages_pong_received:0
三.配置 RabbitMQ 消息队列:
(1)安装RabbitMQ:
我们需要先安装 RabbitMQ,这里可以参考 RabbitMQ 官方文档进行安装。
也可以观看下面博客:微服务架构 --- 使用RabbitMQ进行异步处理_rabbtimq 消息异步处理-CSDN博客
(2)添加依赖:
在 pom.xml
中添加 Spring Boot 和 RabbitMQ 的依赖:
<dependencies><!-- Spring Boot Starter AMQP --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><!-- Spring Data Redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
</dependencies>
(3)配置 RabbitMQ:
在 application.properties
或 application.yml
中配置 RabbitMQ 连接:
spring:rabbitmq:host: localhost # RabbitMQ 服务器地址port: 5672 # RabbitMQ 服务器端口username: guest # RabbitMQ 用户名password: guest # RabbitMQ 密码virtual-host: / # 虚拟主机listener:simple:# 配置消费者并发数concurrency: 3# 配置最大并发数max-concurrency: 10template:# 配置消息发送超时时间receive-timeout: 10000msaddresses:# 如果有多个 RabbitMQ 集群节点,可以配置多个地址- 127.0.0.1:5672- 192.168.1.10:5672
四.使用 Redis 和 RabbitMQ 处理高并发业务:
业务场景:
假设你有一个双十一大促活动,多个用户同时进行商品抢购。你需要保证:
- 商品库存数量的准确性(使用 Redis 分片集群来保证高可用和性能)。
- 用户抢购操作的顺序性(使用 RabbitMQ 消息队列来保证消息的顺序处理)。
系统架构:
- Redis 分片集群:用于存储商品的库存信息,支持高并发的库存操作。
- RabbitMQ:用于异步处理用户的抢购请求,避免过多并发直接操作数据库。
1.创建 Redis 配置类:
在 Spring Boot 项目中,通常使用 Lettuce
或 Jedis
作为 Redis 客户端。以下是使用 Lettuce 客户端配置 Redis 集群的 application.yml
配置示例:
spring:redis:cluster:# Redis 集群节点的地址和端口nodes:- 127.0.0.1:7000- 127.0.0.1:7001- 127.0.0.1:7002- 127.0.0.1:7003- 127.0.0.1:7004- 127.0.0.1:7005password: yourpassword # Redis 的密码timeout: 2000ms # Redis 连接的超时时间jedis:pool:# Redis 连接池配置max-active: 8 # 最大连接数max-wait: 5000ms # 最大等待时间max-idle: 8 # 最大空闲连接数min-idle: 4 # 最小空闲连接数
我们需要创建一个配置类来设置 Redis 集群的连接。Spring Boot 默认使用 Lettuce 作为 Redis 客户端。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.ClusterConfiguration;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import redis.clients.jedis.Jedis;@Configuration
public class RedisConfig {@Beanpublic JedisConnectionFactory redisConnectionFactory() {RedisClusterConfiguration clusterConfiguration = new RedisClusterConfiguration();clusterConfiguration.setClusterNodes(Arrays.asList(new RedisNode("127.0.0.1", 7000),new RedisNode("127.0.0.1", 7001),new RedisNode("127.0.0.1", 7002),new RedisNode("127.0.0.1", 7003),new RedisNode("127.0.0.1", 7004),new RedisNode("127.0.0.1", 7005)));return new JedisConnectionFactory(clusterConfiguration);}@Beanpublic RedisTemplate<String, String> redisTemplate() {RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(redisConnectionFactory());return redisTemplate;}
}
2.创建 RabbitMQ 配置类:
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RabbitConfig {@Beanpublic Queue queue() {return new Queue("orderQueue", true); // 订单队列,持久化}
}
3.创建订单服务:
现在我们来创建一个订单服务,处理抢购业务。假设每个商品有一个库存,并且多个用户抢购同一商品时,库存会减少。
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;@Service
public class OrderService {private static final String PRODUCT_STOCK_KEY = "product_stock"; // 商品库存的 Redis 键@Autowiredprivate RedisTemplate<String, String> redisTemplate;@Autowiredprivate RabbitTemplate rabbitTemplate;// 订单请求处理逻辑public void processOrder(String productId) {// 检查 Redis 中的商品库存String stock = redisTemplate.opsForValue().get(PRODUCT_STOCK_KEY + ":" + productId);if (stock != null && Integer.parseInt(stock) > 0) {// 执行购买流程,将库存减1redisTemplate.opsForValue().decrement(PRODUCT_STOCK_KEY + ":" + productId);// 将订单消息发送到消息队列rabbitTemplate.convertAndSend("orderQueue", productId);} else {System.out.println("库存不足,无法购买!");}}// 监听队列消息,处理订单@RabbitListener(queues = "orderQueue")public void handleOrder(Message message) {String productId = new String(message.getBody());System.out.println("处理订单:" + productId);// TODO: 在这里处理订单逻辑,比如更新数据库等}
}
4.创建控制器:
我们为前端提供一个 REST API 来模拟用户发起抢购请求。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class OrderController {@Autowiredprivate OrderService orderService;@GetMapping("/buy")public String buy(@RequestParam String productId) {// 处理抢购逻辑orderService.processOrder(productId);return "请求已发出,等待处理!";}
}
5.防止超卖问题(Redis分布式锁):
为了防止多个用户同时抢购同一商品并导致库存数据超卖,我们可以使用 Redis 的分布式锁来保证同一时刻只有一个线程能够修改商品库存。
我们可以使用 Redis 的 SETNX
命令来获取锁,操作完成后释放锁。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;@Service
public class OrderService {private static final String PRODUCT_STOCK_KEY = "product_stock"; // 商品库存的 Redis 键private static final String LOCK_KEY = "lock"; // Redis 锁的键@Autowiredprivate RedisTemplate<String, String> redisTemplate;public void processOrder(String productId) {// 尝试获取锁Boolean locked = redisTemplate.opsForValue().setIfAbsent(LOCK_KEY, "LOCKED");if (locked != null && locked) {try {// 检查库存String stock = redisTemplate.opsForValue().get(PRODUCT_STOCK_KEY + ":" + productId);if (stock != null && Integer.parseInt(stock) > 0) {// 执行购买流程,将库存减1redisTemplate.opsForValue().decrement(PRODUCT_STOCK_KEY + ":" + productId);// 将订单消息发送到消息队列rabbitTemplate.convertAndSend("orderQueue", productId);} else {System.out.println("库存不足,无法购买!");}} finally {// 释放锁redisTemplate.delete(LOCK_KEY);}} else {System.out.println("抢购人数过多,请稍后再试!");
}
setIfAbsent(LOCK_KEY, "LOCKED")
方法用于获取一个分布式锁。它会尝试将指定的键LOCK_KEY
设置为LOCKED
,如果该键不存在时,才会成功设置,并返回true
表示锁定成功。如果该键已经存在(即其他线程或进程已经获得锁),则返回false
,表示锁定失败。- Redis 是通过
setIfAbsent
实现的原子操作,因此可以确保只有一个线程或进程可以获得锁,其他的请求会被阻塞或延迟处理。
相关文章:
Redis分片集群+MQ处理高并发
Redis的三大集群模式:主从复制、哨兵模式和Cluster模式。每种模式都有其特点和应用场景,具体如下: 主从复制模式:适用于数据备份和读写分离场景,配置简单,但在主节点故障时需要手动切换。哨兵模式ÿ…...
Linux内核 -- UIO (User-space I/O) 简介与使用笔记
UIO (User-space I/O) 简介 UIO (User-space I/O) 是 Linux 内核提供的一种机制,用于简化设备驱动的开发。它将设备的硬件资源(如内存映射、中断等)通过简单的接口暴露给用户空间程序,从而使用户可以在用户空间编写复杂的设备逻辑…...
《计算机组成及汇编语言原理》阅读笔记:p86-p115
《计算机组成及汇编语言原理》学习第 6 天,p86-p115 总结,总计 20 页。 一、技术总结 1.if statement 2.loop 在许多编程语言中,有类种循环:一种是在程序开头检测条件(test the condition),另一种是在程序末尾检测条件。 3.C…...
Python爬虫实战(保姆级登网页信息爬取教程)
此blog为爬虫实战教学,代码已附上,可以复制运行。若要直接看实战代码翻到博客后半部分。 本文使用selenium库进行爬虫,实现爬取数据操作,此库是通过模仿用户的操作进行对页面的处理。了解了这个思维模式,可以对代码进…...
探索CSDN博客数据:使用Python爬虫技术
探索CSDN博客数据:使用Python爬虫技术 在数字化的浪潮中,数据的获取与分析变得日益关键。CSDN作为中国领先的IT社区和服务平台,汇聚了海量的技术博客与文章,成为一座蕴藏丰富的数据宝库。本文将引领您穿梭于Python的requests和py…...
PPT画图——如何设置导致图片为600dpi
winr,输入regedit打开注册表 按路径找,HKEY_CURRENT_USER\Software\Microsoft\Office\XX.0\PowerPoint\Options(xx为版本号,16.0 or 15.0或则其他)。名称命名:ExportBitmapResolution 保存即可,…...
uniapp——APP读取bin文件,解析文件的数据内容(二)
文章目录 读取bin文件内容,发送给蓝牙设备;上传文件返回数据格式通过URL路径获取文件对象,读取文件的数据内容file对象返回数据格式 读取bin文件内容,发送给蓝牙设备; 上传文件,根据返回路径,解…...
Paddler负载均衡器
Paddler负载均衡器 Paddler本身是用Go语言编写的,没有直接的Python接口,但可以通过以下方式在Python中使用: 执行命令行调用 在Python中可以使用 subprocess 模块来调用Paddler的命令行工具,实现负载均衡功能 。例如: import subprocessdef start_paddler_agent():com…...
`we_chat_union_id IS NOT NULL` 和 `we_chat_union_id != ‘‘` 这两个条件之间的区别
文章目录 1、什么是空字符串?2、两个引号之间加上空格 好的,我们来详细解释一下 we_chat_union_id IS NOT NULL 和 we_chat_union_id ! 这两个条件之间的区别,以及它们在 SQL 查询中的作用: 1. we_chat_union_id IS NOT NULL 含…...
clicbot可立宝编程 易错归纳笔记
1、屏幕播放表情模块和等待时间 易错点1: (1)等待时间: (a)不是等上一个代码执行完,再执行等待时间,这是错误的。 (b)等待时间上面的代码1刚开始执行,上面的代码2也刚开始执行,不是等到代码1执行完…...
MySQL 数据”丢失”事件之 binlog 解析应用
事件背景 客户反馈在晚间数据跑批后,查询相关表的数据时,发现该表的部分数据在数据库中不存在 从应用跑批的日志来看,跑批未报错,且可查到日志中明确显示当时那批数据已插入到数据库中 需要帮忙分析这批数据丢失的原因。 备注:考虑信息敏感性,以下分析场景测试环境模拟,相关数据…...
基于人工智能时代政务智慧转型的实现前景初探
去年6月,我有幸聆听了由华政公共管理与政治学院精心组织的2019年MPA研究生高端论坛,上午场:由董海军(中共上海市委机构编制委员会办公室处长)主讲的深化机构改革的探索与实践,以及下午场:由束金…...
【论文笔记】Visual Alignment Pre-training for Sign Language Translation
🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: Visual Alignment Pre-tra…...
一起学Git【第五节:git版本回退】
git reset 是 Git 版本控制系统中一个非常强大的命令,它可以用来重置当前分支到指定的状态,即执行撤销操作或者回退至之前的某一版本,他可以回退至之前的某一个提交状态。有三种主要的用法:git reset --soft;git reset --hard;git reset --mixed; 对比如图: 1.git res…...
金蝶V10中间件的使用
目录 环境准备搭建过程配置修改应用部署 环境准备 Linux内核服务器JDK1.8安装包:AAS-V10.zip程序包:***.war 搭建过程 将安装包上传至服务器opt目录下,官方给定的默认服务主目录为“/opt/AAS-V10/ApusicAS/aas/”;解压安装包(解…...
hi168大数据离线项目环境搭建
hi168大数据离线项目环境搭建 ## **1. 服务器准备**##### 1.1 创建集群应用节点 集群服务器使用“我的应用“中的Ubuntu22.04集群模版创建三个节点应用,并且进入“我的应用”中去修改一下节点名称(node1对应master,node2对应hadoop1…...
Ubuntu 22.04安装Docker
陈拓 2024/10/19-2024/12/26 0. 概述 docker是容器(Container),有点像一个轻量级的虚拟机。 容器是一种轻量级、可移植、并将应用程序进行的打包的技术,使应用程序可以在几乎任何地方以相同的方式运行。Docker将镜像文件运行起…...
穿山甲等广告联盟依据哪些维度给APP、小程序结算广告变现收益
媒体在开展广告变现商业化时,最关心的是变现收益问题,所运营的不同体量的APP、小程序能产生多少广告变现收益。#广告联盟# 广告变现的价格、收益不是一成不变的,广告转化是影响广告收益的重要因素之一。广告平台针对整个变现链路上的各环节&…...
【ES6复习笔记】迭代器(10)
什么是迭代器? 迭代器(Iterator)是一种对象,它能够遍历并访问一个集合中的元素。在 JavaScript 中,迭代器提供了一种统一的方式来处理各种集合,如数组、字符串、Map、Set 等。通过迭代器,我们可…...
ROS1入门教程6:复杂行为处理
一、新建项目 # 创建工作空间 mkdir -p demo6/src && cd demo6# 创建功能包 catkin_create_pkg demo roscpp rosmsg actionlib_msgs message_generation tf二、创建行为 # 创建行为文件夹 mkdir action && cd action# 创建行为文件 vim Move.action# 定义行为…...
【 Copilot】云开发 Copilot 实战教程:从入门到精通,掌握云开发核心技能
我的个人主页 我的领域:人工智能篇,希望能帮助到大家!!!👍点赞 收藏❤ 引言 云开发 Copilot 作为一款革新性的开发辅助工具,利用先进的人工智能技术,为开发者在云开发的征程中点亮…...
DataCap MongoDB Driver: 全面解析MongoDB在DataCap中的使用指南
在大数据时代,MongoDB作为一款广受欢迎的NoSQL数据库,其灵活的文档存储模型和强大的查询能力使其成为许多现代应用的首选数据存储方案。今天,我们将深入探讨DataCap MongoDB Driver,这是一个强大的工具,它让在DataCap环…...
[x86 ubuntu22.04]双触摸屏的触摸事件都响应在同一个触摸屏上
1 问题描述 CPU:G6900E OS:ubuntu22.04 Kernel:6.8.0-49-generic 系统下有两个一样的 edp 触摸屏,两个触摸屏的触摸事件都响应在同一个 edp 屏幕上。 2 解决过程 使用“xinput”命令查看输入设备,可以看到只有一个 to…...
Linux:SystemV通信
目录 一、System V通信 二、共享内存 代码板块 总结 一、System V通信 System V IPC(inter-process communication),是一种进程间通信方式。其实现的方法有共享内存、消息队列、信号量这三种机制。 本文着重介绍共享内存这种方式。 二、共…...
全面Kafka监控方案:从配置到指标
文章目录 1.1.监控配置1.2.监控工具1.3.性能指标系统相关指标GC相关指标JVM相关指标Topic相关指标Broker相关指标 1.4.性能指标说明1.5.重要指标说明 1.1.监控配置 开启JMX服务端口:kafka基本分为broker、producer、consumer三个子项,每一项的启动都需要…...
Springboot项目Druid运行时动态连接多数据源的功能
项目支持多数据库连接是个很常见的需求,这不仅是要在编译前连已经知道的多个数据库,有时还要在程序运行时连后期增加的多个数据源来获得数据。 一、编译前注册数据库连接 1.引入依赖包 <!-- springboot 3.x --><dependency><groupId&g…...
【漏洞复现】F5 BIG-IP Next Central Manager SQL注入漏洞(CVE-2024-26026)
免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。本次测试仅供学习使用,如若非法他用,与平台和本文作…...
中间件xxl-job安装
拉取镜像 docker pull xuxueli/xxl-job-admin:2.4.2 创建xxl-job-admin容器 docker create --name xxl-job-admin -p 9099:8080 -e PARAMS"--spring.datasource.urljdbc:mysql://192.168.96.57:3306/xxl_job2Unicodetrue&characterEncodingUTF-8 --spring.dataso…...
Pytorch | 利用SMI-FGRM针对CIFAR10上的ResNet分类器进行对抗攻击
Pytorch | 利用I-FGSSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集SMI-FGRM介绍SMI-FGRM算法流程 SMI-FGRM代码实现SMI-FGRM算法实现攻击效果 代码汇总smifgrm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器: Pytorch | 从零构建AlexNet对CI…...
论文解读 | EMNLP2024 一种用于大语言模型版本更新的学习率路径切换训练范式
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者讲解回放! 作者简介 王志豪,厦门大学博士生 刘诗雨,厦门大学硕士生 内容简介 新数据的不断涌现使版本更新成为大型语言模型(LLMsÿ…...
破解海外业务困局:新加坡服务器托管与跨境组网策略
在当今全球化商业蓬勃发展的浪潮之下,众多企业将目光投向海外市场,力求拓展业务版图、抢占发展先机。而新加坡,凭借其卓越的地理位置、强劲的经济发展态势以及高度国际化的营商环境,已然成为企业海外布局的热门之选。此时…...
win系统B站播放8k视频启用HEVC编码
下载HEVC插件 点击 HEVC Video Extension 2.2.20.0 latest downloads,根据教程下载安装 安装 Random User-Agent 点击 Random User-Agent 安装 配置 Random User-Agent ”项目中的“家电控制设计”中的“空调控制”子项目,最前者还包括“物联网设计”、“环境监测设计”、“门禁系统设计计”和“小…...
springboot/ssm图书大厦图书管理系统Java代码编写web图书借阅项目
springboot/ssm图书大厦图书管理系统Java代码编写web图书借阅项目 基于springboot(可改ssm)vue项目 开发语言:Java 框架:springboot/可改ssm vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库ÿ…...
【MySQL】踩坑笔记——保存带有换行符等特殊字符的数据,需要进行转义保存
问题描述 从DBeaver中导出了部分业务数据的 insert sql,明明在开发、测试环境都可以一把执行通过,却在预发环境执行前的语法检查失败了,提示有SQL语法错误。 这条SQL长这样,default_sql是要在odps上执行的sql语句,提…...
利用 Python 编写一个 VIP 音乐下载脚本
在这篇博客中,我们将介绍如何使用 Python 编写一个简单的 VIP 音乐下载脚本,利用网页爬虫技术从一个音乐网站下载歌曲。通过解析网页,获取歌曲的真实下载链接,并将音乐文件保存到本地。我们将使用 requests 和 BeautifulSoup 库来实现这个过程。 目标 本脚本的主要功能是…...
Sashulin升级啦,开箱即用!
经过多年的不断投入,升级为了Sashulin基础软件系列,本系列包含: 1、Sashulin IDE 2025全域通用开发工具 通用型Java开发工具,并可以进行业务流可视化开发。 2、发布Sashulin Webserver 2025 将Html等网页文件发布成网站…...
Java圣诞树
目录 写在前面 技术需求 程序设计 代码分析 一、代码结构与主要功能概述 二、代码功能分解与分析 1. 类与常量定义 2. 绘制树的主逻辑 3. 彩色球的绘制 4. 动态效果的实现 5. 窗口初始化 三、关键特性与优点 四、总结 写在后面 写在前面 Java语言绘制精美圣诞树…...
在Python如何用Type创建类
文章目录 一,如何创建类1:创建一个简单类2:添加属性和方法3:动态继承父类4:结合元类的使用总结 二.在什么情境下适合使用Type创建类1. **运行时动态生成类**2. **避免重复代码**3. **依赖元类或高级元编程**4. **动态扩…...
04软件测试需求分析案例-用户登录
通读文档,提取信息,提出问题,整理为需求。 从需求规格说明、设计说明、配置说明等文档获取原始需求,通读原始需求,分析有哪些功能,每种功能要完成什么业务,业务该如何实现,业务逻辑…...
替代传统FTP传输,镭速大数据传输系统实现安全高效数据流转!
信息技术的快速进步让大数据成为了企业决策的关键支撑,但同时也带来了巨大的挑战。企业在运营过程中产生的数据量急剧增加,这对数据传输的速度、安全性和效率提出了更高的要求。然而,传统的FTP传输方式在处理大规模数据时显得力不从心&#x…...
SpringMVC学习(一)——请求与响应处理
目录 一、SpringMVC简介 二、RequestMapping:请求路径映射 三、RestController 四、请求限定 五、请求处理 1.使用普通变量,收集请求参数 2.使用RequestParam明确指定获取参数 3.目标方法参数是一个pojo 4.RequestHeader:获取请求…...
大语言模型学习工具及资源总结和落地应用
当前,随着人工智能技术的迅猛发展,大语言模型(Large Language Models, LLMs)在各个领域的应用日益广泛。以下是国内外常见的大语言模型工具、已经落地部署的应用以及学习相关的网站和资源的详细介绍。 一、国内外常见的大语言模型…...
深度学习使用Anaconda打开Jupyter Notebook编码
新手入门深度学习使用Anaconda打开Jupyter Notebook编码 1. 安装Anaconda 第一种是Anaconda官网下载安装包,但是很慢,不太建议 第二种使用国内清华大学镜像源下载 选择适合自己电脑的版本,支持windows,linux系统 下载完之后自行…...
【视觉惯性SLAM:四、相机成像模型】
相机成像模型介绍 相机成像模型是计算机视觉和图像处理中的核心内容,它描述了真实三维世界如何通过相机映射到二维图像平面。相机成像模型通常包括针孔相机的基本成像原理、数学模型,以及在实际应用中如何处理相机的各种畸变现象。 一、针孔相机成像原…...
Firewalld 防火墙详解:深入理解与实践指南
在现代网络环境中,防火墙是保护系统和网络不受未授权访问的关键工具。firewalld是Linux系统中广泛使用的动态防火墙管理工具,它提供了强大的功能和灵活的配置选项。本文将深入探讨firewalld防火墙的工作原理、配置和管理,以及如何在实际环境中…...
在linux系统中使用jdbc访问sqlite数据库时报错“java.lang.UnsatisfiedLinkError”
1. 异常描述 在linux系统中使用jdbc访问sqlite数据库时出现如下错误提示: 2. 异常分析 可能是当前使用版本的sqlite-jdbc-xxx.jar版本有bug。 3. 异常解决 我是从3.8.9.1版本换到了3.16.1版本就好了。...