news 2026/8/6 11:58:57

Linux基础学习(10)Lamp架构(4)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux基础学习(10)Lamp架构(4)

Redis

Redis介绍:

Redis(Remote Dictionary Server)远程字典服务

开源、使用 ANSI C 编写的 键值对(Key-Value)内存数据库。

常被称为缓存数据库,但不只是缓存。

基于内存读写,性能极高

支持多种数据结构(不只是字符串)

可选持久化,防止断电数据丢失

支持网络访问,C/S 架构

定位:NoSQL、内存数据库、缓存中间件、消息队列

核心特点:

高性能

数据主要存放内存,单线程处理命令(6.x 后支持多线程 IO),单机轻松 10 万 + QPS。

丰富的数据类型

String 字符串

List 列表(双向链表)

Set 无序集合

ZSet 有序集合

Hash 哈希(对象存储)

Stream、BitMap、HyperLogLog、Geo

两种持久化机制(防止内存数据丢失)

RDB:定时全量快照,二进制文件,恢复速度快

AOF:记录每条写命令日志,安全性更高

高可用方案:

主从复制(Master-Slave)

Sentinel(哨兵):自动故障转移

Redis Cluster(集群):分片 + 高可用,横向扩容

典型使用场景:

热点数据缓存(最常用)

减轻 MySQL 压力,查询先查 Redis,未命中再查数据库。

会话存储 Session

分布式系统共享登录会话。

计数器、限流

访问量统计、接口频率限流(INCR 命令)。

排行榜

ZSet 有序集合实现热度榜单。

消息队列

List 简易队列、Stream 可靠队列。

分布式锁

SETNX + 过期时间实现分布式锁。

地理位置计算 Geo

附近的人、距离计算。

Redis 重要架构:

1. 主从复制(Replication)

一主多从,主节点负责写,从节点负责同步数据、承担读请求

异步复制;从节点默认只读

缺点:主宕机无法自动切换,需要哨兵

2. 哨兵 Sentinel

独立进程,监控主从节点

自动检测节点下线

主节点故障时,自动选举新主,修改其他从节点指向新 master

对外提供统一访问地址

3. Redis Cluster 集群(分片集群)

一共 16384 个哈希槽,数据按槽分配到不同主节点

每个主节点搭配从节点实现高可用

支持水平扩容,解决单机内存上限问题

优缺点:

✅ 优点

速度极快

数据结构丰富

功能齐全,生态成熟

部署简单,运维资料多

❌ 缺点

内存成本高,大量数据存放内存开销大

持久化有一定性能损耗

不适合海量冷数据长期存储

集群事务支持有限(不支持跨槽事务)

Redis部署:

首先对四台主机进行清理的处理为了良好的实验环境

下载redis安装包并make并make install

进入until/里面有redis脚本若直接执行则会提示本系统不合适

因此进入脚本然后注释掉相关内容

此时执行脚本不会报错

此时通过脚本自动安装成功并自动配置路径等属性

此时可以观察到端口已经成功连接

进入配置文件进行编辑

之后重启服务然后查看端口, 允许所有IP访问并且默认登录本机

Info查看整个redis的信息

redis常用指令:

config get * //查看配置

select 1 //选择数据库

flushdb //清空当前数据库

flushall //清空所有数据库

set name wxh //设置key的值

move key 1 //移动key

del key //删除

rename oldkey newkey //改名

expire key 10 //设置过期时间

persist key //设置持久化

keys user* //查询

exists key //判断是否存在

redis主从复制

核心概念:

Redis 主从复制:一个主节点(master)负责写,多个从节点(slave/replica)同步主节点数据,实现读写分离、数据热备份。

核心作用:

读写分离:主节点处理写操作,从节点处理读操作(默认只读),分担主节点压力。

数据备份:从节点实时复制主节点数据,避免单节点故障导致数据丢失。

高可用基础:结合哨兵(Sentinel)或集群(Cluster),可实现主节点故障时自动切换到从节点。

角色分工:

Master:接收写命令,持久化数据,向从节点同步数据

Replica(从库):默认只能读、禁止写入,持续同步 master 数据

主从复制缺陷:

主从复制本身不具备自动故障转移

master 宕机,不会自动提升从库为主;需要配合 Sentinel 哨兵 实现自动切换

