邢台企业做网站费用/百度竞价排名榜

邢台企业做网站费用,百度竞价排名榜,商品交换电子商务网站开发,佛山做网站🎯 引言:Redis的高可用性为啥这么重要? 在现代高可用系统中,Redis 是一款不可或缺的分布式缓存与数据库系统。无论是提升访问速度,还是实现数据的高效持久化,Redis 都能轻松搞定。可是,当你把 …

🎯 引言:Redis的高可用性为啥这么重要?

在现代高可用系统中,Redis 是一款不可或缺的分布式缓存与数据库系统。无论是提升访问速度,还是实现数据的高效持久化,Redis 都能轻松搞定。可是,当你把 Redis 用于关键业务时,它的高可用性就显得尤为重要。为了避免系统出现单点故障,保障业务连续性,我们需要有一套高可用架构来确保 Redis 的稳定运行。

今天,我们就一起来探讨一下 Redis 高可用架构 的几种实现方式,看看如何设计一套健壮的 Redis 高可用方案,保证我们的 Redis 缓存一直在线,稳定运行。


🛠️ 1. Redis 主从复制:简单的高可用方案

1.1 主从复制工作原理

Redis 主从复制(Master-Slave Replication)是 Redis 实现高可用性最基础的方案之一。在这种架构中,你会有一个主节点(Master)和一个或多个从节点(Slave)。主节点负责处理写操作和数据更新,而从节点则负责从主节点同步数据并进行只读操作。

当主节点发生故障时,可以将某个从节点提升为主节点(手动或自动),确保系统的持续可用。

主从复制基本架构
  • 主节点(Master) :处理所有的写操作(如SETDEL等命令)。
  • 从节点(Slave) :只处理读操作(如GET命令),并定期从主节点同步数据。
    在这里插入图片描述
主从复制工作流程
(1)初始同步

当从节点(Slave)首次启动并连接到主节点时,它需要将主节点的数据完全同步过来。这个过程称为“全量同步”。

  1. 从节点连接主节点:从节点向主节点发起连接请求。
  2. 主节点进行快照(RDB) :主节点执行 SAVEBGSAVE 命令,将当前的内存数据(RDB 快照)保存到磁盘。
  3. 从节点复制快照:主节点将保存的数据发送给从节点,从节点将数据写入本地数据库。
  4. 建立同步通道:从节点在完成全量同步后,开始监听主节点的变更。
(2)增量同步

从节点已经有了主节点的数据快照后,接下来的数据同步就是增量同步,只同步主节点上的变更数据。

  1. 主节点记录变更操作:主节点每处理一个写操作(如SETDEL),会将这个操作写入复制日志(replication log)中。
  2. 主节点发送变更命令给从节点:主节点将增量变更命令发送到所有的从节点。
  3. 从节点执行命令:从节点收到变更命令后,会在本地执行这些命令,保证数据的一致性。
(3)断线恢复

如果从节点与主节点的连接丢失,Redis 会进行断线恢复:

  • 当从节点重新连接到主节点时,Redis 会判断是进行全量同步还是增量同步。如果从节点没有数据快照,它会进行全量同步;如果有数据快照,则会通过增量同步方式进行恢复。
主从复制的特点
  • 只读模式:从节点默认只能进行读取操作(GET),不接受写操作。写操作必须通过主节点执行。
  • 延迟问题:由于从节点是从主节点获取数据的,主节点的写操作会有一定的延迟才会在从节点上看到。
  • 数据一致性:主从复制是最终一致性的,意味着从节点上的数据不会立即与主节点同步一致,在数据变更时可能会有短暂的不一致状态。
主从复制的优势
  • 提高可用性和可靠性:从节点可以用来分担主节点的读取压力,还可以在主节点故障时迅速切换,保证服务的可用性。
  • 数据备份:从节点可以作为主节点的备份,提供数据冗余,防止主节点数据丢失。
  • 负载均衡:多个从节点可以分担读取请求,从而降低主节点的负载。
