ECS搭建redis4.0集群版

在 CentOS 上安装 Redis 4.0 集群版涉及多个步骤,包括安装 Redis、配置集群并启动它。下面将详细介绍整个过程:

1. 系统更新

首先,保证系统是最新的。

sudo yum update

2. 安装依赖项

安装构建 Redis 所必需的依赖:

sudo yum install -y gcc tcl

3. 下载并解压 Redis

到 Redis 的官方网站找到 4.0 版本的源代码下载链接。下载并解压:

wget http://download.redis.io/releases/redis-4.0.14.tar.gz
tar xzf redis-4.0.14.tar.gz
cd redis-4.0.14

4. 编译 Redis

在 Redis 源代码目录中编译:

make distclean  # 如果之前尝试编译过,可执行此命令清理
make

5. 运行安装脚本

sudo make install

6. 配置 Redis 集群

为便于管理,创建一个文件夹用以保存所有集群节点的配置和数据文件:

mkdir -p ~/redis-cluster
cd ~/redis-cluster

创建配置文件 7000.conf, 7001.conf 等(一般为集群的每个节点创建一个配置文件)。配置文件示例如下:

port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
appendfilename "appendonly.aof"
dbfilename dump.rdb
dir ./

复制此配置文件,更改端口号和其他相应设置,创建多个实例(通常Redis 集群要求至少有三个主节点和对应的副本节点(每个节点要有一个副本),因此需要至少六个节点来满足这种配置)。

7. 启动 Redis 集群节点

启动六个 Redis 实例:

redis-server ./7000.conf
redis-server ./7001.conf
redis-server ./7002.conf
redis-server ./7003.conf
redis-server ./7004.conf
redis-server ./7005.conf
...

8. 创建 Redis 集群

使用Redis 的另一个工具 redis-trib.rb 来创建和管理集群。这是一个 Ruby 脚本,您需要先安装 Ruby 环境,再使用该脚本创建集群。

首先确保安装了 Ruby redisgem

sudo yum install ruby
gem install redis

然后使用 redis-trib.rb 来创建集群,你可以在 Redis 源码的 src 目录中找到此脚本。以下是创建集群的基本命令:

./redis-trib.rb create --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

如图:
在这里插入图片描述

确保你在调用此脚本时提供了正确的参数。--replicas 1 表示每个主节点将有一个相应的副本节点。后面的 IP 和端口对应于你的集群节点。

如果 redis-trib.rb 脚本不存在,您可能需要从 Redis 的 GitHub 仓库或其他可靠来源下载 Redis 的相应版本源码包,以获得这个脚本。

在使用 redis-trib.rb 或任何集群操作之前,别忘了确保配置文件设置正确,并且相应的端口在防火墙中是开放的。
很好,现在你已经成功创建了 Redis 集群。下面是你所执行操作的总结和下一步的建议:

集群配置确认

在最后的提示中,系统要求你确认上述配置。输入 yes 来确认并完成集群的创建:

Can I set the above configuration? (type 'yes' to accept): yes

集群启动和验证

完成配置后,Redis 集群会正式启动。你可以通过以下命令验证集群是否正常工作:

redis-cli -c -p 7000

进入 Redis CLI 后,可以使用一些命令来检查集群状态:

cluster nodes
cluster info

集群管理

你可以使用以下命令来管理和监控集群:

  • 查看集群节点信息:

    redis-cli -c -p 7000 cluster nodes
    
  • 检查集群状态:

    redis-cli -c -p 7000 cluster info
    
  • 手动添加节点:

    redis-cli --cluster add-node <new-node-ip>:<new-node-port> <existing-node-ip>:<existing-node-port>
    
  • 删除节点:

    redis-cli --cluster del-node <existing-node-ip>:<existing-node-port> <node-id>
    

配置优化

确保集群配置文件中包含以下配置,以优化性能和安全性:

# 在所有配置文件中启用集群模式
cluster-enabled yes# 集群配置文件路径
cluster-config-file nodes.conf# 节点超时时间,根据需求调整
cluster-node-timeout 5000# 启用持久化
appendonly yes
appendfilename "appendonly.aof"
dbfilename dump.rdb# 安全设置(可选)
requirepass your-password

日常维护

定期检查集群状态和日志,确保集群的健康运行。对数据进行备份,以防数据丢失。

故障排除

