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

Redis集群配置 (不使用docker 部署)

1. Redis集群简介
1.1 什么是Redis集群

Redis集群是一种通过将多个Redis节点连接在一起以实现高可用性、数据分片和负载均衡的技术。它允许Redis在不同节点上同时提供服务,提高整体性能和可靠性。根据搭建的方式和集群的特性,Redis集群主要有三种模式:主从复制模式(Master-Slave)、哨兵模式(Sentinel)和Cluster模式。

1.2 Redis集群的作用和优势
  1. 高可用性:Redis集群可以在某个节点发生故障时,自动进行故障转移,保证服务的持续可用。
  2. 负载均衡:Redis集群可以将客户端请求分发到不同的节点上,有效地分摊节点的压力,提高系统的整体性能。
  3. 容灾恢复:通过主从复制或哨兵模式,Redis集群可以在主节点出现故障时,快速切换到从节点,实现业务的无缝切换。
  4. 数据分片:在Cluster模式下,Redis集群可以将数据分散在不同的节点上,从而突破单节点内存限制,实现更大规模的数据存储。
  5. 易于扩展:Redis集群可以根据业务需求和系统负载,动态地添加或移除节点,实现水平扩展。

通过了解Redis集群的概念和优势,接下来将详细介绍三大集群模式的原理、配置、优缺点以及应用场景。

2. 主从复制模式(Master-Slave)
2.1 主从复制原理

主从复制是Redis的一种基本集群模式,它通过将一个Redis节点(主节点)的数据复制到一个或多个其他Redis节点(从节点)来实现数据的冗余和备份。

主节点负责处理客户端的操作,同时从节点会实时同步主节点的数据。客户端可以从从节点读取数据,实现读写分离,提高系统性能。

在复制的概念中,数据库分为两类,一类是主数据库(master),另一类是从数据库[1](replica)。主数据库可以进行读写操作,当写操作导致数据变化时会自动将数据同步给从数据库。而从数据库一般是只读的并接收主数据库同步过来的数据。一个主数据库可以拥有多个从数据库,而一个从数据库只能拥有一个主数据库

Redis集群配置_Redis_02

2.2 主从复制配置和实现

在Redis中使用复制功能非常容易,只需要在从数据库的配置文件中加入“slaveof主数据库地址 主数据库端口“,主数据库无须进行任何配置。

我们要在一台服务器上启动两个Redis实例,其中一个作为主数据库,另一个作为从数据库,监听不同端口。首先我们不加任何参数来启动一个Redis实例作为主数据库:

登录后复制

<code class="language-plain has-numbering hljs" id="code_id_0">$ redis-server</code>
  • 1.

该实例默认监听6379端口。然后加上slaveof参数启动另一个Redis实例作为从数据库,并让其监听6380端口:

登录后复制

<code class="language-plain has-numbering hljs" id="code_id_1">$ redis-server --port 6380 --slaveof 127.0.0.1 6379</code>
  • 1.

此时,在主数据库中的任何数据变化都会自动地同步到从数据库中。我们打开redis-cli实例A并连接到主数据库:

登录后复制

<code class="language-plain has-numbering hljs" id="code_id_2">$ redis-cli -p 6379</code>
  • 1.

再打开redis-cli实例B并连接到从数据库:

登录后复制

<code class="language-plain has-numbering hljs" id="code_id_3">$ redis-cli -p 6380</code>
  • 1.

此时我们使用INFO命令来分别在实例A和实例B中获取replication节点的相关信息:

登录后复制

<code class="language-plain has-numbering hljs" id="code_id_4">redis A> INFO replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=1,lag=1
master_repl_offset:1</code>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

可以看到,实例A的角色(上面输出中的role)是master,即主数据库,同时已连接的从数据库(上面输出中的connected_slaves)的个数为1。

同样在实例B中获取相应的信息为:

登录后复制

<code class="language-plain has-numbering hljs" id="code_id_5">redis B> INFO replication
role:slave
master_host:127.0.0.1
master_port:6379</code>
  • 1.
  • 2.
  • 3.
  • 4.

