Redis | 集群模式

Redis | 集群模式

随着互联网应用规模的不断扩大,单一节点的数据库性能已经无法满足大规模应用的需求。为了提高数据库的性能和可扩展性,分布式数据库成为了解决方案之一。Redis 作为一个高性能的内存数据库,自然也有了自己的分布式部署方式——Redis 集群模式。

1. 什么是 Redis 集群模式?

Redis 集群模式是 Redis 数据库的一种分布式部署方式,它通过数据分片(Sharding)将数据存储在多个节点上,从而实现数据的水平拆分和负载均衡。每个节点负责处理其中一部分数据,并支持主从复制以提供数据冗余和高可用性。

在 Redis 集群中,数据被分成 16384 个槽(slots),每个槽对应一个节点。数据根据一定的规则(通常是键的哈希值)被映射到不同的槽上,从而实现分布式存储。当集群中添加或移除节点时,Redis 会自动重新分片数据,无需手动迁移数据,大大简化了扩容和缩容操作。

2. Redis 集群的特点

  1. 高性能和低延迟:由于 Redis 是一个内存数据库,它能够提供高性能和低延迟的读写操作,适用于对响应速度有要求的应用场景。
  2. 高可用性:Redis 集群支持主从复制,每个节点都有一个或多个从节点用于数据备份。当主节点失效时,从节点可以自动切换成主节点,保障数据的可用性。
  3. 自动分片和负载均衡:Redis 集群在添加或移除节点时,会自动重新分片数据,无需手动干预。客户端可以直接连接到集群中的任意节点,并根据键的哈希值将请求发送到对应的节点,实现负载均衡。
  4. 无中心节点:Redis 集群没有单点故障,没有中心节点,所有节点都是平等的,减少了集群的单点故障风险。

3. 配置

启动参数方式

  • --cluster-enabled yes:开启集群
  • cluster-node-timeout 15000:集群节点间超时时间
  • --masterauth <master-node-password>:主节点密码

配置文件方式

redis.conf

cluster-enabled yes
cluster-node-timeout 15000
masterauth <master_node_password>

4. 演示

docker-compose.yaml

version: "3.8"
networks:network:ipam:driver: defaultconfig:- subnet: '192.168.200.0/24'
services:redis1:container_name: redis1image: redis:7.0networks:network:ipv4_address: 192.168.200.2command:- redis-server- --cluster-enabled yes- --cluster-node-timeout 15000- --requirepass 123456- --masterauth 123456- --bind * -::*redis2:container_name: redis2image: redis:7.0networks:network:ipv4_address: 192.168.200.3command:- redis-server- --cluster-enabled yes- --cluster-node-timeout 15000- --requirepass 123456- --masterauth 123456- --bind * -::*redis3:container_name: redis3image: redis:7.0networks:network:ipv4_address: 192.168.200.4command:- redis-server- --cluster-enabled yes- --cluster-node-timeout 15000- --requirepass 123456- --masterauth 123456- --bind * -::*redis4:container_name: redis4image: redis:7.0networks:network:ipv4_address: 192.168.200.5command:- redis-server- --cluster-enabled yes- --cluster-node-timeout 15000- --requirepass 123456- --masterauth 123456- --bind * -::*redis5:container_name: redis5image: redis:7.0networks:network:ipv4_address: 192.168.200.6command:- redis-server- --cluster-enabled yes- --cluster-node-timeout 15000- --requirepass 123456- --masterauth 123456- --bind * -::*redis6:container_name: redis6image: redis:7.0networks:network:ipv4_address: 192.168.200.7command:- redis-server- --cluster-enabled yes- --cluster-node-timeout 15000- --requirepass 123456- --masterauth 123456- --bind * -::*
  1. 启动:docker compose up
  2. 创建集群:进入容器docker exec -it redis1 bash
    redis-cli \
    -a 123456 \
    --cluster \
    create \
    192.168.200.2:6379 192.168.200.3:6379 192.168.200.4:6379 \
    192.168.200.5:6379 192.168.200.6:6379 192.168.200.7:6379 \
    --cluster-replicas 1
    
  3. 进入集群操作

    注意:一定要添加-c参数。

    redis-cli -c -a 123456
    
  4. 测试
    127.0.0.1:6379> set name yimt
    -> Redirected to slot [5798] located at 192.168.200.7:6379
    OK
    192.168.200.7:6379> get name
    "yimt"
    

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

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