如果遇到任何问题,检查 Redis 日志文件,并根据错误信息进行相应的修复。如果无法解决,可以查阅 Redis 官方文档或在社区寻求帮助。

通过这些步骤,你应该能够成功地在 CentOS 上部署和管理一个 Redis 4.0 集群。如果有进一步的问题或需要更多的帮助,请随时联系我。

9. 测试集群

使用 redis-cli 测试集群功能:

redis-cli -c -p 7000

如图:
在这里插入图片描述
详解:
根据 cluster infocluster nodes 命令的输出,集群已经成功启动并正常运行。以下是对这些输出的解释:

cluster info 输出解释

  • cluster_state:ok:集群状态为正常。
  • cluster_slots_assigned:16384:所有 16384 个槽位已被分配。
  • cluster_slots_ok:16384:所有槽位状态正常。
  • cluster_slots_pfail:0:没有部分失败的槽位。
  • cluster_slots_fail:0:没有完全失败的槽位。
  • cluster_known_nodes:6:集群中已知的节点数为 6 个。
  • cluster_size:3:集群的大小(主节点数)为 3 个。
  • cluster_current_epoch:6cluster_my_epoch:1:这些是集群的纪元值,用于管理集群配置变化的版本。
  • cluster_stats_messages_ping_sent:285cluster_stats_messages_pong_sent:277:这些是集群节点之间发送和接收的 ping 和 pong 消息统计。
  • cluster_stats_messages_meet_received:5:这些是节点初次相遇时的 meet 消息统计。

cluster nodes 输出解释

  • 95b7166f2f43de82aacc84ffd0bfa3fa0d1c3e42 127.0.0.1:7002@17002 master:此行表示节点 127.0.0.1:7002 是一个主节点,其节点 ID 为 95b7166f2f43de82aacc84ffd0bfa3fa0d1c3e42,负责槽位 10923-16383
  • 06e4a7bf40eb9b8343c3ed4ef1aa177167255330 127.0.0.1:7004@17004 slave:此行表示节点 127.0.0.1:7004 是一个从节点,复制主节点 7bd529eae8583f4b8aae85023f926efd8bbd9d5d
  • 7bd529eae8583f4b8aae85023f926efd8bbd9d5d 127.0.0.1:7001@17001 master:此行表示节点 127.0.0.1:7001 是一个主节点,其节点 ID 为 7bd529eae8583f4b8aae85023f926efd8bbd9d5d,负责槽位 5461-10922
  • d2a2913b12e4995f8dc04e0d5f51c2d2d904d197 127.0.0.1:7005@17005 slave:此行表示节点 127.0.0.1:7005 是一个从节点,复制主节点 95b7166f2f43de82aacc84ffd0bfa3fa0d1c3e42
  • ec3a07bb418cd2110536159e8138326d6ebfe27b 127.0.0.1:7003@17003 slave:此行表示节点 127.0.0.1:7003 是一个从节点,复制主节点 11cc0b7e0d4cc20746c2e5027c270d3faef29db3
  • 11cc0b7e0d4cc20746c2e5027c270d3faef29db3 127.0.0.1:7000@17000 myself,master:此行表示节点 127.0.0.1:7000 是一个主节点,其节点 ID 为 11cc0b7e0d4cc20746c2e5027c270d3faef29db3,负责槽位 0-5460,且当前处于自身状态(myself)。

后续步骤

  1. 持续监控:继续使用 cluster infocluster nodes 命令监控集群状态。任何异常或失败节点都需要及时处理。
  2. 数据备份:配置 AOF(Append-Only File)和 RDB(Redis DataBase)持久化策略,确保数据安全。
  3. 安全配置:设置访问密码并限制 IP,以提高集群的安全性。
  4. 性能优化:根据工作负载调整 Redis 配置参数,例如最大内存、最大客户端连接数等。

通过这些措施,确保 Redis 集群持续稳定运行,并在实际应用中能够提供高效的缓存和数据存储服务。如果有进一步的疑问或问题,请随时联系我。

10. 配置持久化,安全和优化

确保集群配置文件正确设置了持久化选项、安全设置(如密码保护),并根据需要进行系统优化。

这些步骤应能帮你在 CentOS 上安装和配置 Redis 4.0 集群。配置集群时,请适当调整配置文件中的参数以适应你的具体需求和资源。如果遇到任何问题,请根据错误消息进行调查和调整。

11.授权