主从复制使用场景
  • 高可用架构:当主节点出现故障时,可以通过从节点提升一个新的主节点来实现故障切换。
  • 读写分离:主节点处理写操作,从节点处理读操作,优化性能。
  • 数据冗余:从节点可以作为数据的备份,一旦主节点出现问题,可以快速恢复数据。

1.2 主从复制搭建步骤

1、Redis 环境准备
  1. 下载安装Redis

  2. 本次演示使用的版本是6.2.7版本(并且在本机环境模拟3个redis示例演示)

  3. 进行Redis目录下创建 redis-cluster (mkdir redis-cluster)

  4. 复制原有redis.conf新建3个配置文件 redis-6379.conf redis-6380.conf redis-6381.conf
    在这里插入图片描述

  5. 将配置文件放置到redis-cluster目录下

  6. 编辑主节点(redis-6379.conf),主要修改以下配置项

    port 6379
    bind 127.0.0.1
    pidfile ./redis-cluster/redis-6379.pid
    logfile ./redis-cluster/redis-6379.log
    dir ./redis-cluster/data/redis-6379
    
  7. 编辑从节点(redis-6380.conf)

    port 6380
    bind 127.0.0.1
    pidfile ./redis-cluster/redis-6380.pid
    logfile ./redis-cluster/redis-6380.log
    dir ./redis-cluster/data/redis-6380
    replicaof 127.0.0.1 6379
    
  8. 编辑从节点(redis-6381.conf)

    port 6381
    bind 127.0.0.1
    pidfile ./redis-cluster/redis-6381.pid
    logfile ./redis-cluster/redis-6381.log
    dir ./redis-cluster/data/redis-6381
    replicaof 127.0.0.1 6379
    

配置完成,主要配置项说明:

  • port:每个 Redis 实例需要不同的端口。
  • pidfile:每个实例需要独立的 PID 文件。
  • logfile:每个实例需要不同的日志文件。
  • replicaof:设置主从复制指定主节点。
  • dir:设置数据文件的存储路径。确保每个 Redis 实例的 dir 路径存在(提前创建,用于存储数据文件)

每个实例都需要不同的配置(特别是端口、PID 文件、日志文件和数据目录),确保它们不会冲突。

2、启动 Redis 实例
  1. 打开 命令终端

  2. 进入 Redis 所在的目录

  3. 启动3个实例

    ./src/redis-server ./redis-cluster/redis-6379.conf
    ./src/redis-server ./redis-cluster/redis-6380.conf
    ./src/redis-server ./redis-cluster/redis-6381.conf
    
  4. 检查实例是否正常
    你可以通过 redis cli 连接到每个实例,确认它们是否成功启动。

  5. 检查主从复制是否正常或者连接到主节点新增键值看同步是否成功

    ./src/redis-cli -p 6379 info replication
    ./src/redis-cli -p 6380 info replication
    

    主节点在这里插入图片描述

    从节点
    在这里插入图片描述

    说明主从复制成功。

⚙️ 2. Redis Sentinel:自动故障转移的英雄

2.1 Redis Sentinel的工作原理

Redis Sentinel 是 Redis 提供的自动故障转移系统。它监控 Redis 实例的健康状况,一旦主节点发生故障,Sentinel 会自动将一个从节点提升为主节点,并更新所有从节点的信息,保证系统的高可用性。Sentinel 的作用不止于监控故障,它还可以提供自动故障转移、配置发布以及客户端连接的重定向。

哨兵部署架构

在这里插入图片描述

1、监控:Sentinel 会不断检查 master 和 slave 是否按预期工作。
2、自动故障恢复:如果 master 故障,Sentinel 会将一个 slave 提升为 master,当故障实例恢复后也会安装新的 master 为主节点。
3、通知:Sentinel 充当 Redis 客户端的服务发现来源,当集群发生故障转移时,会将最新节点信息推送给 Redis 客户端。

哨兵集群监控原理