相关文章

【笔记】第94期-冯永吉-《湖仓集一体关键技术解读》-大数据百家讲坛-厦大数据库实验室主办20221022

https://www.bilibili.com/video/BV1714y1j7AU/?spm_id_from333.337.search-card.all.click&vd_sourcefa36a95b3c3fa4f32dd400f8cabddeaf

【数理知识】协方差,随机变量的的协方差,随机变量分别是单个数字和向量时的协方差

序号内容1【数理知识】自由度 degree of freedom 及自由度的计算方法2【数理知识】刚体 rigid body 及刚体的运动3【数理知识】刚体基本运动&#xff0c;平动&#xff0c;转动4【数理知识】向量数乘&#xff0c;内积&#xff0c;外积&#xff0c;matlab代码实现5【数理知识】协…

C#基于OpenCv(OpenCvSharp) 的 fftshift, ifftshift 函数的实现

本文实现基于OpenCv(OpenCvSharp) 的 fftshift, ifftshift 函数。 fftshift 函数将信号频谱的零频分量移动到数组中心, 本质是分别对调一三象限数据。 ifftshift完成相反的操作,本质是二四象限的数据块。 OpenCV中没有这两个函数如果使用需要自己实现。 实现代码如下: …

【雕爷学编程】MicroPython动手做(30)——物联网之Blynk 2

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

用Rust实现23种设计模式之简单工厂

在 Rust 中&#xff0c;可以使用结构体和 trait 来实现工厂方法模式。工厂方法模式是一种创建型设计模式&#xff0c;通过定义一个创建对象的接口&#xff0c;让子类决定实例化哪个类。下面是一个简单的示例&#xff0c;展示了如何使用 Rust 实现工厂方法模式&#xff1a; // …

TypeScript技能总结(二)

typescript是js的超集&#xff0c;目前很多前端框架都开始使用它来作为项目的维护管理的工具&#xff0c;还在不断地更新&#xff0c;添加新功能中&#xff0c;我们学习它&#xff0c;才能更好的在的项目中运用它&#xff0c;发挥它的最大功效 //readonly 只能修饰属性&#x…

EXCEL里数值列如何显示序号?如何重新排序? 怎么取得排序后的序号?

目录 1 EXCEL里如何显示序号&#xff1f; 2 如何重新排序&#xff1f; 3 怎么取得排序后的序号&#xff1f; 3.1 rank() 的序号可能不连续 3.2 方法2&#xff1a;SUMPRODUCT((C7>C$7:C$12)/COUNTIF(C$7:C$12,C$7:C$12))1 EXCEL里如何显示序号&#xff1f;如何重新排序…

Go语言基础:运算符、文件操作、接口、Packages、if else、for循环