修改各个节点配置文件
需要确保以下几点:

  1. masterauth 参数在从节点的配置文件中设置正确。
  2. 主节点和从节点都已正确加载了带有密码的配置文件。
  3. 重启节点时严格按照步骤进行。

以下是详细的解决步骤:

步骤一:确保配置文件修改正确

主节点配置

在主节点的 redis.conf 文件中,确保设置了 requirepass

masterauth mysecurepassword
requirepass mysecurepassword
从节点配置

在从节点的 redis.conf 文件中,确保设置了 masterauthrequirepass

masterauth mysecurepassword
requirepass mysecurepassword

步骤二:手动配置并验证

对于每个从节点:
  1. 登录从节点:

    redis-cli -h <slave-node-ip> -p <slave-node-port> -a mysecurepassword
    
  2. 设置从节点的 masterauth 参数:

    CONFIG SET masterauth mysecurepassword
    
  3. 设置从节点的 requirepass 参数:

    CONFIG SET requirepass mysecurepassword
    
  4. 重启从节点:

    SHUTDOWN NOSAVE
    redis-server /path/to/redis.conf
    
对于主节点:
  1. 登录主节点:

    redis-cli -h <master-node-ip> -p <master-node-port> -a mysecurepassword
    
  2. 设置主节点的 requirepass 参数:

    CONFIG SET requirepass mysecurepassword
    
  3. 重启主节点:

    SHUTDOWN NOSAVE
    redis-server /path/to/redis.conf
    

验证设置

  1. 确认所有节点的认证设置已经生效:

    redis-cli -h <node-ip> -p <node-port> -a mysecurepassword ping
    

    预期输出:

    PONG
    
  2. 确认从节点和主节点之间的复制关系正常,可以通过从节点执行以下命令来检查:

    redis-cli -h <slave-node-ip> -p <slave-node-port> -a mysecurepassword info replication
    

    预期输出应包含 slave0 同步状态(如 state:online)。

故障排查

  1. 确保所有节点的配置文件路径和配置内容正确一致,避免配置文件路径错误等问题。
  2. 使用Redis日志文件检查任何可能的错误消息。日志文件路径通常可以在 redis.conf 文件中指定,例如:
    logfile /var/log/redis/redis.log
    

通过以上步骤应能确保主从节点正确配置了密码,并正常进行数据同步。如果仍有问题,可以一一检查配置文件和步骤来确认无误。

使用集群模式

  • 追踪所有节点: 一般来说,在Redis集群环境中,应该有多个节点协作。要确认集群中是否真的只有这一个节点,您可以检查每个节点的配置文件,确保它们配置了正确的 cluster-config-filecluster-enabled yes

  • 节点连接:确保每个节点的 redis.conf 配置文件中配置了所有其他节点的地址和端口,这样他们才能彼此发现并连接。

配置集群节点

如果您需要设置或调整集群,比如添加更多节点来分担负载或实现高可用性,您可以按照以下步骤来操作:

  1. 修改配置文件:确保每个节点的 redis.conf 文件中都有以下行:
#设置绑定的外部IP地址和端口
bind 0.0.0.0
port 7002#设置集群相关的配置
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 外部IP地址
cluster-announce-port 7002
cluster-announce-bus-port 17002#设置密码(假设所有节点的密码相同)
masterauth  mysecurepassword
requirepass mysecurepassword

适当调整其他配置以符合网络和业务需要。

  1. 启动其他节点:如果您有其他机器预备作为节点,可以在这些机器上安装并配置Redis,然后启动Redis服务。

  2. 加入集群:通过使用 CLUSTER MEET 命令将新节点加入到现有集群中。例如,如果您要将新的Redis节点(IP地址为192.168.1.5, 端口为7005)加入到集群:

     redis-cli -c -h 127.0.0.1 -p 7004 CLUSTER MEET 192.168.1.5 7005
    
修复故障节点
  • 修复或移除有问题的从节点:对于那个处于 fail 状态的节点,您需要决定是试图修复它(如果可能),还是从集群中移除它。如果该节点因为网络问题或是其他暂时性问题而无法连接,您可以尝试重新启动该节点的Redis服务,并确保网络设置正确无误。如果这个节点不能恢复,您可能需要从集群中移除这个节点。

  • 手动移除失败的节点:如果决定移除,可以使用以下命令:

    redis-cli -c -h xx.xxx.xxx.xx -p 7001 -a 'qax@123!' CLUSTER FORGET 06e4a7bf40eb9b8343c3ed4ef1aa177167255330
    

    这个命令需要在集群中的每个其他节点上执行以确保完全移除。