异步复制

默认 master 写完立刻返回客户端,不等待从库同步完成;存在数据丢失风险

单主压力瓶颈:所有写压力集中在 master

和 Mysql 主从简易对比

Redis:基于命令日志(复制缓冲区);MySQL 基于 binlog

Redis 增量同步依靠 PSYNC;MySQL GTID

Redis 主从没有内置自动故障转移(依赖哨兵);MGR 内置容错

完整流程:

首先server2上是没有redis的,因此rsync server1的redis-6-4目录到server2并启动安装脚本文件,成功安装redis

进入配置文件改变监听端口为本机所有并重启服务

进入配置文件设置master为192.168.81.135 端口为6379

在server2上重启服务并info查看replication,角色为slave,此时在sever1上也可以查看到master状态

测试在server1端创建name user1,此时可以在server2上get到

此时相同的将server1的redis 复制到server3 makeinstall之后安装

修改配置文件加入master

重启服务并查看replication

也可以继续在server1上查看master的replication

redis高可用

Redis 高可用核心要解决:

故障检测、主从切换、数据备份、自动恢复。

方案

核心组件

能力

适用场景

主从复制(Replication)

主库 master、从库 slave

数据备份、读负载均衡;无自动故障转移

基础环境、学习;主库挂掉需要人工切换

Sentinel 哨兵

1 主 N 从 + 3 个哨兵进程

自动故障转移、监控、通知

中小型业务,标准高可用,无分片

Redis‑Cluster 集群

多组主从哈希分片

分片 + 高可用,支持海量数据

大数据量,需要横向分片扩容

主从复制(Replication)

基础底座,只做数据备份,没有故障自动转移,不算是完整高可用

主节点 (master):接收写请求,数据变更同步给从节点;可以读写。

从节点 (slave/replica):复制 master 全部数据,默认只能读,不能写。

复制模式:

全量同步:初次建立复制,master 生成 RDB 发给从库,全量加载。

增量同步:复制偏移量 offset,主库的复制积压缓冲区,同步后续新增命令。

缺点:master 挂掉,不会自动选新主,需要人工干预,无法实现故障自动切换。

作用:读写分离、数据备份。

哨兵 Sentinel(真正实现故障自动转移,主从 + 哨兵)

在主从复制之上,引入哨兵进程,实现监控、自动故障转移、客户端服务发现

三大核心功能

监控(Monitor):哨兵持续检测 master、slave 节点是否存活。

主观下线 SDOWN:单个哨兵认为节点无响应,单方面判定故障。

客观下线 ODOWN:超过 quorum(法定票数)个哨兵共同判定 master 故障,才确认真故障。

故障转移(Failover)

从 slave 中挑选一台升级为新 master;

其余从节点重新指向新 master;

旧 master 恢复后,降级为新 master 的从节点。

配置中心 / 服务发现:客户端连接哨兵,自动获取当前 master 地址,不需要硬编码 IP。

⚠️哨兵本身也需要集群:哨兵至少部署3 个实例,防止哨兵单点故障;奇数节点用于投票选举。

局限:哨兵模式写操作仍然只有 1 个 master,无法横向扩容写能力,只能扩容读。数据存储上限受单机内存限制。

Redis‑Cluster 集群(分片集群,高可用 + 数据分片)

Redis 3.0 之后官方分布式集群,既做高可用,又做数据分片,解决单机内存上限。

哈希槽 slot:一共 16384 个槽。key 通过 CRC16 (key)%16384 计算映射到 slot。

主分片(master):每个 master 负责一部分哈希槽;可以写数据。

副本(slave):每个 master 配置若干 slave,做备份。当 master 宕机,slave 提升为主节点接管槽位,实现故障转移。

客户端重定向:访问的 key 不在当前节点,返回 MOVED 重定向,客户端去正确节点读写。ASK 用于迁移槽位的临时重定向。

集群最小部署:至少3 主 3 从,保证故障转移条件。

集群两大限制

key 不能跨事务、不支持多 key 复杂操作(跨槽不支持);

槽迁移为手动 / 自动迁移实现扩容。

完整流程:

复制文件sentinet并编辑使其监控master端

在sentinel服务启动前将文件复制到server2 server3因为启动后会自动写入文件

在三个节点启动sentinel服务

