【Redis】Redis集群方案应该怎么做 都有哪些方案

🍎个人博客:个人主页

🏆个人专栏:Redis

⛳️  功不唐捐,玉汝于成


目录

前言

正文

(1)twemproxy

(2)codis

(3)redis cluster3.0自带的集群

(4)在业务代码层实现

结语

 我的其他博客


前言

在构建大规模分布式系统时,选择合适的Redis集群方案至关重要。不同的方案有着各自的特点和适用场景,从代理方式的twemproxy到支持节点数量变化的codis,再到Redis Cluster自带的集群解决方案,以及在业务代码层实现的方式,每种都有其独特的优势和挑战。本篇博客将深入探讨这些不同的Redis集群方案,分析它们的设计原理、使用方法以及适用场景,为读者提供在构建分布式系统时的决策参考

正文

(1)twemproxy

        大概概念是,它类似于一个代理方式,使用方法和普通redis无任何区别,设置好它下属的多个redis实例后,使用时在本需要连接redis的地方改为连接twemproxy,它会以一个代理的身份接收请求并使用一致性hash算法,将请求转接到具体redis,将结果再返回twemproxy。使用方式简便(相对redis只需修改连接端口),对旧项目扩展的首选。 问题:twemproxy自身单端口实例的压力,使用一致性hash后,对redis节点数量改变时候的计算值的改变,数据无法自动移动到新的节点。

(2)codis

        目前用的最多的集群方案,基本和twemproxy一致的效果,但它支持在 节点数量改变情况下,旧节点数据可恢复到新hash节点。

(3)redis cluster3.0自带的集群

        特点在于他的分布式算法不是一致性hash,而是hash槽的概念,以及自身支持节点设置从节点。具体看官方文档介绍。

(4)在业务代码层实现

        起几个毫无关联的redis实例,在代码层,对key 进行hash计算,然后去对应的redis实例操作数据。 这种方式对hash层代码要求比较高,考虑部分包括,节点失效后的替代算法方案,数据震荡后的自动脚本恢复,实例的监控,等等。

结语

在Redis集群方案的选择中,没有一种大小适合所有。twemproxy的简便使用和对旧项目扩展的友好性使其成为一个理想的选择,但对于单端口实例的压力和节点数量变化时的数据迁移问题需要特别关注。codis在效果上与twemproxy相似,但它独有的支持节点数量变化下旧节点数据的可恢复性,为动态环境下的系统提供了更多的弹性。Redis Cluster自带的集群方案则通过hash槽的概念和支持从节点的特性,为分布式系统提供了更为灵活的解决方案。而在业务代码层实现的方式虽然灵活,但对开发者的要求较高,需要考虑到失效替代、数据震荡自动恢复等方面。在选择合适的Redis集群方案时,需根据具体业务需求和系统特点综合考虑,以确保系统的性能、可靠性和扩展性得到最优的平衡。

 我的其他博客

【MySQL】数据库规范化的三大法则 — 一探范式设计原则-CSDN博客

【JAVA】线程的run()和start()有什么区别?-CSDN博客

【日常聊聊】程序员必备的面试技巧:如何在面试战场上脱颖而出-CSDN博客

【JAVA】Java8开始ConcurrentHashMap,为什么舍弃分段锁-CSDN博客

【JAVA】怎么确保一个集合不能被修改-CSDN博客

【Web开发】会话管理与无 Cookie 环境下的实现策略-CSDN博客

【Mybatis】Mybatis如何防止sql注入-CSDN博客

【软件工程】航行敏捷之路:深度解析Scrum框架的精髓-CSDN博客

【Spring】理解IoC与AOP:构建灵活而模块化的软件架构-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker进阶篇-DockerFile

一、简介 Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚 本。 构建步骤: 1、编写Dockerfile文件 2、docker build命令构建镜像 3、docker run依镜像运行容器实例 二、Docker构建过程解析 1、Dockerfile…

MySQL数据库入门(概念+使用)

目录 1. 数据库的概念 1.1 数据库的存储介质 1.2 主流数据库 2. MySQL的基本使用 2.1 链接数据库 2.2 服务器管理 2.3 数据库,服务器和表关系 2.4 简单MySQL语句 3. MySQL架构 4. SQL分类 5. 存储引擎 本篇完。 1. 数据库的概念 数据库是按照数据结构来…

LeetCode 热题 100 | 链表(上)

目录 1 基础知识 1.1 空指针 1.2 结构体 1.3 指针访问 1.4 三目运算符 2 160. 相交链表 3 206. 反转链表 4 234. 回文链表 菜鸟做题第三周,语言是 C 1 基础知识 1.1 空指针 使用 nullptr 来判断是否为空指针: if (headA nullptr) …

手把手教你搭建属于自己的网站(获取被动收入),无需服务器,使用github托管

大家好,我是亚洲著名程序员青松,本次教大家如何搭建一个属于自己的网站。 下面是我自己搭建的一个网站,是一个网址导航网站。托管在了github上面,目前已经运营了三个月,每天的访问量大约有100ip左右。 下图是在51.la上…

Flutter组件 StatefulWidget、StatelessWidget 可继承写法