确保哈希槽完整
  • 检查哈希槽是否完整。由于您的集群哈希槽已正确分配,这一步可能不需要。但若在 CLUSTER INFOCLUSTER NODES 输出中出现哈希槽未完全覆盖的情况,则需手动或使用命令再分配未覆盖的槽。
确认集群状态恢复
  • 查看集群状态:确认集群已经恢复正常运行,运行 CLUSTER INFOCLUSTER NODES 命令再次检查集群的状态和节点的信息。

如果集群状态没有立即恢复,可能需要一点时间让集群重新完成选举和同步。监控集群的状态和日志,确保所有问题都已经被解决。

添加新的从节点(如果需要)
  • 如果您从集群中移除了故障节点,并且希望保持原来的高可用配置,您可能需要添加新的节点作为从节点。使用 CLUSTER MEET 命令将新节点加入集群,然后根据需要使用 CLUSTER REPLICATE <master-node-id> 来指定它复制的主节点。

处理Redis集群中的问题通常需要仔细分析现有的配置和状态。在多数情况下,问题可以通过配置调整、网络问题解决或是节点重启来解决。确保在操作集群时认真谨慎,避免造成数据丢失或服务中断。

  1. 检查集群状态:使用 CLUSTER NODESCLUSTER INFO 命令检查集群的状态和节点的健康状况。
    在这里插入图片描述
    登入其他机器进行远程连接:
    在这里插入图片描述
    上图可以发现集群状态是:Redis集群当前状态fail失败的。这说明集群无法正常工作,但是没有指定的槽位处于 pfail(可能失败)或 fail(失败)状态。这种情况可能是由于集群的一部分节点不可达或出现了其他问题导致的。以下是一些可能的解决步骤:

检查和解决集群问题

  1. 检查所有节点和网络:首先,您需要确保集群中所有节点的Redis服务都在正常运行,并且网络之间能够互相通信。对于集群中的每个节点,您可以尝试使用 ping 来确认网络连通性。

  2. 检查每个节点的CLUSTER NODES:对于集群中的每个节点,使用类似下面的命令来获取更详细的节点状态信息:

    redis-cli -c -h <节点IP> -p <端口> -a 'qax@123!' CLUSTER NODES
    

    检查输出中是否有节点的状态是 failpfail
    在这里插入图片描述

  3. 重新配置失联节点:如果找到了失联的节点,您可能需要重新加入这些节点到集群中。您可以使用 CLUSTER MEET 命令使得节点重新加入集群。例如,如果有一个节点的IP是 x.xx.xx.xxx,端口是 7001,您可以在任何一个集群节点上执行:

    redis-cli -c -h 8.xx.xx.174 -p 7000 -a 'xxx!' CLUSTER MEET x.xx.xx.xxx 7001
    

    这会让当前节点邀请这个新的节点加入Redis集群。
    在这里插入图片描述

  4. 检查和分配未覆盖的哈希槽:根据您的输出,存在一些未被分配的哈希槽(cluster_slots_assigned:10924),Redis集群需要所有16384个哈希槽都被分配和覆盖。您可能需要手动或使用脚本来分配这些槽到集群节点上,确保所有槽都被覆盖。

  5. 使用Redis Cluster Manager修复集群:Redis集群提供了一个命令行工具 redis-cli --cluster,可以用来帮助修复集群,包括分配槽位等。例如,您可以使用下面的命令尝试自动修复集群:

    redis-cli --cluster fix <任一节点IP>:<端口>
    

    按照提示进行操作,这个命令会尝试自动修复集群的问题,包括分配未覆盖的槽位等。

修复Redis集群通常需要根据集群的实际状态来采取相应的措施。以上提供的是一些通用的解决方法和建议,希望能够帮助您解决问题。

确认复制和数据分发

  • 如果打算使用复制(主从架构)来增加数据的安全性,您需要配置从节点并指定它们复制的主节点。

  • 检查数据的分布和键的分配,可以使用 CLUSTER SLOTS 命令来查看键的分布情况。
    在这里插入图片描述

以上是关于如何维护和扩展Redis集群的基本指导。确保您根据实际情况调整和应用配置。如果需要进一步帮助,您可以查阅官方的Redis集群文档或提出具体问题。

12.造数据

vim redis.go