从这里可以看到,实例B的role是slave,即从数据库,同时其主数据库的IP地址为127.0.0.1,端口号为6379。在实例A中使用SET命令设置一个键的值:

登录后复制

<code class="language-plain has-numbering hljs" id="code_id_6">$ redis A> SET foo bar
OK</code>
  • 1.
  • 2.

此时在实例B中就可以获得该值了:

登录后复制

<code class="language-plain has-numbering hljs" id="code_id_7">$ redis B> GET foo
"bar"</code>
  • 1.
  • 2.

可以通过设置从数据库的配置文件中的slave-read-only为no以使从数据库可写,但是因为对从数据库的任何更改都不会同步给任何其他数据库,并且一旦主数据库中更新了对应的数据就会覆盖从数据库中的更改,所以通常的场景下不应该设置从数据库可写,以免导致易被忽略的潜在应用逻辑错误。配置多个从数据库的方法也一样,在所有的从数据库的配置文件中都加上 slaveof参数指向同一个主数据库即可。

除了通过配置文件或命令行参数设置slaveof参数,还可以在运行时使用SLAVEOF命令修改:

登录后复制

<code class="language-plain has-numbering hljs" id="code_id_9">$ redis> SLAVEOF 127.0.0.1 6379</code>
  • 1.

如果该数据库已经是其他主数据库的从数据库了,SLAVEOF命令会停止和原来数据库的同步转而和新数据库同步。此外对从数据库来说,还可以使用SLAVEOF NO ONE命令来使当前数据库停止接收其他数据库的同步数据并转换成为主数据库。

2.3 主从复制的优缺点

优点

  1. 配置简单,易于实现。
  2. 实现数据冗余,提高数据可靠性。
  3. 读写分离,提高系统性能。

缺点

  1. 主节点故障时,需要手动切换到从节点,故障恢复时间较长。
  2. 主节点承担所有写操作,可能成为性能瓶颈。
  3. 无法实现数据分片,受单节点内存限制。
2.4 主从复制场景应用

主从复制模式适用于以下场景:

  1. 数据备份和容灾恢复:通过从节点备份主节点的数据,实现数据冗余。
  2. 读写分离:将读操作分发到从节点,减轻主节点压力,提高系统性能。
  3. 在线升级和扩展:在不影响主节点的情况下,通过增加从节点来扩展系统的读取能力。

总结:主从复制模式适合数据备份、读写分离和在线升级等场景,但在主节点故障时需要手动切换,不能自动实现故障转移。如果对高可用性要求较高,可以考虑使用哨兵模式或Cluster模式。

3. 哨兵模式(Sentinel)
3.1 哨兵模式原理

哨兵模式是在主从复制基础上加入了哨兵节点,实现了自动故障转移。哨兵节点是一种特殊的Redis节点,它会监控主节点和从节点的运行状态。当主节点发生故障时,哨兵节点会自动从从节点中选举出一个新的主节点,并通知其他从节点和客户端,实现故障转移。

顾名思义,哨兵的作用就是监控Redis系统的运行状况,它的功能包括以下两个。

(1)监控主数据库和从数据库是否正常运行。

(2)当主数据库出现故障时,自动将从数据库转换为主数据库。哨兵是一个独立的进程。

在一个一主多从的Redis系统中,可以使用多个哨兵进行监控任务以保证系统足够稳健,注意,此时不仅哨兵会同时监控主数据库和从数据库,哨兵之间也会互相监控。

3.2 哨兵模式配置和实现

我们采用一主(master)二从(slave)三sentinel的架构模式来做演示

登录后复制

<code class="language-plain has-numbering hljs" id="code_id_10">master ip:127.0.0.1 port:6379
slave1 ip:127.0.0.1 port:6380
slave2 ip:127.0.0.1 port:6381</code>
  • 1.
  • 2.
  • 3.
3.2.1 新建和修改配置文件
1、修改redis.conf配置文件

由于我们采用的是一主二从三sentinel的模式,所以我们需要6个配置文件,拷贝2份redis.conf配置文件,分别命名为redis6380.conf和redis6381.conf,其中修改redis.conf配置文件的如下几个参数:

登录后复制

<code class="language-plain has-numbering hljs" id="code_id_11">port 6379
bind 127.0.0.1</code>
  • 1.
  • 2.

