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支持数据的持久化,可以将内存中 ...
随机推荐
- Markdown:简洁高效的文本标记语言
引言 在当今信息爆炸的时代,我们需要一种简洁.高效的文本标记语言来排版和发布内容.Markdown应运而生,它是一种轻量级的文本标记语言,以其简单易学.易读易写的特点,成为了广大写作者的首选工具.本文 ...
- CF-925(已更新:D-F)
CF 925 补题ing 待更新 后面打算更新D题和power oj上一道区间合并的题(现在才知道是一道洛谷上的原题--) D 分析 涉及到关于取模的知识,我们的答案要满足三个条件: ai-aj≡ ...
- Power BI 5 DAY
目录 Power BI 数据建模与数据汇总分析 多维数据模型 搭建多维数据模型 搭建方法 注意事项 搭建数据模型思考 数据变量类型 主键ID特点(非空不重复) 星型结构 交叉筛选器方向 单一/两个 连 ...
- Ubuntu安装typecho博客
Ubuntu安装typecho博客 简介 名称的来历 Typecho 是由 type 和 echo 两个词合成的,来自于开发团队的头脑风暴. Type,有打字的意思,博客这个东西,正是一个让我们通过打 ...
- LGV引理
LGV引理是用来统计DAG中固定若干起点和终点情况下的选择不相交链的方案数的. 同样用来优化计数问题,但是比Pólya定理友好多了,这也就是为什么它能够被直接糊到NOI考场上. 对于一张DAG,每条边 ...
- 源码剖析Spring依赖注入:今天你还不会,你就输了
在之前的讲解中,我乐意将源码拿出来并粘贴在文章中,让大家看一下.然而,我最近意识到这样做不仅会占用很多篇幅,而且实际作用很小,因为大部分人不会花太多时间去阅读源码. 因此,从今天开始,我将采取以下几个 ...
- 【Unity3D】Tank大战
1 需求实现 项目代码见→坦克大战1.1.0 1)人机交互 玩家通过 ↑ ↓ ← → 键(或 W.S.A.D)键控制己方坦克平移: 玩家通过滑动鼠标右键控制己方坦克左右旋转: 玩家通过鼠标左键 ...
- ckeditor实战总结
介绍 使用范围较广的富文本编辑器.官方文档 config.js的常用配置 参考:https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_conf ...
- sentry-native 在 windows 平台上搭建
官方文档:https://github.com/getsentry/sentry-native 虽说官方文档有搭建步骤,奈何我用 git bash 试了 n 遍,最终都会报一大堆错误,白白浪费了我快一 ...
- kafka学习笔记03-消息生产者producer
kafka学习笔记03-消息生产者producer 发送消息整体流程示意图 消息发送的流程示意图: (From:High-level overview of Kafka producer compon ...