Redis-6集群
文章目录
- 前言
- Redis集群原理
- 搭建Redis集群
- 集群拓展
- 后记
前言
前两期介绍和搭建了Redis的主从复制架构
和哨兵模式
,虽然哨兵模式能够实现自动故障转移
主备切换,一定程度上提高了系统的容错性
但这两种架构模式都不能解决单节点的并发压力和物理上线的问题
,单节点写的Redis始终无法应对大型项目中的高并发压力以及内存和磁盘的密集IO存取操作。
这种情况下就需要Redis的集群来解决以上的问题!
Redis集群原理
Redis3.0开始支持集群模式,实现了数据的分布式存储,对数据进行分片,将数据存储在不同的master节点上
Redis集群采用去中心化的思想,没有中心节点的说法,对于客户端来说,整个集群可以看成一个整体,可以连接任意一个节点进行操作,就像操作单一Redis实例一样,不需要任何代理中间件,当客户端操作的key没有分配到该node上时,Redis会返回转向指令,指向正确的node。
- 主节点负责读写请求和集群信息的维护,从节点只对主节点数据和状态信息的复制
- 称数据分片是Redis集群最核心的功能,集群将数据分散到多个master节点
- 集群同样支持主从复制和主节点的自动故障转移(与哨兵模式类似),当任意节点发生故障时,集群仍然可以正常对外提供服务
Redis集群采用的是
哈希槽分区算法
。Redis集群中有16384个哈希槽(槽的范围是 0 -16383,哈希槽),将不同的哈希槽分布在不同的Redis节点上面进行管理,也就是说每个Redis节点只负责一部分的哈希槽。在对数据进行操作的时候,集群会对使用CRC16算法对key进行计算并对16384取模(slot = CRC16(key)%16383),得到的结果就是 Key-Value 所放入的槽,通过这个值,去找到对应的槽所对应的Redis节点,然后直接到这个对应的节点上进行存取操作。
摘自:https://blog.csdn.net/a745233700/article/details/112691126
搭建Redis集群
集群中的节点是否可用,是由集群中的所用master节点选举决定的,当半数以上的节点认为某个节点故障了,那么该节点就是挂掉了,所以搭建redis集群时建议master节点数最好为奇数
,搭建Redis集群至少需要
三个主节点,三个从节点。
**注意:**我这里用的是redis-6.0.4
版本,redis-6版本之前还需要安装ruby
脚本来构建redis集群,而redis-6版本之后直接使用redis-cli
构建。
为方便演示,这里在一台主机上模拟redis集群的效果
1、准备6个redis
服务节点
# (1)在redis根目录下创建6个目录作为6个节点
mkdir -p redis-cluster/redis700{1..6}
# (2)编写一个sh脚本将redis的配置文件redis.conf、redis-server和redis-cli复制一份到6个节点目录下(或者手动一个个复制)
#!/bin/bash
for i in {1..6}
docp /software/redis/redis.conf /software/redis/redis-cluster/redis700$icp /software/redis/bin/redis-cli /software/redis/bin/redis-server /software/redis/redis-cluster/redis700$i
done
2、配置6个服务节点
修改6个节点redis.conf配置文件中的以下内容,可以修改好一个后复制六份再修改port和集群节点配置文件名nodes-port.conf
bind 0.0.0.0 # 开启远程连接
port 7001 # 设置redis服务端口【需要修改6个】
daemonize yes # 开启以守护线程的(后台)方式启动
protected-mode no # 关闭保护模式
requirepass 123456 # 设置Redis服务访问密码
appendonly yes # 开启AOF持久化cluster-enabled yes # 开启集群模式
cluster-config-file nodes-7001.conf # 集群节点配置文件nodes-port.conf【需要修改6个】
cluster-node-timeout 5000 # 集群节点超时时间(默认15000毫秒)
3、启动6个节点
在各自节点目录下,执行以下命令启动当前redis服务节点
./redis-server ./redis.conf
# 查看是否启动了六个Redis进程
ps -ef|grep redis
4、构建集群
在任意一个节点上执行创建命令构建redis集群:构建集群时,会根据创建命令节点顺序指定主从节点,会自动为master节点分配16384个hash槽
# 六个节点分为三组,每组又分为一主一从
# 这里会把前三个做为主节点,后三个做为从节点,--cluster-replicas 1表示指定每个主节点有一个从节点
./redis-cli --cluster create 192.168.31.161:7001 192.168.31.161:7002 192.168.31.161:7003 192.168.31.161:7004 192.168.31.161:7005 192.168.31.161:7006 --cluster-replicas 1 -a 123456
看到All nodes agree about slots configuration.
和All 16384 slots covered
即代表集群构建成功
集群拓展
# -c:以集群模式连接
./redis-cli -p 7001 -a 123456 -c
# redis-cli连接后,通过cluster nodes查看集群的节点信息
192.168.31.161:7001> cluster nodes
把7001这个master节点kill掉,查看它的从节点是否顶替上来作为新的master节点了
Spring Boot中操作Redis集群
<!--redis-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
# 书写集群中的所有节点IP:port,以逗号分隔
spring.redis.cluster.nodes=192.168.31.161:7001,192.168.31.161:7002,192.168.31.161:7003,192.168.31.161:7004,192.168.31.161:7005,192.168.31.161:7006
后记
redis主从复制、哨兵模式(sentinel)、redis集群(cluster)三种架构模式的演变,已经能应对当下市场上的项目对Redis缓存
的需求
Redis缓存
的存在主要是为了减轻数据库的并发压力(当然在分布式系统中,由于跨JVM导致synchronized失效,而常用Redis来实现分布式锁等,Redis的应用也非常广泛)
Redis缓存
虽减轻了数据库的一部分并发压力,但要提高数据库自身的容错性
,以及实现数据库服务在整个系统中的高可用
才是根本!
后面将持续带来MySQL的主从复制,以及MySQL读写分离(集群)
的介绍和搭建详情!
相关文章:

Redis-6集群
文章目录前言Redis集群原理搭建Redis集群集群拓展后记前言 前两期介绍和搭建了Redis的主从复制架构和哨兵模式,虽然哨兵模式能够实现自动故障转移主备切换,一定程度上提高了系统的容错性 但这两种架构模式都不能解决单节点的并发压力和物理上线的问题&…...

Spring Cloud学习笔记:基础知识
这是本人学习的总结,主要学习资料如下 马士兵教育 目录1、Spring Cloud 简介2、Eureka3、建立Spring Cloud项目3.1、启动Server3.1.1、dependency3.1.2、配置文件3.1.3、Server端启动代码3.2、启动Client3.2.1、dependency3.2.2、配置文件3.3.3、Client端启动代码3…...

农产品销售系统/商城,可运行
文章目录项目介绍一、项目功能介绍1、用户模块主要功能包括:2、商家模块主要功能包括:3、管理员模块主要功能包括:二、部分页面展示1、用户模块部分功能页面展示2、商家模块部分功能页面展示3、管理员模块部分功能页面展示三、部分源码四、底…...
【Java开发】JUC进阶 05:函数式接口、ForkJoin
1 四大函数式接口函数式接口:只有一个抽象方法的接口,只要是函数式接口,就可以用lambda表达式简化例如Runnable:FunctionalInterface public interface Runnable {public abstract void run(); }框架底层大量应用函数式接口&#…...