修改redis6380.conf配置文件的如下几个参数:

登录后复制

<code class="language-plain has-numbering hljs" id="code_id_12">port 6380
bind 127.0.0.1
slaveof 127.0.0.1 6379  // 设置master服务器为6379</code>
  • 1.
  • 2.
  • 3.

同理修改redis6381.conf配置文件

2、创建并修改sentinel.conf

该模式使用了3 sentinel,所以我们需要复制3份sentinel.conf配置文件,并分别命名为sentinel26379.conf,sentinel26479.conf和sentinel26579.conf,其中修改sentinel.conf配置文件中的如下几个参数:

登录后复制

<code class="language-plain has-numbering hljs" id="code_id_13">port 26379 // 当前Sentinel服务运行的端口
sentinel monitor mymaster 127.0.0.1 6379 2 
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 15000</code>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

同理,修改另外的两个配置文件。 配置文件说明:

1、**port :**当前Sentinel服务运行的端口

2、**sentinel monitor mymaster 127.0.0.1 6379 2:**Sentinel去监视一个名为mymaster的主redis实例,这个主实例的IP地址为本机地址127.0.0.1,端口号为6379,而将这个主实例判断为失效至少需要2个 Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行

3、**sentinel down-after-milliseconds mymaster 5000:**指定了Sentinel认为Redis实例已经失效所需的毫秒数。当 实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行

4、**sentinel parallel-syncs mymaster 1:**指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长

5、**sentinel failover-timeout mymaster 15000:**如果在该时间(ms)内未能完成failover操作,则认为该failover失败

3.2.2 启动服务器
1、分别启动master,slave1,slave2

启动命令分别如下:

登录后复制

<code class="language-plain has-numbering hljs" id="code_id_14">redis-server.exe redis.conf
redis-server.exe redis6380.conf
redis-server.exe redis6381.conf</code>
  • 1.
  • 2.
  • 3.
2、分别启动sentinel1,sentinel2,sentinel3

启动命令分别如下:

登录后复制

<code class="language-plain has-numbering hljs" id="code_id_15">redis-server.exe sentinel.conf --sentinel
redis-server.exe sentinel26479.conf --sentinel
redis-server.exe sentinel26579.conf --sentinel</code>
  • 1.
  • 2.
  • 3.
3、查看redis服务器状态

4、查看sentinel的状态

3.2.3 redis主从自动failover测试

我们停止Master服务,查看剩余服务的运行状态,如下图:

从上图中可以看出来,master的服务器端口从6379变成了6380,也就是说redis自动的实现了主从切换

4. Cluster模式
4.1 Cluster模式原理

Cluster模式是Redis的一种高级集群模式,它通过数据分片和分布式存储实现了负载均衡和高可用性。**在Cluster模式下,Redis将所有的键值对数据分散在多个节点上。每个节点负责一部分数据,称为槽位。**通过对数据的分片,Cluster模式可以突破单节点的内存限制,实现更大规模的数据存储。

4.2 数据分片与槽位

Redis Cluster将数据分为16384个槽位,每个节点负责管理一部分槽位。当客户端向Redis Cluster发送请求时,Cluster会根据键的哈希值将请求路由到相应的节点。具体来说,Redis Cluster使用CRC16算法计算键的哈希值,然后对16384取模,得到槽位编号。

4.3 Cluster模式配置和实现

配置Redis节点:为每个节点创建一个redis.conf配置文件,并添加如下配置:

登录后复制

<code class="language-plain has-numbering hljs" id="code_id_16"># 【注意】节点不一样,IP不一样,记得修改这个bind配置
bind 0.0.0.0# cluster节点端口号
port 7001# 配置yes则开启集群功能,此redis实例作为集群的一个节点,否则,它是一个普通的单一的redis实例。
cluster-enabled yes# 必须配置,否则会出现:waiting for the cluster to join
# 虽然此配置的名字叫"集群配置文件",但是此配置文件不能人工编辑,它是集群节点自动维护的文件,主要用于记录集群中有哪些节点、他们的状态以及一些持久化参数等,方便在重启时恢复这些状态。通常是在收到请求之后这个文件就会被更新。
cluster-config-file nodes_7001.conf# 节点超时时间
cluster-node-timeout 15000</code>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

