Redis集群配置 (不使用docker 部署)
1. Redis集群简介
1.1 什么是Redis集群
Redis集群是一种通过将多个Redis节点连接在一起以实现高可用性、数据分片和负载均衡的技术。它允许Redis在不同节点上同时提供服务,提高整体性能和可靠性。根据搭建的方式和集群的特性,Redis集群主要有三种模式:主从复制模式(Master-Slave)、哨兵模式(Sentinel)和Cluster模式。
1.2 Redis集群的作用和优势
- 高可用性:Redis集群可以在某个节点发生故障时,自动进行故障转移,保证服务的持续可用。
- 负载均衡:Redis集群可以将客户端请求分发到不同的节点上,有效地分摊节点的压力,提高系统的整体性能。
- 容灾恢复:通过主从复制或哨兵模式,Redis集群可以在主节点出现故障时,快速切换到从节点,实现业务的无缝切换。
- 数据分片:在Cluster模式下,Redis集群可以将数据分散在不同的节点上,从而突破单节点内存限制,实现更大规模的数据存储。
- 易于扩展:Redis集群可以根据业务需求和系统负载,动态地添加或移除节点,实现水平扩展。
通过了解Redis集群的概念和优势,接下来将详细介绍三大集群模式的原理、配置、优缺点以及应用场景。
2. 主从复制模式(Master-Slave)
2.1 主从复制原理
主从复制是Redis的一种基本集群模式,它通过将一个Redis节点(主节点)的数据复制到一个或多个其他Redis节点(从节点)来实现数据的冗余和备份。
主节点负责处理客户端的写操作,同时从节点会实时同步主节点的数据。客户端可以从从节点读取数据,实现读写分离,提高系统性能。
在复制的概念中,数据库分为两类,一类是主数据库(master),另一类是从数据库[1](replica)。主数据库可以进行读写操作,当写操作导致数据变化时会自动将数据同步给从数据库。而从数据库一般是只读的,并接收主数据库同步过来的数据。一个主数据库可以拥有多个从数据库,而一个从数据库只能拥有一个主数据库

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 主从复制的优缺点
优点:
- 配置简单,易于实现。
- 实现数据冗余,提高数据可靠性。
- 读写分离,提高系统性能。
缺点:
- 主节点故障时,需要手动切换到从节点,故障恢复时间较长。
- 主节点承担所有写操作,可能成为性能瓶颈。
- 无法实现数据分片,受单节点内存限制。
2.4 主从复制场景应用
主从复制模式适用于以下场景:
- 数据备份和容灾恢复:通过从节点备份主节点的数据,实现数据冗余。
- 读写分离:将读操作分发到从节点,减轻主节点压力,提高系统性能。
- 在线升级和扩展:在不影响主节点的情况下,通过增加从节点来扩展系统的读取能力。
总结:主从复制模式适合数据备份、读写分离和在线升级等场景,但在主节点故障时需要手动切换,不能自动实现故障转移。如果对高可用性要求较高,可以考虑使用哨兵模式或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.
- cluster-replicas 表示从节点的数量,1代表每个主节点都有一个从节点。
- 验证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模式的优缺点
优点:
- 数据分片,实现大规模数据存储。
- 负载均衡,提高系统性能。
- 自动故障转移,提高高可用性。
缺点:
- 配置和管理较复杂。
- 一些复杂的多键操作可能受到限制。
4.5 Cluster模式场景应用
Cluster模式适用于以下场景:
- 大规模数据存储:通过数据分片,突破单节点内存限制。
- 高性能要求场景:通过负载均衡,提高系统性能。
- 高可用性要求场景:通过自动故障转移,确保服务的持续可用。
总结:Cluster模式在提供高可用性的同时,实现了数据分片和负载均衡,适用于大规模数据存储和高性能要求的场景。然而,它的配置和管理相对复杂,且某些复杂的多键操作可能受到限制。
5. 总结
本文详细介绍了Redis的三大集群模式:主从复制、哨兵模式和Cluster模式。每种模式都有其特点和应用场景,具体如下:
- 主从复制模式:适用于数据备份和读写分离场景,配置简单,但在主节点故障时需要手动切换。
- 哨兵模式:在主从复制的基础上实现自动故障转移,提高高可用性,适用于高可用性要求较高的场景。
- Cluster模式:通过数据分片和负载均衡实现大规模数据存储和高性能,适用于大规模数据存储和高性能要求场景。
在实际应用中,可以根据系统的需求和特点选择合适的Redis集群模式,以实现高可用性、高性能和大规模数据存储等目标。
相关文章:
Redis集群配置 (不使用docker 部署)
1. Redis集群简介 1.1 什么是Redis集群 Redis集群是一种通过将多个Redis节点连接在一起以实现高可用性、数据分片和负载均衡的技术。它允许Redis在不同节点上同时提供服务,提高整体性能和可靠性。根据搭建的方式和集群的特性,Redis集群主要有三种模式&…...
HTML5系列(7)-- Web Storage 实战指南
前端技术探索系列:HTML5 Web Storage 实战指南 🗄️ 致读者:本地存储的新纪元 👋 前端开发者们, 今天我们将深入探讨 HTML5 中的 Web Storage 技术,这是一个强大的本地存储解决方案,让我们能…...
【在Linux世界中追寻伟大的One Piece】读者写者问题与读写锁
目录 1 -> 读者写者问题 1.1 -> 什么是读者写者问题 1.2 -> 读者写者与生产消费者的区别 1.3 -> 如何理解读者写者问题 2 -> 读写锁 2.1 -> 读写锁接口 3 -> 读者优先(Reader-Preference) 4 -> 写者优先(Writer-Preference) 1 -> 读者写者…...
用到动态库的程序运行过程
当我们写好了一段代码然后编译运行后会生成可执行文件,该文件会存在磁盘的当前目录下,而当我们开始运行这段程序时,操作系统(加载器)需要将其从磁盘加载进内存然后执行相关操作,而对于用到动态库的程序&…...
类型转换与IO流:C++世界的变形与交互之道
文章目录 前言🎄一、类型转换🎈1.1 隐式类型转换🎈1.2 显式类型转换🎁1. C 风格强制类型转换🎁2. C 类型转换操作符 🎈1.3 C 类型转换操作符详解🎁1. static_cast🎁2. dynamic_cast&…...
Pytorch使用手册- TorchVision目标检测微调Tutorial的使用指南(专题十二)
这篇教程的目标是对一个预训练的 Mask R-CNN 模型进行微调,应用于 Penn-Fudan 行人检测与分割数据集。该数据集包含 170 张图像,里面有 345 个行人实例,我们将通过这个教程来演示如何使用 torchvision 中的新特性,训练一个面向自定义数据集的目标检测和实例分割模型。 注意…...
人工智能机器学习算法分类全解析
目录 一、引言 二、机器学习算法分类概述 (一)基于学习方式的分类 1. 监督学习(Supervised Learning) 2. 无监督学习(Unsupervised Learning) 3. 强化学习(Reinforcement Learning…...
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、图数据库架构设计——高性能图存储架构(下)
在上篇内容中,老夫着重讲了高性能图存储系统的特点,咱们继续往下讲重点——高性能存储架构的设计思路!! 2.高性能存储架构设计思路 首先呢,存储架构以及核心数据结构的设计思路通常围绕如下4个维度来进行:…...
【HTTP】HTTP协议
一个Web Server就是个服务器软件(程序),或者是运行这个服务器软件的硬件(计算机),其主要功能是通过HTTP协议与客户端进行通信,来接收,存储,处理来自客户端的HTTP请求&…...
大数据新视界 -- Hive 基于 MapReduce 的执行原理(上)(23 / 30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
SpringBoot源码解析(六):打印Banner
SpringBoot源码系列文章 SpringBoot源码解析(一):SpringApplication构造方法 SpringBoot源码解析(二):引导上下文DefaultBootstrapContext SpringBoot源码解析(三):启动开始阶段 SpringBoot源码解析(四):解析应用参数args Sp…...
【计算机网络】实验6:IPV4地址的构造超网及IP数据报
实验 6:IPV4地址的构造超网及IP数据报 一、 实验目的 加深对IPV4地址的构造超网(无分类编制)的了解。 加深对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学习,实现前后端交互,最开始我采用的使用网络寻找intellij IDEA Ultimate破解方法,然后最终成功,然后按照相关教程配置java ee项目,然后中间又去配置了Tomcat服务器,然后又去学习了一…...
Python+OpenCV系列:Python和OpenCV的结合和发展
PythonOpenCV系列: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的餐饮管理系统的设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看项目链接获取⬇️,记得注明来意哦~🌹 赠送计算机毕业设计600个选题ex…...
RDIFramework.NET CS敏捷开发框架 SOA服务三种访问(直连、WCF、WebAPI)方式
1、介绍 在软件开发领域,尤其是企业级应用开发中,灵活性、开放性、可扩展性往往是项目成功的关键因素。对于C/S项目,如何高效地与后端数据库进行交互,以及如何提供多样化的服务访问方式,是开发者需要深入考虑的问题。…...
Linux——命名管道及日志
linux——进程间通信及管道的应用场景-CSDN博客 文章目录 目录 文章目录 前言 一、命名管道是什么? 理解: 2、编写代码 makefile 管道封装成类,想用中管道时只需要调用实例化 读端 写端 日志 1、日志是什么? 2、日志有什么&#x…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