此时再开一台server1终端,然后关闭redis-cli服务

三个节点状态,此时他们选举出一个master server3节点

此时ssh登录server3可以查看master状态

此时sshserver1使server1 上线可以查看slave状态

redis集群

Twemproxy概念:

Twemproxy(也称为 nutcracker)是 Twitter 开源的一款 Redis/Memcached 代理服务器,主要用于解决 Redis 集群的客户端连接管理、负载均衡和简化集群运维等问题。它通过在客户端与 Redis 服务器之间增加一层代理,实现了对多个 Redis 实例的统一接入和管理。

核心功能:

数据分片:支持哈希分片、一致性哈希,把 key 分散到后端多台 Redis,实现数据拆分,解决单 Redis 内存上限。

协议兼容:兼容 Redis、Memcached 协议,原有客户端几乎不用修改代码。

连接池管理:复用后端 Redis 连接,减少大量客户端直连 Redis 带来的连接压力。

请求路由:根据 key 计算分片,把命令转发到对应后端 Redis 节点;支持读写。

失败剔除:后端节点挂掉,可以配置自动剔除该分片节点,但不能自动主从切换。

两种分片算法:

hash(普通取模)

key hash 之后对节点数取模。增减节点,大部分 key 会发生迁移,大量缓存失效。

ketama 一致性哈希(推荐)

虚拟环,增加 / 删除节点,只影响一小部分 key,缓存抖动更小。

优缺点:

优点

轻量,性能高,C 语言开发,性能损耗很小。

应用层几乎无改动,客户端只访问代理。

实现 Redis 水平拆分,突破单实例内存限制。

缺点

本身无高可用,单点风险,必须额外 Keepalived + 虚 IP 做双主。

不支持 Redis 复杂命令:多 key 命令如 mget、mset,如果 key 落在不同分片节点,会报错,不能跨节点操作。

不自动故障转移:后端 Redis 挂了,只能剔除分片,不会自动切换它的从库,需要运维手动处理。

不支持数据迁移、重分片:节点扩容缩容需要手动处理数据,不能在线平滑扩缩容。

不支持 Redis 集群原生 cluster 协议,和 Redis‑Cluster 是两套方案。

对比项

Twemproxy

Redis‑Cluster

角色

第三方代理中间件

Redis 官方内置集群

分片实现

代理层做分片

Redis 节点自身分片

高可用

无,依赖外部 Keepalived

内置主从 + 故障转移

多 key 命令

跨分片不支持

支持部分 hash‑tag 多 key

扩缩容

不能在线平滑迁移

支持在线 reshard 迁移数据

单点风险

代理是单点

无中心,无单点

版本依赖

任意 Redis 版本

Redis3.0+

和 Redis‑Cluster、哨兵 (Sentinel) 区别

Sentinel 哨兵:只做主从高可用故障转移,不做分片;所有数据全量存在主库,从库备份,不能拆分数据。

Twemproxy:做分片,不做故障转移;数据拆分多实例,高可用需要外部组件。

Redis‑Cluster:分片 + 内置故障转移,官方方案。

Redis cluster

和Twemproxy 区别:分片逻辑在 Redis 节点内部完成,不需要第三方代理,客户端直接和 Redis 节点通信。

概念:

Redis Cluster(Redis 集群)是 Redis 官方提供的分布式解决方案,专为解决大规模场景下的数据分片、高可用和水平扩展问题而设计。它通过去中心化架构,将数据分散到多个节点,同时提供自动故障转移能力,适合数据量大、访问频繁的生产环境。

Redis3.0 之后官方推出的分布式分片集群方案,实现数据分片 + 内置高可用故障转移,无中心代理。

把整个集群一共划分 16384 个哈希槽 (slot),所有 slot 分配给集群中的主节点;key 通过 hash 运算映射到 slot,key 存到持有该槽的主节点上。

架构组成:

Master 主节点:负责读写,持有一部分哈希槽。

Slave 从节点:对应主节点的副本,不分配槽,只做备份。当主宕机,从自动升级为主,接管槽,实现故障转移。

Gossip 协议:集群节点之间互相通信,交换节点状态、槽分配、故障信息。

哈希槽 slot:

总槽位:16384(0‑16383)

每个主节点分配一部分连续 / 离散 slot

CRC16(key) % 16384 计算 key 属于哪个槽