Nginx支持quic协议
第一种方式:Nginx官方nginx-quic搭建 通过部署Nginx官方的QUIC分支来实现的浏览器和nginx-quic服务器粗略的HTTP3通信。 1、下载BoringSSL BoringSSL 是由谷歌开发,从 OpenSSL 中分离的一个分支。BoringSSL 是 Chrome/Chromium、Android(但它不是 NDK 的…...
笔记 - Java 内存结构与模型
-- Java里内存结构与内存模型是两种概念 一、Java内存结构: HeapMemory - 堆内存Java Stacks - 栈内存 (运行时)Method Area - 方法区Native Method Stack - 本地方法栈 真实和系统打交道的地方Jit Compiler - 将java运行指令编译成机器指令G…...

C#基础教程12 数组
文章目录 C# 数组(Array)C# 中的数组声明数组初始化数组赋值给数组访问数组元素C# 数组细节C# 数组(Array) 数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。 声明数组变量并不是声明 number0、number1…...

Android中级——屏幕和绘图
屏幕和绘图屏幕系统屏幕密度独立像素密度dp单位转换XML绘图(需放在Drawable)BitmapShapeLayerSelector绘图技巧CanvasLayerPorterDuffXfermodeShaderPathEffectSurfaceView屏幕 屏幕大小:指屏幕对角线长度,单位为寸分辨率&#x…...

Linux - 第6节 - 动态库和静态库
1.静态库与动态库概念 静态库(.a):程序在编译链接的时候把库的代码拷贝到可执行文件中。程序运行的时候将不再需要静态库。动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用…...
【Java学习笔记】12.Character 类及String 类
前言 本章介绍Java的Character 类和String 类。 Java Character 类 Character 类用于对单个字符进行操作。 Character 类在对象中包装一个基本类型 char 的值 实例 char ch a;// Unicode 字符表示形式 char uniChar \u039A; // 字符数组 char[] charArray { a, b, c, d…...

【C++修炼之路】26.C++11(语法糖)
每一个不曾起舞的日子都是对生命的辜负 C11C11(语法糖)本节目标一.C11简介二.统一的列表初始化2.1 {}初始化2.2 std::initializer_list三.声明3.1 auto3.2 decltype3.3 nullptr四.总结C11(语法糖) 本节目标 C11简介 列表初始化 变量类型推导 一.C11简介 在2003年C标准委员…...

KD610精密油介损体积电阻率测试仪
一、概述 KD610精密油介损体积电阻率测试仪是用于绝缘油等液体绝缘介质的介质损耗角及体积电阻率的高精密仪器。 二、产品特点 1.仪器内部采用数字技术,具备多种模式测式。 2.智能自动化测量。 3.配备了大屏幕(2401…...
快速了解原码、反码、补码和位运算
我们知道计算机使用的是二进制,我们⽤⼀个字节,也就是8个bit 来表示⼆进制数。 原码 十进制 原码20000 0010-21000 0010 原码其实是最容易理解的,只不过需要利⽤⼆进制中的第⼀位来表示符号位,0表示正数,1表示…...
算法的复杂度介绍
算法的复杂度介绍 算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。 为什么要进行算法分析&…...

教你如何搭建店铺—收支管理系统,demo可分享
1、简介1.1、案例简介本文将介绍,如何搭建店铺-收支管理。1.2、应用场景以店铺收支管理为核心,维度数据分析,智能指导门店经营,账目清晰一目了然,店铺经营更高效。2、设置方法2.1、表单搭建1)新建表单【客户…...
java性能分析-堆内存最佳实践-堆分析
堆内存最佳实践 优化垃圾回收器标志参数很重要但是采用更好的编程实践获得更大的性能提升 1.谨慎的创建对象并尽快的丢弃,是更好的内存是提高gc更好的方法 2.频繁创建某种类型的对象会导致整体的性能变差 对象复用设计 线程局部变量 每个线程中创建一个局部变量…...

3月8号作业
题目:题目一:vmlinux可执行文件如何产生题目二:整理内核编译流程:uImage,zImage,Image,vmlinux之间的关系答案一:在内核源码目录下vi Makefile,搜索vmlinux目标,vmlinux: scripts/li…...

Flink相关介绍
简介 Flink的定位是:Apache Flink是一个框架和分布式处理引擎,如图所示,用于对无界和有界数据流进行有状态计算。Flink被设计在所有常见的集群环境运行,以内存执行速度和任意规模来执行计算。 Flink 框架处理流程应用场景 1、电…...

Java 8 排序
今天分享 Java 8 进行排序的 10 个姿势,其实就是把 Java 8 中的 Lambda、Stream、方法引用等知识点串起来 传统排序 现在有一个 List 集合: public static List<User> LIST new ArrayList() {{add(new User("Lisa", 23));add(new Us…...

Blazor_WASM之4:路由
Blazor_WASM之4:路由 路由模板 通过 Router组件可在 Blazor 应用中路由到 Razor 组件。 Router 组件在 Blazor 应用的 App 组件中使用。App组件模板如下 <Router AppAssembly"typeof(Program).Assembly"><Found Context"routeData"…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...