Sentinel 基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令:

  • 主观下线:如果某 Sentinel 节点发现某实例未在规定时间响应,则认为该实例主观下线。
  • 客观下线:若超过指定数量(quorum)的 Sentinel 都认为该实例主观下线,则该实例客观下线。quorum 值最好超过 Sentinel 实例数量的一半。

在这里插入图片描述

集群故障恢复原理

一旦发现 master 故障,Sentinel 需要在 salve 中选择一个作为新的 master,选择依据是这样的:

  • 首先会判断 slave 节点与 master 节点断开时间长短 ,如果超过指定值(downafter-milliseconds * 10)则会排除该 slave 节点
  • 然后判断 slave 节点的 slave-priority 值,越小优先级越高,如果是0则永不参与选举
  • 如果slave-priority一样,则判断 slave 节点的 offset 值 ,越大说明数据越新,优先级越高
  • 最后是判断slave节点的 运行id 大小,越小优先级越高。

当选出一个新的 master 之后,该如何实现切换呢?
流程如下:

  • Sentinel给备选的 slave1 节点发送 slaveof no one 命令,让该节点成为 master
  • Sentinel给所有其它 slave 发送 slaveof 127.0.0.1 6380 命令,让这些 slave 成为新 master 的从节点,开始从新的 master 上同步数据。
  • 最后,Sentinel 将故障节点标记为 slave,当故障节点恢复后会自动成为新的 master 的 slave 节点。
    在这里插入图片描述

2.2 配置 Redis Sentinel(哨兵)

部署多个 Redis 实例后,配置 Redis Sentinel 以实现高可用性,可以通过以下步骤来完成。哨兵模式的主要功能是监控 Redis 主节点和从节点的状态,并在主节点宕机时自动切换到从节点。

  • 你已经有了多个 Redis 实例(例如637963806381)。
  • 你希望配置 Sentinel 来监控这些实例,并在主节点宕机时进行自动故障转移。

每个 Redis 哨兵都需要配置一个 sentinel.conf 文件来监控主节点。你可以创建多个 Sentinel 配置文件,并通过它们来监控 Redis 实例。

设置哨兵配置文件(sentinel.conf) 内容如下:

port 26379
bind 127.0.0.1
pidfile "./redis-cluster/sentinel-26379/sentinel-26379.pid"
logfile "./redis-cluster/sentinel-26379/sentinel-26379.log"
dir "./redis-cluster/sentinel-26379"
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1

复制文件进行 26380 和 26381 哨兵的配置。

port 26380
bind 127.0.0.1
pidfile "./redis-cluster/sentinel-26380/sentinel-26380.pid"
logfile "./redis-cluster/sentinel-26380/sentinel-26380.log"
dir "./redis-cluster/sentinel-26380"
sentinel monitor mymaster 127.0.0.1 6380 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
  • sentinel monitor mymaster:这是 Sentinel 监控的主节点名称,这里设置为 mymaster,并且指定了主节点的 IP 和端口(127.0.0.1 6379)。后面的数字 2 表示至少需要 2 个哨兵节点确认主节点宕机后,才会进行故障转移。
  • sentinel down-after-milliseconds mymaster 5000:当主节点 5 秒没有响应时,认为该节点宕机。
  • sentinel failover-timeout mymaster 10000:故障转移的超时时间。
  • sentinel parallel-syncs mymaster 1:指定故障转移时,最多有多少个从节点同步数据。

2.3 启动 Redis Sentinel(哨兵)

  1. 你可以启动多个 Sentinel 实例来提高容错性。

    ./src/redis-sentinel ./redis-cluster/sentinel-26379.conf
    ./src/redis-sentinel ./redis-cluster/sentinel-26380.conf
    ./src/redis-sentinel ./redis-cluster/sentinel-26381.conf
    
  2. 验证哨兵状态查看是否发现主节点

    ./src/redis-cli -p 26379 sentinel masters
    

    在这里插入图片描述

  3. 查看从节点状态

    ./src/redis-cli -p 26379 sentinel slaves mymaster
    

    在这里插入图片描述5. 搭建完成,这说明 Sentinel 已经自动发现并管理了从节点 🎯