文章目录 1.运算符2.文件操作3.接口4.Packages5.If else6.For循环 1.运算符 func main() {// 算术运算符a, b : 3, 7c : a bd : a - be : a * bf : a / bg : a % baa--fmt.Println(c, d, e, f, g)// 关系运算符fmt.Println(a b)fmt.Println(a ! b)fmt.Println(a < b)fmt.…

MySQL数据库面试题:如何定位慢查询?

MySQL数据库面试题&#xff1a;如何定位慢查询&#xff1f; 面试官&#xff1a;MySQL中&#xff0c;如何定位慢查询&#xff1f; 候选人&#xff1a;嗯~&#xff0c;我们当时做压测的时候有的接口非常的慢&#xff0c;接口的响应时间超过了2秒以上&#xff0c;因为我们当时的系…

win11 vscode torch 编译遇错

1. 错误内容&#xff1a; Failed to build pc-util ERROR: Could not build wheels for pc-util, which is required to install pyproject.toml-based projects NativeCommandExitException: Program “pip.exe” ended with non-zero exit code: 2.问题分析&#xff1a; pip出…

Linux命令(59)之screen

linux命令之screen 1.screen介绍 linux命令screen是用来进行多窗口管理。 默认screen命令没有安装&#xff0c;安装命令(基于yum源)&#xff1a;yum install -y screen 2.screen用法 screen [参数] screen参数 参数说明-r恢复离线的screen作业-ls显示所有的screen作业 3.…

echarts 饼图的label放置于labelLine引导线上方

一般的饼图基础配置后长这样。 想要实现将文本放置在引导线上方&#xff0c;效果长这样 const options {// ...series: [{label: {padding: [0, -40],},labelLine: {length: 10,length2: 50,},labelLayout: {verticalAlign: "bottom",dy: -10,},},], };label.padd…

Zip压缩包密码忘记了,怎么办?

Zip压缩包设置了密码&#xff0c;解压的时候就需要输入正确对密码才能顺利解压出文件&#xff0c;正常当我们解压文件或者删除密码的时候&#xff0c;虽然方法多&#xff0c;但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么&#xff0c;忘记了zip压缩包的密…

CNN成长路:从AlexNet到EfficientNet(01)

一、说明 在 10年的深度学习中&#xff0c;进步是多么迅速&#xff01;早在 2012 年&#xff0c;Alexnet 在 ImageNet 上的准确率就达到了 63.3% 的 Top-1。现在&#xff0c;我们超过90%的EfficientNet架构和师生训练&#xff08;teacher-student&#xff09;。 如果我们在 Ima…

基于C#的应用程序单例唯一运行的完美解决方案 - 开源研究系列文章

今次介绍一个应用程序单例唯一运行方案的代码。 我们知道&#xff0c;有些应用程序在操作系统中需要单例唯一运行&#xff0c;因为程序多开的话会对程序运行效果有影响&#xff0c;最基本的例子就是打印机&#xff0c;只能运行一个实例。这里将笔者单例运行的代码共享出来&…

实现5*5正方形网格x轴和y轴显示对应数值组件封装

实现5*5正方形网格x轴和y轴显示对应数值组件封装 需求&#xff1a;按5*5的正方形网格&#xff0c;根据目标数据的x和y轴值显示对应的文字&#xff0c;实现效果图如下&#xff1a;&#xff08;当前目标数值&#xff1a;x2&#xff0c;y2&#xff09; 代码如下&#xff1a; <…

【Python】conda创建完全干净的虚拟环境

安装指定版本的完全干净的虚拟环境 conda create --name py36_tf12 python3.6.8 --no-default-packages激活刚创建虚拟环境 conda activate py36_tf12 使用pip list发现还是有其他环境的第三方库 python -m pip install --upgrade pip升级pip之后&#xff0c;再使用pip list…

分布式系统:ACID与CAP

ACID: 在计算机科学中&#xff0c;ACID是数据库事务的一组特性&#xff0c;旨在保证数据的有效性&#xff0c;即使在出现错误、断电和其他意外情况下也能保持数据的一致性。在数据库的上下文中&#xff0c;满足ACID属性的一系列数据库操作&#xff08;可以被视为对数据的单一逻…

【云原生】K8S二进制搭建三:高可用配置

目录 一、部署CoreDNS二、配置高可用三、配置负载均衡四、部署 Dashboard 一、部署CoreDNS 在所有 node 节点上操作 #上传 coredns.tar 到 /opt 目录中 cd /opt docker load -i coredns.tar在 master01 节点上操作 #上传 coredns.yaml 文件到 /opt/k8s 目录中&#xff0c;部…

servlet生命周期和初始化参数传递

servlet生命周期和初始化参数传递 1、servlet生命周期 只有第一次访问才会初始化&#xff0c;之后访问都只执行service中的。 除非tomcat关闭重新启动&#xff1a; 2、初始化参数传递