像这样的配置,一共需要创建6个,我们做一个三主三从的集群。

启动Redis节点:使用如下命令启动6个节点:

登录后复制

<code class="language-plain has-numbering hljs" id="code_id_17">$ redis> redis-server redis_7001.conf</code>

创建Redis Cluster:使用Redis命令行工具执行如下命令创建Cluster:

登录后复制

<code class="language-plain has-numbering hljs" id="code_id_18">$ redis> redis-cli --cluster create 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 127.0.0.1:7006 --cluster-replicas 1</code>
  • 1.
  1. cluster-replicas 表示从节点的数量,1代表每个主节点都有一个从节点。
  2. 验证Cluster模式:向Cluster发送请求,观察请求是否正确路由到相应的节点。

查看集群信息

新建一个命令行窗口,输入以下命令登录:

<code class="language-plain has-numbering hljs" id="code_id_19">$ redis-cli -c -p 7001</code>

输入以下Redis命令查看集群信息

cluster nodes、cluster info、info replication

cluster nodes查看集群节点

<code class="language-plain has-numbering hljs" id="code_id_20">$ 127.0.0.1:7001> cluster nodes
4e404dd64cc2b099d1dfe9ac0f37a6dbf0bd66a9 127.0.0.1:7003@17003 master - 0 1702182050000 3 connected 10923-16383
771c3bb6e12f4979305d7640aaced1b981917c0a 127.0.0.1:7002@17002 master - 0 1702182053140 2 connected 5461-10922
dcdd6db0effa3c08ac2a8b96a7d75bc44f84fb7b 127.0.0.1:7004@17004 slave 771c3bb6e12f4979305d7640aaced1b981917c0a 0 1702182050930 4 connected
6b011cb1ccf1b427ffb431ed0f07aa5e6101f5da 127.0.0.1:7006@17006 slave d9a9044e33276ac07d96ccd35038c8ce4d412755 0 1702182051000 6 connected
d9a9044e33276ac07d96ccd35038c8ce4d412755 127.0.0.1:7001@17001 myself,master - 0 1702182049000 1 connected 0-5460
123b7ca3c4f59762da67e121c279be8cc5a74ee5 127.0.0.1:7005@17005 slave 4e404dd64cc2b099d1dfe9ac0f37a6dbf0bd66a9 0 1702182052037 5 connected</code>

cluster info查看集群信息

<code class="language-plain has-numbering hljs" id="code_id_21">$ 127.0.0.1:7001> 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:1
cluster_stats_messages_ping_sent:1808
cluster_stats_messages_pong_sent:1727
cluster_stats_messages_sent:3535
cluster_stats_messages_ping_received:1722
cluster_stats_messages_pong_received:1808
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:3535</code>

info replication查看主从信息

<code class="language-plain has-numbering hljs" id="code_id_22">127.0.0.1:7001> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=7006,state=online,offset=2705,lag=1
master_replid:1f40986af754e76e8523920a5ae94282d8d9d1e5
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2705
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2705</code>

登录7001,尝试写入一个信息

<code class="language-plain has-numbering hljs" id="code_id_23">$ redis-cli -c -p 7001</code>

注意,一定要加-c(集群模式)参数,否则会报错:(error) MOVED 15495 127.0.0.1:7003

从上图可以看到,Cluster模式会根据自己的算法,自动选择对应的节点写入数据,并且自动重定向到对应的节点。

4.4 Cluster模式的优缺点

优点

  1. 数据分片,实现大规模数据存储。
  2. 负载均衡,提高系统性能。
  3. 自动故障转移,提高高可用性。

缺点

  1. 配置和管理较复杂。
  2. 一些复杂的多键操作可能受到限制。
4.5 Cluster模式场景应用

Cluster模式适用于以下场景:

  1. 大规模数据存储:通过数据分片,突破单节点内存限制。
  2. 高性能要求场景:通过负载均衡,提高系统性能。
  3. 高可用性要求场景:通过自动故障转移,确保服务的持续可用。