package mainimport ("context""fmt""github.com/go-redis/redis/v8""math/rand""time"
)var ctx = context.Background()func main() {rand.Seed(time.Now().UnixNano())// 连接到Redis集群rdb := redis.NewClusterClient(&redis.ClusterOptions{Addrs: []string{"xxx.xxx.xxx.xxx:7001"}, // 用实际的节点地址替换Password: "xxxx!", // 设置密码,如果没有密码则留空})// 测试连接err := rdb.Ping(ctx).Err()if err != nil {panic(err)}// 插入数据for i := 0; i < 10000; i++ {key := fmt.Sprintf("key%d", i)value := rand.Intn(100)err := rdb.Set(ctx, key, value, 0).Err()if err != nil {panic(err)}}fmt.Println("10000 keys set.")
}

执行go脚本批量生成数据

go mod init redis
go mod tidy
go mod vendor
go run redis.go

运行完毕,生成10000条测试数据:
在这里插入图片描述

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

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

相关文章

计算机三级等级考试

计算机等级考试&#xff1a; 一&#xff1a;理论知识考试 100分考60分 1&#xff1a;题库 二&#xff1a;技能考试 100分考60分 1&#xff1a;写文档 项目概述 功能描述 数据库设计 UML 绘 图 用例图 与 包图&#xff08;两个图&#xff09; 2&…

使用 nmcli 命令设置 IP 地址并排查网络故障

在现代网络管理中&#xff0c;nmcli&#xff08;NetworkManager Command Line Interface&#xff09;是一个非常强大和实用的工具。它不仅可以帮助你设置 IP 地址&#xff0c;还能协助排查各种网络故障。今天&#xff0c;我们将深入探讨如何使用 nmcli 命令来高效地管理你的网络…

node mysql的增删改查基础

学习koa时&#xff0c;不选择mongodb&#xff0c;而是MySQL&#xff0c;虽然node对mongodb更亲和&#xff0c;但是我感觉MySQL的键值对的储存结构更正规 1.首选确认你的数据库有个库。有个表,我的如下 2.配置 let mySqlConfig{host:localhost,user:root,password:123456,data…

C#操作MySQL从入门到精通(10)——对查询数据进行通配符过滤

前言 我们有时候需要查询数据,并且这个数据包含某个字符串,这时候我们再使用where就无法实现了,所以mysql中提供了一种模糊查询机制,通过Like关键字来实现,下面进行详细介绍: 本次查询的表中数据如下: 1、使用(%)通配符 %通配符的作用是,表示任意字符出现任意次数…

rose 聊开源—1 你为什么需要一个开源项目

我自己从最开始开源 rosedb/lotusdb&#xff0c;以及一些其他组件&#xff0c;折腾开源也有很多年了&#xff0c;这次想写一个关于开源项目的系列&#xff0c;结合我自己的实际经历&#xff0c;讲讲开源项目的开发、参与、维护、流程规范、收获、盈利等内容&#xff0c;希望这个…

2024.6.5

1、react原理学习&#xff0c; hook、fiber 2、瀑布流组件完善 3、代码随想录二刷

如何充分利用代理IP扩大网络接触面

目录 前言 第一部分&#xff1a;什么是代理IP&#xff1f; 第二部分&#xff1a;如何获取代理IP&#xff1f; 1. IP质量 2. 匿名性 3. 限制 第三部分&#xff1a;如何使用代理IP&#xff1f; 第四部分&#xff1a;如何充分利用代理IP&#xff1f; 总结&#xff1a; 前…

【java前端课堂】04_类的继承

类的继承 在Java中&#xff0c;继承是面向对象编程的四大基本特性之一&#xff0c;它允许我们根据一个已有的类来定义一个新的类&#xff0c;这个新的类继承了原有类的特性&#xff08;属性和方法&#xff09;&#xff0c;并可以添加新的特性或修改原有特性。这样&#xff0c;…

Web前端框架:深入探索与实践

Web前端框架&#xff1a;深入探索与实践 在当下数字化飞速发展的时代&#xff0c;Web前端框架的选择与应用成为了开发者们关注的焦点。Node.js&#xff0c;作为一种强大的后端技术&#xff0c;在前端框架的构建中也发挥着不可或缺的作用。本文将围绕Node.js Web前端框架&#…

KNN 算法【python,机器学习,算法】