key 必须存到该槽归属的 master;客户端可以任意连接节点,节点会返回‑MOVED重定向,指引客户端访问正确节点

hash‑tag

用{tag},例如 {user100}:name,大括号内部内容参与 hash 计算。

多个 keytag 相同,映射到同一个 slot,可以支持 mget/mset 多 key 操作。

优缺点

✅优点

官方原生,无第三方代理,无单点故障。

分片 + 高可用一体化,主宕机从自动切换。

支持在线 reshard,平滑扩缩容。

Gossip 协议维护集群元数据。

❌缺点

至少需要 3 主 3 从,资源消耗多。

不支持跨 slot 多 key 命令,除非使用 hash‑tag。

集群模式下部分 Redis 命令受限。

客户端必须支持 cluster 协议,普通单机 redis‑client 不能直接使用。

集群脑裂风险,需要配置cluster‑require‑full‑coverage yes,槽不全拒绝写入。

方案

分片能力

故障转移

是否有单点

定位

Sentinel 哨兵

❌不分片,全量数据

✅自动主从切换

无(哨兵多实例)

只做高可用,不能拆分数据

Twemproxy

✅代理层分片

❌不自动切换后端

✅代理单点,需 Keepalived

第三方代理分片

Redis‑Cluster

✅节点内 slot 分片

✅内置故障转移

❌无中心

官方分片 + 高可用

流程:

在server1上先停止redis服务,然后查看并启动脚本,启动后会自动生成数据和日志

创建cluster时将16383个哈希平均发到3个子节点

输入yes后自动匹配哈希

获取集群状态

连接30001

写入数据并查询

此时如果挂掉30002则30005成为了master

再次运行脚本,则会启动30002

添加集群节点

新添加的节点没有hash槽,角色时是master

[root@server1 create-cluster]# redis-cli --cluster add-node 127.0.0.1:30007 127.0.0.1:30001

添加slave节点

[root@server1 create-cluster]# redis-cli --cluster add-node 127.0.0.1:30008 127.0.0.1:30001 --cluster-slave --cluster-master-id 2cfe812f247254aa593f07bcc5e15291b77ecef6

迁移hash槽

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 11:58:24

南方庭院排湿防潮养护的几项基础常识

早年做庭院这一行,接触的客户大多是北方移居过来的。那时候南京本地的老院子,很少听说要专门做防潮处理。院子里铺点青砖,种几棵桂花,排水靠一条明沟,雨水大了漫一漫,太阳出来晒两天也就干了。大概从十多年…

作者头像 李华
网站建设 2026/8/6 11:56:36

CTF流量分析终极指南:5分钟掌握CTF-NetA神器的完整教程

CTF流量分析终极指南:5分钟掌握CTF-NetA神器的完整教程 【免费下载链接】CTF-NetA CTF-NetA是一款专门针对CTF比赛的网络流量分析工具,可以对常见的网络流量进行分析,快速自动获取flag。 项目地址: https://gitcode.com/gh_mirrors/ct/CTF-…

作者头像 李华
网站建设 2026/8/6 11:47:36

Hive SQL数据形态转换:列转行与行转列核心操作详解

1. 项目概述:数据形态转换的核心操作 在数据仓库和数据分析的日常工作中,我们经常遇到一种情况:原始数据以一种“堆积”或“聚合”的形态存储,但我们的分析需求却要求将其“展开”或“合并”。比如,一个用户的所有浏览…

作者头像 李华
网站建设 2026/8/6 11:47:22

CodeSys Agent

完全可以构建一个这样的Agent。核心思路是利用 CODESYS 开放的脚本引擎和 API,将人工操作转化为程序化指令。 实现这个目标主要有两条技术路径,你可以根据技术背景和项目复杂度来选择。 🚀 路径一:使用官方及社区工具&#xff0…

作者头像 李华
网站建设 2026/8/6 11:45:39

如何在浏览器中实现专业级3D模型查看?Online3DViewer完全指南

如何在浏览器中实现专业级3D模型查看?Online3DViewer完全指南 【免费下载链接】Online3DViewer A solution to visualize and explore 3D models in your browser. 项目地址: https://gitcode.com/gh_mirrors/on/Online3DViewer 想要在浏览器中直接查看、分析…

作者头像 李华