2.4 哨兵模式连接Redis

在Sentinel集群监管下的Redis主从集群,其节点会因为自动故障转移而发生变化,Redis的客户端必须感知这种变化,及时更新连接信息。
客户端应用程序应该使用RedisSentinel模式连接Redis,而不是直接固定的Redis的IP。我们可以直接通过哨兵获取到当前的主节点IP。可以使用命令:

./src/redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster

在这里插入图片描述

我们通过一个测试来实现Spring Boot实现集成哨兵机制。

Maven依赖

        <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.15.3</version></dependency>

配置文件添加配置项

spring:redis:sentinel:master: mymasternodes: 127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381host: 127.0.0.1port: 6379database: 1 # 默认使用 0 库password:

测试连接代码

@Configuration
@AutoConfigureBefore({RedisAutoConfiguration.class, RedissonAutoConfiguration.class})
public class RedissonConfig {protected final Logger logger = LoggerFactory.getLogger(this.getClass());@Value("${spring.redis.host}")private String host;@Value("${spring.redis.port}")private String port;@Value("${spring.redis.password}")private String password;@Value("${spring.redis.database}")private int database;@Value("${spring.redis.sentinel.master}")private String sentinelMaster;@Value("${spring.redis.sentinel.nodes}")private String sentinelNodes;@Value("${redisson.threads:4}")private int threads;@Value("${redisson.nettyThreads:5}")private int nettyThreads;@Value("${redisson.connectPoolSize:20}")private int connectPoolSize;@Value("${redisson.connectPoolIdleSize:5}")private int connectPoolIdleSize;@Value("${redisson.connectTimeout:10000}")private int connectTimeout;@Value("${redisson.retryAttempts:3}")private int retryAttempts;@Value("${redisson.retryInterval:1500}")private int retryInterval;@Value("${redisson.timeout:10000}")private int timeout;@Value("${redisson.pingConnectionInterval:30000}")private int pingConnectionInterval;@Bean(destroyMethod = "shutdown")@ConditionalOnMissingBean(RedissonClient.class)public RedissonClient redisson() throws IOException {Config config = new Config();int cpuCores = Runtime.getRuntime().availableProcessors();threads = (threads == 0 ? cpuCores * 2 : threads);nettyThreads = (nettyThreads == 0 ? cpuCores : nettyThreads);config.setThreads(threads);config.setNettyThreads(nettyThreads);config.setTransportMode(TransportMode.NIO);// 设置序列化(禁用class类型信息)config.setCodec(new SimpleRedisJsonCodec());if (StringUtils.isNotEmpty(sentinelMaster) && StringUtils.isNotEmpty(sentinelNodes)) {// 支持哨兵模式logger.info("RedissonClient init useSentinelServers");String[] sentinels = sentinelNodes.split(",");config.useSentinelServers().setMasterName(sentinelMaster).setDatabase(database).setPassword(StringUtils.isEmpty(password) ? null : password).setTimeout(timeout).addSentinelAddress(formatRedisUrls(sentinels));} else if (host.contains(",")) {// 集群模式logger.info("RedissonClient init useClusterServers");String[] clusterNodes = host.split(",");ClusterServersConfig cConfig = config.useClusterServers();for (String node : clusterNodes) {cConfig.addNodeAddress("redis://" + node + ":" + port);}cConfig.setPassword(password);cConfig.setMasterConnectionPoolSize(connectPoolSize);cConfig.setMasterConnectionMinimumIdleSize(connectPoolIdleSize);cConfig.setConnectTimeout(connectTimeout);cConfig.setRetryAttempts(retryAttempts);cConfig.setRetryInterval(retryInterval);cConfig.setTimeout(timeout);cConfig.setPingConnectionInterval(pingConnectionInterval);} else {// 单机模式logger.info("RedissonClient init useSingleServer");config.useSingleServer().setAddress("redis://" + host + ":" + port).setDatabase(database).setPassword(StringUtils.isEmpty(password) ? null : password).setConnectionPoolSize(connectPoolSize).setConnectionMinimumIdleSize(connectPoolIdleSize).setTimeout(timeout);}return Redisson.create(config);}/*** 格式化 Redis URL,确保前缀一致*/private String[] formatRedisUrls(String[] nodes) {return Arrays.stream(nodes).map(node -> node.startsWith("redis://") ? node : "redis://" + node).toArray(String[]::new);}
}

连接成功
在这里插入图片描述

2.5 测试故障转移

你可以通过停掉主节点(6379)来测试故障转移的功能。停掉主节点后,Sentinel 会自动将从节点提升为新的主节点。