KNN&#xff08;K-Nearest Neighbors&#xff09;算法是一种基本的、易于理解的机器学习算法&#xff0c;用于分类和回归问题。在 KNN 中&#xff0c;一个对象的分类或值是基于其k个最近邻居的多数投票或平均值来决定的。 基本原理 距离度量&#xff1a;首先&#xff0c;KNN …

SRE养成计划之02-基本命令(持续更新)

基本命令&#xff08;续&#xff09; 软连接 软连接 --> 原始文档 --> 文档数据格式&#xff1a;ln -s 原始文件或目录 软连接文件若原始文件或目录被删除&#xff0c;链接文件将失效软连接可存放在不同分分区/文件系统 硬链接 硬链接 --> 文档数据格式&#xff1…

【Python数据预处理系列】Pandas 数据操作实战:掌握 .loc[] 方法进行高效数据选取

文章将详细介绍.loc[]方法的各种使用场景&#xff0c;帮助读者深入理解并掌握这一核心功能。 在Pandas库中&#xff0c;.loc[]方法是一种强大而灵活的数据选取工具。本文将通过详细的步骤和示例&#xff0c;手把手教您如何利用这一工具进行高效的数据操作。 首先&#xff0c;我…

waf安全事件的监控指标

概述 Web应用防火墙&#xff08;WAF&#xff09;是一种网络安全设备&#xff0c;主要用于保护网站免受各种网络攻击&#xff0c;如SQL注入、跨站脚本&#xff08;XSS&#xff09;等。WAF通过监视和分析传入的应用程序流量&#xff0c;根据预设的规则集对流量进行过滤&#xff…

加入 Microsoft Build 2024 的 .NET 团队!

作者&#xff1a;Mehul Harry 排版&#xff1a;Alan Wang Microsoft Build 2024 为 .NET 爱好者带来了一系列精彩的会议。无论您是经验丰富的开发人员还是刚刚开始您的开发之旅&#xff0c;每个人都能找到适合自己的东西。 活动形式&#xff1a;混合体验 大会通过现场和在线会…

力扣180题:连续出现的数字

关注微信公众号 数据分析螺丝钉 免费领取价值万元的python/java/商业分析/数据结构与算法学习资料 在本篇文章中&#xff0c;我们将详细解读力扣第180题“连续出现的数字”。通过学习本篇文章&#xff0c;读者将掌握如何使用SQL语句来解决这一问题&#xff0c;并了解相关的复杂…

掌握SVG基础:从零开始学习

格栅图可以实现图片的清晰显示&#xff0c;但这也意味着如果要在各种设备上使用格栅图&#xff0c;就会增加大量不同规格的格栅图&#xff0c;以适应各种尺寸的设备。这也直接导致资源文件体积的增加&#xff0c;矢量图没有这个问题。本文将SVG代码编写与即时设计工具相结合&am…

C++ Primer 总结索引 | 第十五章:面向对象程序设计

继承和动态绑定 对程序的编写 有两方面的影响&#xff1a;一是 我们可以更容易地定义与其他类相似 但不完全相同的新类&#xff1b;二是 在使用这些彼此相似的类编写程序时&#xff0c;我们可以在一定程度上 忽略掉它们的区别 在很多程序中都存在着一些相互关联 但是有细微差别…

第6章 支持向量机

SVM&#xff08;Support Vector Machine, 支持向量机&#xff09;有很多实现&#xff0c;但是本章其中最流行的一种实现&#xff0c;即序列最小优化(Sequence Minimal Optimization&#xff0c; SMO)算法。 最小优化(Sequence Minimal Optimization&#xff0c; SMO)算法 一种求…

PDF批量加水印 与 去除水印实践

本文主要目标是尝试去除水印&#xff0c;但是为了准备测试数据&#xff0c;我们需要先准备好有水印的pdf测试文件。 注意&#xff1a;本文的去水印只针对文字悬浮图片悬浮两种特殊情况&#xff0c;即使是这两种情况也不代表一定都可以去除水印。 文章目录 批量添加透明图片水印…

Pspark从hive读数据写到Pgsql数据库

前提条件 要使用PySpark从Hive读取数据并写入到PostgreSQL数据库&#xff0c;你需要确保以下几点&#xff1a; 你的PySpark环境已经配置好&#xff0c;并且能够连接到你的Hive数据。 PostgreSQL JDBC驱动程序已经添加到你的PySpark环境中。 你已经在PostgreSQL中创建好了相应…