Redis集群模式和常用数据结构
一、Redis 支持三种主要的集群模式
主从复制模式(Master-Slave Replication):
- 在这种模式下,主节点(Master)负责处理写入操作,而从节点(Slave)则是主节点的副本,用于处理读取操作和提供数据冗余。这种模式通过复制主节点的数据到多个从节点来提高数据的可用性和读取性能。当主节点发生故障时,可以从从节点中选举一个新的主节点,以此来实现高可用性。
哨兵模式(Sentinel):
- 哨兵模式是在主从复制模式的基础上增加了自动故障转移的功能。哨兵节点(Sentinel)监控主节点和从节点的状态,当主节点出现故障时,哨兵会自动将一个从节点升级为新的主节点,并通知其他从节点和客户端新的主节点地址,以此来保证Redis服务的高可用性。
集群模式(Cluster):
- Redis集群模式通过数据分片(sharding)来实现分布式存储。集群中的每个节点负责一部分数据(即一部分哈希槽),并且每个主节点可以有一个或多个从节点。集群模式不仅支持数据的自动分区,还支持主从复制和故障转移,从而实现了高可用性和可扩展性。
这三种模式各有特点和适用场景,可以根据业务需求和系统架构来选择合适的集群模式。主从复制模式和哨兵模式主要用于提高数据的可用性和读取性能,而集群模式则更适合于需要横向扩展和处理大量数据的场景。
二、Redis集群常用运维指令
Redis集群模式下的运维指令主要用于集群的搭建、管理、监控和维护。以下是一些常用的Redis集群运维指令:
创建集群:
redis-cli --cluster create host1:port1 host2:port2 ... hostN:portN --cluster-replicas N
这个命令用于创建一个新的Redis集群,其中
host1:port1 ... hostN:portN
是集群节点的地址和端口,--cluster-replicas N
指定了每个主节点的从节点数量。检查集群状态:
redis-cli --cluster check host:port
这个命令用于检查指定Redis集群节点的状态。
获取集群信息:
redis-cli --cluster info host:port
这个命令用于获取集群的相关信息,如集群状态、节点信息等。
添加节点到集群:
redis-cli --cluster add-node new_host:new_port existing_host:existing_port node_id
这个命令用于将新节点添加到现有的集群中。
new_host:new_port
是新节点的地址和端口,existing_host:existing_port
是现有集群中任意节点的地址和端口,node_id
是现有节点的ID。删除节点从集群:
redis-cli --cluster del-node host:port node_id
这个命令用于从集群中删除指定的节点。
host:port
是执行命令的节点地址和端口,node_id
是要删除的节点ID。重新分配槽位:
redis-cli --cluster reshard host:port --cluster-from node_id --cluster-to new_node_id --cluster-slots num_slots
这个命令用于在集群中重新分配槽位。
--cluster-from
指定源节点ID,--cluster-to
指定目标节点ID,--cluster-slots
指定要迁移的槽位数量。集群重平衡:
redis-cli --cluster rebalance host:port --cluster-weight node1=w1 ... nodeN=wN
这个命令用于根据指定的权重对集群节点的槽位进行重平衡。
设置节点超时时间:
redis-cli --cluster set-timeout host:port milliseconds
这个命令用于设置集群节点的超时时间。
导入外部Redis数据到集群:
redis-cli --cluster import host:port --cluster-from host:port
这个命令用于将外部Redis实例的数据导入到集群中。
执行集群操作:
redis-cli --cluster call host:port command arg1 arg2 ...
这个命令用于在集群的所有节点上执行指定的命令。
Redis 支持多种数据结构,每种数据结构都有其特定的使用场景和优势。以下是 Redis 的主要数据结构及其适用场景:
字符串(String):
- 适用场景:字符串是最基本的类型,可以存储任何形式的数据,比如文本、数字、JSON 等。常用于缓存功能,如缓存用户的会话信息、存储配置参数、计数器等。
列表(List):
- 适用场景:列表是一个有序的字符串集合,可以实现栈(先进后出)或队列(先进先出)的功能。适用于消息队列、最新列表(如微博动态)、排行榜等场景。
集合(Set):
- 适用场景:集合是一个无序且元素唯一的集合。适用于存储不重复的数据集、实现共同好友功能、标签系统、发布/订阅模型等。
有序集合(Sorted Set):
- 适用场景:有序集合中的每个元素都关联一个分数(score),元素按分数有序排列。适用于排行榜、范围查询(如获取排名前 10 的用户)、计分板等。
哈希表(Hash):
- 适用场景:哈希表是一个键值对集合,适合存储对象。适用于存储用户信息、缓存网站对象、存储多个相关字段的数据等。
位图(Bitmap):
- 适用场景:位图是字符串的特例,通常用于表示大量的布尔值。适用于统计活跃用户、权限控制、状态标记等。
超日志(HyperLogLog):
- 适用场景:超日志是一种概率数据结构,用于高效地估算集合中唯一元素的数量(基数)。适用于统计网站访问独立IP数、分析大集合的基数等。
地理空间(Geo):
- 适用场景:地理空间数据结构用于存储地理位置信息,并能够执行地理位置查询。适用于地理位置索引、附近位置查询、位置跟踪等。
流(Stream):
- 适用场景:流数据结构是 Redis 5.0 版本引入的,适用于构建消息队列、实现时间序列数据模型、提供持久化消息队列功能等。
每种数据结构都有其特定的命令集来操作,可以根据实际业务需求选择合适的数据结构来优化性能和存储效率。在实际应用中,有时候也会将多种数据结构组合使用,以满足更复杂的业务逻辑。
Redis集群模式和常用数据结构的更多相关文章
- Redis集群模式配置
redis集群部署安装: https://blog.csdn.net/huwh_/article/details/79242625 https://www.cnblogs.com/mafly/p/re ...
- 7.redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?
作者:中华石杉 面试题 redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗? 面试官心理分析 在前几年, ...
- 突破Java面试-Redis集群模式的原理
1 面试题 Redis集群模式的工作原理说一下?在集群模式下,key是如何寻址的?寻址都有哪些算法?了解一致性hash吗? 2 考点分析 Redis不断在发展-Redis cluster集群模式,可以 ...
- Redis集群模式之分布式集群模式
前言 Redis集群模式主要有2种: 主从集群 分布式集群. 前者主要是为了高可用或是读写分离,后者为了更好的存储数据,负载均衡. 本文主要讲解主从集群.本章主要讲解后一半部分,Redis集群. 与本 ...
- Springboot2.x集成Redis集群模式
Springboot2.x集成Redis集群模式 说明 Redis集群模式是Redis高可用方案的一种实现方式,通过集群模式可以实现Redis数据多处存储,以及自动的故障转移.如果想了解更多集群模式的 ...
- AWS 创建redis 集群模式遇到的问题
问题描述 前几天在aws 平台创建了Redis 集群模式,但是链接集群的时候发现无法连接,返回信息超时. 通过参数组创建redis的时候提示报错:Replication group with spec ...
- 5分钟实现用docker搭建Redis集群模式和哨兵模式
如果让你为开发.测试环境分别搭一套哨兵和集群模式的redis,你最快需要多久,或许你需要一天?2小时?事实是可以更短. 是的,你已经猜到了,用docker部署,真的只需要十几分钟. 一.准备工作 拉取 ...
- Redis 集群模式的安装与配置【源码安装redis-7.0.5】
Redis最新版下载地址:http://download.redis.io/releases/redis-7.0.5.tar.gz 步骤如下: 1)wget http://download.redis ...
- Redis集群模式介绍
前言: 一.为什么要使用redis 1,解决应用服务器的cpu和内存压力 2,减少io的读操作,减轻io的压力(内存中读取) 3,关系型数据库扩展性,不强,难以改变表的结构 二.优点 1,nosql数 ...
- 就publish/subscribe功能看redis集群模式下的队列技术(一)
Redis 简介 Redis 是完全开源免费的,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中 ...
随机推荐
- HBase-表的压缩
一.如何选择压缩算法以及Data_Block_Encoding?(1)如果Key很长,或者有很多Column,那么推荐使用FAST_DIFF.(2)如果数据是冷数据,不经常被访问,那么使用GZIP压缩 ...
- ArrayList中的遍历删除
ArrayList 中的遍历删除 在代码编写过程中经常会遇到这样的要求:遍历一个线性表,要求只遍历一遍(时间复杂度\(O(n)\)),删除符合指定条件的元素,且要求空间复杂度 \(O(1)\). 例如 ...
- 【译】我为 .NET 开发人员准备的 2023 年 Visual Studio 10 大新功能
原文 | James Montemagno 翻译 | 郑子铭 Visual Studio 2022 在 2023 年发布了许多令人难以置信的功能,为 .NET 开发人员提供了大量新工具来提高他们的工作 ...
- JS leetcode 寻找数组的中心索引 题解分析
壹 ❀ 引 今天是的题目来自leetcode的724. 寻找数组的中心索引,做完之后我感觉自己像个憨憨,题目描述如下: 给定一个整数类型的数组 nums,请编写一个能够返回数组"中心索引&q ...
- Python中`yield`关键字详解
Python中`yield`关键字有什么用? Python中yield关键字有什么用? 它能做什么? 例如,我试图理解这段代码1: def _get_child_candidates(self, di ...
- STM32F401+nRF24L01无线传输音频(对讲机原型)
尝试结合STM32F401的ADC, PWM, SPI(NRF24L01)和TIM, 试验了一下音频的无线传输(对讲机原型) 工作机制 音频采样 因为硬件的限制, 包括STM32F401片内存储, 内 ...
- Java I/O 教程(四) FileInputStream 类
Java FileInputStream class 从一个文件读取字节数据. 用于从图像,音频,视频等文件中读取字节类型数据. 类定义 public class FileInputStream ex ...
- P3374 【模板】树状数组 1(线段树)
[模板]树状数组 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某一个数加上 x 求出某区间每一个数的和 输入格式 第一行包含两个正整数 n,m ,分别表示该数列数字的个数和操作的总个 ...
- RK3588开发笔记(二):基于方案商提供sdk搭建引入mpp和sdk的宿主机交叉编译Qt5.12.10环境
前言 上一篇项目已经构建好了Qt,板子接入mipi屏幕也跑起来了,Qt也能正常运行了,现在需要接入定制开发的sdk,sdk中使用了硬解码等资源涉及到bsp的mpp,所以下一步就是引入mpp和sdk ...
- DataGear 制作全国和省级地图联动的数据可视化看板
DataGear看板的图表联动功能,使您可以轻松制作支持图表联动的全国地图.省级地图数据可视化看板. 首先,新建两个数据集. 第一个是各省指标数据集,将用于绘制全国指标图表,它的SQL语句如下所示: ...