总结:Cluster模式在提供高可用性的同时,实现了数据分片和负载均衡,适用于大规模数据存储和高性能要求的场景。然而,它的配置和管理相对复杂,且某些复杂的多键操作可能受到限制。

5. 总结

本文详细介绍了Redis的三大集群模式:主从复制、哨兵模式和Cluster模式。每种模式都有其特点和应用场景,具体如下:

  1. 主从复制模式:适用于数据备份和读写分离场景,配置简单,但在主节点故障时需要手动切换。
  2. 哨兵模式:在主从复制的基础上实现自动故障转移,提高高可用性,适用于高可用性要求较高的场景。
  3. Cluster模式:通过数据分片和负载均衡实现大规模数据存储和高性能,适用于大规模数据存储和高性能要求场景。

在实际应用中,可以根据系统的需求和特点选择合适的Redis集群模式,以实现高可用性、高性能和大规模数据存储等目标。

相关文章:

Redis集群配置 (不使用docker 部署)

1. Redis集群简介 1.1 什么是Redis集群 Redis集群是一种通过将多个Redis节点连接在一起以实现高可用性、数据分片和负载均衡的技术。它允许Redis在不同节点上同时提供服务&#xff0c;提高整体性能和可靠性。根据搭建的方式和集群的特性&#xff0c;Redis集群主要有三种模式&…...

HTML5系列(7)-- Web Storage 实战指南

前端技术探索系列&#xff1a;HTML5 Web Storage 实战指南 &#x1f5c4;️ 致读者&#xff1a;本地存储的新纪元 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 HTML5 中的 Web Storage 技术&#xff0c;这是一个强大的本地存储解决方案&#xff0c;让我们能…...

【在Linux世界中追寻伟大的One Piece】读者写者问题与读写锁

目录 1 -> 读者写者问题 1.1 -> 什么是读者写者问题 1.2 -> 读者写者与生产消费者的区别 1.3 -> 如何理解读者写者问题 2 -> 读写锁 2.1 -> 读写锁接口 3 -> 读者优先(Reader-Preference) 4 -> 写者优先(Writer-Preference) 1 -> 读者写者…...

用到动态库的程序运行过程

当我们写好了一段代码然后编译运行后会生成可执行文件&#xff0c;该文件会存在磁盘的当前目录下&#xff0c;而当我们开始运行这段程序时&#xff0c;操作系统&#xff08;加载器&#xff09;需要将其从磁盘加载进内存然后执行相关操作&#xff0c;而对于用到动态库的程序&…...

类型转换与IO流:C++世界的变形与交互之道

文章目录 前言&#x1f384;一、类型转换&#x1f388;1.1 隐式类型转换&#x1f388;1.2 显式类型转换&#x1f381;1. C 风格强制类型转换&#x1f381;2. C 类型转换操作符 &#x1f388;1.3 C 类型转换操作符详解&#x1f381;1. static_cast&#x1f381;2. dynamic_cast&…...

Pytorch使用手册- TorchVision目标检测微调Tutorial的使用指南(专题十二)

这篇教程的目标是对一个预训练的 Mask R-CNN 模型进行微调,应用于 Penn-Fudan 行人检测与分割数据集。该数据集包含 170 张图像,里面有 345 个行人实例,我们将通过这个教程来演示如何使用 torchvision 中的新特性,训练一个面向自定义数据集的目标检测和实例分割模型。 注意…...

人工智能机器学习算法分类全解析

目录 一、引言 二、机器学习算法分类概述 &#xff08;一&#xff09;基于学习方式的分类 1. 监督学习&#xff08;Supervised Learning&#xff09; 2. 无监督学习&#xff08;Unsupervised Learning&#xff09; 3. 强化学习&#xff08;Reinforcement Learning&#xf…...

Linux 35.6 + JetPack v5.1.4@DeepStream安装

Linux 35.6 JetPack v5.1.4DeepStream安装 1. 源由2. 步骤Step 1 安装Jetpack 5.1.4 L4T 35.6Step 2 安装依赖组件Step 3 安装librdkafkaStep 4 安装 DeepStream SDKStep 5 测试 deepstream-appStep 6 运行 deepstream-app 3. 总结3.1 版本问题3.2 二进制help 4. 参考资料 1. …...