  1. 停止主节点(6379

  2. Sentinel 会检测到主节点宕机,并自动执行故障转移,将选择一个从节点升级为新的主节点。你可以通过以下命令查看新的 Sentinel 的主节点。可以看到新的主节点已经变成6381。

	./src/redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster1) "127.0.0.1"2) "6381"

并且SpringBoot中自动感知到节点变化,业务可正常使用,不受到Redis节点宕掉的影响。
在这里插入图片描述

  • 自动化:Sentinel 自动监控 Redis 状态,发生故障时,自动完成故障转移。
  • 高可用:Redis Sentinel 可以防止单点故障,增强系统的稳定性。

3. Redis Cluster:实现水平扩展和高可用性的终极武器

3.1 Redis Cluster的工作原理

Redis Cluster 是 Redis 3.0 引入的一个新特性,它可以实现水平扩展并且在多个节点之间分配数据。Redis Cluster 是基于分片的架构,数据会自动分布到不同的节点上。每个节点都有一个主节点和若干从节点组成的高可用集群。

当某个节点发生故障时,Redis Cluster 可以自动将从节点提升为主节点,继续保持服务的可用性。同时,Cluster 支持 自动分片,即每个节点负责一部分数据。

3.2 Redis Cluster的搭建步骤

持续更新中…

🚀 4. 实际应用案例:如何实现生产环境中的 Redis 高可用架构

在实际生产环境中,Redis 的高可用架构设计需要根据具体的需求来选择适合的方案。比如,对于需要高吞吐量和低延迟的场景,使用 Redis Cluster 是一个不错的选择;而对于一些中小型应用,可以选择 Redis Sentinel 来确保故障自动切换。

4.1 使用 Redis Sentinel 实现高可用

  1. 部署 Redis 实例:设置主从节点,并在至少 3 个机器上运行 Redis。
  2. 配置 Sentinel:配置 Sentinel 进行监控和故障转移。
  3. 自动切换:当主节点宕机时,Sentinel 自动将从节点提升为主节点。

4.2 使用 Redis Cluster 实现高可用

  1. 分配数据分片:将数据分配到多个 Redis 节点上,每个节点负责不同的数据分片。
  2. 设置集群:通过 redis-trib 工具来创建 Redis 集群。
  3. 监控集群状态:使用 redis-cli 检查集群状态,确保节点间通信正常。

🔒 5. 结论:如何选择合适的 Redis 高可用方案?

每个系统对 Redis 高可用性的需求都不尽相同,因此选择合适的架构尤为重要:

  • 小型系统:可以选择 Redis 主从复制,设置少量的从节点来提升读取性能。
  • 中型系统:使用 Redis Sentinel 来实现自动故障转移,并增加更多的监控和故障处理功能。
  • 大型系统:对于大规模的应用,建议使用 Redis Cluster 进行分片存储与水平扩展,并结合 Sentinel 进行高可用性保障。

通过了解 Redis 的高可用架构,结合实际业务需求来进行部署,我们就能避免系统因为 Redis 故障导致的业务中断,提升整体系统的可靠性。


总结:Redis 缓存一直在线,稳定运行

Redis 的高可用性不仅关乎缓存系统的稳定性,更是支撑业务连续性的关键。通过选择合适的高可用架构,我们可以让 Redis 在系统故障时仍然坚挺不倒,保证业务流畅运行。