前言 学过Java的同学,应该都知道面向对象语言的三大特征,封装、继承、多态; Dart也是面向对象的语言,但是在Flutter中的很多组件都被下划线 _ 标记为私有,导致无法继承,本文将介绍一种非私有的创建组件写…

Springboot 自定义参数配置化,密钥,密码,文件保存路径

application.properties 和 application.yml 都是一样的配置方法,只是格式不一样 定义配置文件 server.port8080 image.save.pathE:\ #自定义文件保存路径读取配置文件 Value("${image.save.path}")private String filePath;//E:\优化配置文件 如果我参…

处理安装uni-ui依赖一直安装不上

根据官方的文档去安装,我这边把npm换成了pnpm。 搞了一个小时没搞明白为什么下载不下来依赖,原因是镜像的问题。 处理方式:安装了cnpm,去访问国内镜像 安装cnpm,使用国内镜像 npm install -g cnpm --registryhttps…

Docker容器化安装SonarQube9.9

文章目录 1.环境准备1.1 版本信息1.2 系统设置 2.Docker环境安装2.1 卸载旧版本2.2 设置源2.3 安装Docker2.4 设置阿里仓库2.5 启动Docker 3.Docker Compose4.登录4.1 首页4.2 安装插件 5.制作镜像离线安装 1.环境准备 1.1 版本信息 名称版本备注Docker25.0.1当前2024-01-01最…

广州标点医药信息-米内网数据及咨询服务企业全方位解析!

米内网(MENET)原名中国医药经济信息网,由广州标点医药信息股份有限公司主办,2010年10月28日更名为“米内网”,上线初始主打医药销售数据库,经过十余年的迭代发展,现已成为国内主要的医药健康信息…

Android矩阵Matrix裁切setRectToRect拉伸Bitmap替代Bitmap.createScaledBitmap缩放,Kotlin

Android矩阵Matrix裁切setRectToRect拉伸Bitmap替代Bitmap.createScaledBitmap缩放,Kotlin class MyImageView : AppCompatImageView {private var mSrcBmp: Bitmap? nullprivate var testIV: ImageView? nullconstructor(ctx: Context, attrs: AttributeSet) :…

吸引企业选择的SD-WAN四大亮点

SD-WAN解决了传统组网所面临的各种挑战,尤其是分支数量众多且分散的问题,其实施交付成本远远低于传统方法,尤其在海外应用更为显著。因此,越来越多的企业正在转向SD-WAN网络。 为什么企业更倾向于选择SD-WAN呢?SD-WAN方…

【LVGL环境搭建】

LVGL环境搭建 win模拟器环境搭建一.二.三.四.五. Ubuntu模拟器环境搭建一. 前置准备二. 下载LVGL Source code:三. 安装sdl2:四. 开启VScode执行五. 安装扩展套件六. 按F5执行七. 执行结果 win模拟器环境搭建 一. 二. 三. 四. 五. Ubuntu模拟器环境…

flask基于django大数据的证券股票分析系统python可视化大屏

证券分析系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的Python进行编写,使用了Django框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。主要功能包括:个人信息修改,对股票信息、股票买入、…

正点原子--STM32定时器学习笔记(1)(更新中....)

F1系列基本定时器(TIM6 / TIM7) 我们的目标是通过TIM6基本定时器定时500ms,让LED0每隔500ms闪一下! 思路:使用定时器6,实现500ms产生一次定时器更新中断,在中断里执行“翻转LED0”。 定时器什…

留学生怎么合理使用ChatGPT ?还有哪些同类工具可以使用?

一篇篇相关于ChatGPT的文章陆陆续续铺天盖地的出现在我们面前。今天我们来看看怎么使用这个宝藏工具! 文章主要内容为: 1.它是什么? 2.它能做什么? 3.作为留学生我们怎么使用它? 4.其他同类工具推荐 5.个人观点 一…

【代码随想录】LC 1. 两数之和

文章目录 前言一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 前言 本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记,如有侵权,立即删除。 一、题目 1、原题链接 1. 两数之和 2、题目描述 二、解题报告 1、思…

故障诊断 | 一文解决,RF随机森林的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,RF随机森林的故障诊断(Matlab) 模型描述 随机森林(Random Forest)是一种集成学习(Ensemble Learning)方法,常用于解决分类和回归问题。它由多个决策树组成,每个决策树都独立地对数据进行训练,并且最终的预测结果是由所有决策…

PostGIS教程学习二十二:使用触发器追踪历史编辑操作

PostGIS教程学习二十二:使用触发器追踪历史编辑操作 生产环境下数据库的一个常见要求是能够跟踪用户编辑数据的历史:数据在两个日期之间是如何变化的,是谁操作的,以及它们哪些内容变化了?一些GIS系统通过在客户端接口…

代码随想录算法训练营第38天(动态规划01 ● 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯

动态规划part01 理论基础509. 斐波那契数70. 爬楼梯解题思路 746. 使用最小花费爬楼梯解题思路 今天正式开始动态规划! 理论基础 理论基础讲解 视频讲解 动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态…

1451A/D/F捷变信号发生器

01 1451A/D/F捷变信号发生器 产品综述: 1451系列捷变信号发生器采用直接数字合成(DDS)技术和直接模拟合成技术(ADS)相结合的设计方案,实现覆盖10MHz~3/20/40GHz全频段的频率捷变,捷变时间小于…