图数据库 | 11、图数据库架构设计——高性能图存储架构(下)

在上篇内容中&#xff0c;老夫着重讲了高性能图存储系统的特点&#xff0c;咱们继续往下讲重点——高性能存储架构的设计思路&#xff01;&#xff01; 2.高性能存储架构设计思路 首先呢&#xff0c;存储架构以及核心数据结构的设计思路通常围绕如下4个维度来进行&#xff1a…...

【HTTP】HTTP协议

一个Web Server就是个服务器软件&#xff08;程序&#xff09;&#xff0c;或者是运行这个服务器软件的硬件&#xff08;计算机&#xff09;&#xff0c;其主要功能是通过HTTP协议与客户端进行通信&#xff0c;来接收&#xff0c;存储&#xff0c;处理来自客户端的HTTP请求&…...

大数据新视界 -- Hive 基于 MapReduce 的执行原理(上)(23 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

SpringBoot源码解析(六):打印Banner

SpringBoot源码系列文章 SpringBoot源码解析(一)&#xff1a;SpringApplication构造方法 SpringBoot源码解析(二)&#xff1a;引导上下文DefaultBootstrapContext SpringBoot源码解析(三)&#xff1a;启动开始阶段 SpringBoot源码解析(四)&#xff1a;解析应用参数args Sp…...

【计算机网络】实验6:IPV4地址的构造超网及IP数据报

实验 6&#xff1a;IPV4地址的构造超网及IP数据报 一、 实验目的 加深对IPV4地址的构造超网&#xff08;无分类编制&#xff09;的了解。 加深对IP数据包的发送和转发流程的了解。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、了解IPV4地址的构造超网…...

easy excel 生成excel 文件

导包 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.3</version> </dependency> 内容 List<类> limspjreport 值; String fileName sdf.format(new Date()) "-…...

Ajax:回忆与节点

一点回忆 面对我的Ajax学习&#xff0c;实现前后端交互&#xff0c;最开始我采用的使用网络寻找intellij IDEA Ultimate破解方法&#xff0c;然后最终成功&#xff0c;然后按照相关教程配置java ee项目&#xff0c;然后中间又去配置了Tomcat服务器&#xff0c;然后又去学习了一…...

Python+OpenCV系列:Python和OpenCV的结合和发展

PythonOpenCV系列&#xff1a;Python和OpenCV的结合和发展 **引言****Python语言的发展****1.1 Python的诞生与发展****1.2 Python的核心特性与优势****1.3 Python的应用领域** **OpenCV的发展****2.1 OpenCV的起源与发展****2.2 OpenCV的功能特性****2.3 OpenCV的应用场景** *…...

Ubuntu20.04 由源码编译安装opencv3.2 OpenCV

Ubuntu20.04 由源码编译安装opencv3.2.0 获取 opencv 及opencv_contrib源代码 创建目录以存放opencv及opencv_contrib源代码 mkdir ~/opencv3.2.0 cd ~/opencv3.2.0获取opencv源代码并切换到对应tag git clone https://github.com/opencv/opencv.git cd opencv git checkou…...

A058-基于Spring Boot的餐饮管理系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看项目链接获取⬇️&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600个选题ex…...

RDIFramework.NET CS敏捷开发框架 SOA服务三种访问(直连、WCF、WebAPI)方式

1、介绍 在软件开发领域&#xff0c;尤其是企业级应用开发中&#xff0c;灵活性、开放性、可扩展性往往是项目成功的关键因素。对于C/S项目&#xff0c;如何高效地与后端数据库进行交互&#xff0c;以及如何提供多样化的服务访问方式&#xff0c;是开发者需要深入考虑的问题。…...

Linux——命名管道及日志

linux——进程间通信及管道的应用场景-CSDN博客 文章目录 目录 文章目录 前言 一、命名管道是什么&#xff1f; 理解&#xff1a; 2、编写代码 makefile 管道封装成类&#xff0c;想用中管道时只需要调用实例化 读端 写端 日志 1、日志是什么&#xff1f; 2、日志有什么&#x…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...