希望你通过这篇文章了解了 Redis 主从复制、Sentinel 和 Cluster 的不同高可用实现方式,找到适合自己的方案,确保 Redis 在高负载下仍能保持稳定运行!

🌟 你的支持是我持续创作的动力,欢迎点赞、收藏、分享!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/71158.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis---缓存穿透,雪崩,击穿

文章目录 缓存穿透什么是缓存穿透&#xff1f;缓存穿透情况的处理流程是怎样的&#xff1f;缓存穿透的解决办法缓存无效 key布隆过滤器 缓存雪崩什么是缓存雪崩&#xff1f;缓存雪崩的解决办法 缓存击穿什么是缓存击穿&#xff1f;缓存击穿的解决办法 区别对比 在如今的开发中&…

【定昌Linux系统】部署了java程序,设置开启启动

将代码上传到相应的目录&#xff0c;并且配置了一个.sh的启动脚本文件 文件内容&#xff1a; #!/bin/bash# 指定JAR文件的路径&#xff08;如果JAR文件在当前目录&#xff0c;可以直接使用文件名&#xff09; JAR_FILE"/usr/local/java/xs_luruan_client/lib/xs_luruan_…

Minio搭建并在SpringBoot中使用完成用户头像的上传

Minio使用搭建并上传用户头像到服务器操作,学习笔记 Minio介绍 minio官网 MinIO是一个开源的分布式对象存储服务器&#xff0c;支持S3协议并且可以在多节点上实现数据的高可用和容错。它采用Go语言开发&#xff0c;拥有轻量级、高性能、易部署等特点&#xff0c;并且可以自由…

vue3中ref和reactive响应式数据、ref模板引用(组合式和选项式区别)、组件ref的使用

目录 Ⅰ.ref 1.基本用法&#xff1a;ref响应式数据 2.ref模板引用 3.ref在v-for中的模板引用 ​4.ref在组件上使用 ​5.TS中ref数据标注类型 Ⅱ.reactive 1.基本用法&#xff1a;reactive响应式数据 2.TS中reactive标注类型 Ⅲ.ref和reactive的使用场景和区别 Ⅳ.小结…

javascript实现雪花飘落效果

本文实现雪花飘落效果的 JavaScript 网页设计案例&#xff0c;代码实现如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, init…

项目准备(flask+pyhon+MachineLearning)- 3

目录 1.商品信息 2. 商品销售预测 2.1 机器学习 2.2 预测功能 3. 模型评估 1.商品信息 app.route(/products) def products():"""商品分析页面"""data load_data()# 计算当前期间和上期间current_period data[data[成交时间] > data[成…

FPGA开发,使用Deepseek V3还是R1(3):系统级与RTL级

以下都是Deepseek生成的答案 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;1&#xff09;&#xff1a;应用场景 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;2&#xff09;&#xff1a;V3和R1的区别 FPGA开发&#xff0c;使用Deepseek V3还是R1&#x…

实现 Leaflet 多类型点位标记与聚合功能的实战经验分享

在现代的地理信息系统&#xff08;GIS&#xff09;应用中&#xff0c;地图功能是不可或缺的一部分。无论是展示商业网点、旅游景点还是公共服务设施&#xff0c;地图都能以直观的方式呈现数据。然而&#xff0c;当数据量较大时&#xff0c;地图上可能会出现大量的标记点&#x…

企微审批中MySQL字段TEXT类型被截断的排查与修复实践

在MySQL中&#xff0c;TEXT类型字段常用于存储较大的文本数据&#xff0c;但在一些应用场景中&#xff0c;当文本内容较大时&#xff0c;TEXT类型字段可能无法满足需求&#xff0c;导致数据截断或插入失败。为了避免这种问题&#xff0c;了解不同文本类型&#xff08;如TEXT、M…

【常见BUG】Spring Boot 和 Springfox(Swagger)版本兼容问题

???欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老…

apload-lab打靶场

1.提示显示所以关闭js 上传<?php phpinfo(); ?>的png形式 抓包&#xff0c;将png改为php 然后放包上传成功 2.提示说检查数据类型 抓包 将数据类型改成 image/jpeg 上传成功 3.提示 可以用phtml&#xff0c;php5&#xff0c;php3 4.先上传.htaccess文件&#xff0…

金融支付行业技术侧重点

1. 合规问题 第三方支付系统的平稳运营&#xff0c;严格遵循《非银行支付机构监督管理条例》的各项条款是基础与前提&#xff0c;其中第十八条的规定堪称重中之重&#xff0c;是支付机构必须牢牢把握的关键准则。 第十八条明确指出&#xff0c;非银行支付机构需构建起必要且独…

Cherry Studio + 火山引擎 构建个人AI智能知识库

&#x1f349;在信息化时代&#xff0c;个人知识库的构建对于提高工作效率、知识管理和信息提取尤为重要。尤其是当这些知识库能结合人工智能来智能化地整理、分类和管理数据时&#xff0c;效果更为显著。我最近尝试通过 Cherry Studio 和 火山引擎 来搭建个人智能知识库&#…

在笔记本电脑上用DeepSeek搭建个人知识库

最近DeepSeek爆火&#xff0c;试用DeepSeek的企业和个人越来越多。最常见的应用场景就是知识库和知识问答。所以本人也试用了一下&#xff0c;在笔记本电脑上部署DeepSeek并使用开源工具搭建一套知识库&#xff0c;实现完全在本地环境下使用本地文档搭建个人知识库。操作过程共…

【计算机网络入门】初学计算机网络(九)

目录 1.令牌传递协议 2. 局域网&IEEE802 2.1 局域网基本概念和体系结构 3. 以太网&IEEE802.3 3.1 MAC层标准 3.1.1 以太网V2标准 ​编辑 3.2 单播广播 3.3 冲突域广播域 4. 虚拟局域网VLAN 1.令牌传递协议 先回顾一下令牌环网技术&#xff0c;多个主机形成…

Java 大视界 -- Java 大数据中的时间序列数据异常检测算法对比与实践(103)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

【0011】HTML其他文本格式化标签详解(em标签、strong标签、b标签、i标签、sup标签、sub标签......)

如果你觉得我的文章写的不错&#xff0c;请关注我哟&#xff0c;请点赞、评论&#xff0c;收藏此文章&#xff0c;谢谢&#xff01; 本文内容体系结构如下&#xff1a; 本文旨在深入探讨HTML中其他的文本格式化标签&#xff0c;主要有<em> 标签、<strong> 标签、…

华为AP 4050DN-HD的FIT AP模式改为FAT AP,家用FAT基本配置

在某鱼买了两台华为AP 4050DN-HD , AP是二手的 , 在AC上上过线 , 所以就不能开机自选为FIP模式了 我没有AC无线控制器 , 就是买一个自己玩 , AP又是FIT瘦AP模式 ,所以我就想把AP的瘦AP模式改为FAT胖AP模式 1. 准备工作 1.1下载好对应软件&#xff0c;进入到 企业业务网站去下…

【Linux网络-HTTP协议】HTTP基础概念+构建HTTP

代码定位&#xff1a;南毅c/Linux - Gitee.com HTTP协议 介绍 虽然我们说&#xff0c;应用层协议是我们程序猿自己定的.但实际上,已经有大佬们定义了一些现成的,又非常好用的应用层协议,供我们直接参考使用。HTTP(超文本传输协议)就是其中之一。 在互联网世界中&#xff0c…

LabVIEW DataSocket 通信库详解

dataskt.llb 是 LabVIEW 2019 内置的核心函数库之一&#xff0c;位于 vi.lib\Platform\ 目录下&#xff0c;专注于 DataSocket 技术的实现。DataSocket 是 NI 提供的网络通信协议&#xff0c;支持跨平台、跨设备的实时数据共享&#xff0c;广泛应用于远程监控、分布式系统集成等…