Redis学习路径(构建体系)
学习路径
- 掌握数据类型(分析底层数据结构)和缓存的基本使用 (理论+使用)
- 掌握 redis 实现高性能,高可靠、高可用技术 (理论)
- 学习redis源代码底层实现 (底层实现)
先来一个引言,比较宏观的角度,先不考虑细节问题(先不谈理论,按照正常的发展思路,看看需要解决哪些问题,于是衍生出哪些技术):
Redis是一款内存数据库,这个数据存储在内存中,如果说突然发生意外,Redis主机断电了宕机了,那么内存中的数据就丢失掉了。所以我们需要像个办法解决由于断电、宕机导致的Redis在内存当中的数据丢失性问题?
你说,我们可以从新从MySQL后端数据库来恢复,但是这样太慢了,几乎就是从头开始。我们是否可以在 Redis 本机所在机器上永久的保存数据?
所以我们需要持久化的技术来解决。要持久化,就意味着数据必须保存到非易失性存储介质磁盘上。(AOF写操作日志、RDB内存快照持久化机制)。
这样子,就不担心这个数据丢失了。
但是,如果Redis发生了宕机,我们虽然有持久化,可以进行数据恢复,但是恢复是需要一定时间的,恢复的过程就没法对外提供服务,这显然也是不可接受的。
所以,我们需要解决在主要节点数据恢复期间还可以正常对外提供服务的问题? (主从复制)
我们就可以搞多个服务节点嘛,一个服务节点挂掉了,可以让其他服务节点继续提供嘛。如果这些服务节点有一个Boss 节点,其他的服务节点都是从Boss节点这里copy来的。Boss节点同步跟新这些子节点。如果是子节点挂掉,其实影响并不大,如果Boss节点挂掉,这个影响就特别大。
所以,我们需要解决在这个Boss节点挂掉的情况下,从下属节点中从新选拔一个Boss出来?(手动主从切换 ---》 自动主从切换)
选这个节点那肯定是跟 Boss 关系最近,最像的。(涉及一个选举问题)
这些都是单个Redis实例之上的问题,如果说一个Redis实例太大了。会不会出现许多问题?比如说持久化产生的文件AOF,RDB会不会特别大?太大了,这个恢复过程会不会特别缓慢,多个节点从Boss主节点那里copy代价会不会变大?
要解决这个问题,我们是不是可以想到把数据分摊到多个 Redis 实例上面去,做一个分流。当然可以。不过需要考虑很多问题。负载均衡的问题,还有这个数据分片的问题。我们把整个需要缓存的数据切开多份。
每一份如何对应给Redis实例?用什么算法去对应?
我首先可以想到的就是Hash,因为hash天然对应很多槽位。我们可以对数据的key值进行Hash运算、映射到槽位,槽位是固定的。我们可以把槽位分配给Redis主机。
再思考一下,当我们维护多实例的时候,必不可少的需要通信,所以实例与实例之间应该依赖什么来进行通信,来达到一个状态的同步,一致性。这必然也是需要解决的问题。但是小杰这块尚且无法理解。所以慢慢沉淀。
如下这些标题,就是小杰之后写这个博客后续要完成的,现在只是写出自己的一个规划目录。后续再驱动性、方向性的步步完成。
Redis数据类型的使用
Redis底层数据结构
Redis缓存机制和应用
Redis高性能原理
Redis高可靠策略
- 持久化机制
Redis高可用策略
- 主从复制机制
- 故障转移,自动恢复
相关文章:
Redis学习路径(构建体系)
学习路径 掌握数据类型(分析底层数据结构)和缓存的基本使用 (理论使用) 掌握 redis 实现高性能,高可靠、高可用技术 (理论)学习redis源代码底层实现 (底层实现) 先来一个引言,比较宏观的角度…...
【README 小技巧】 展示gitee中开源项目start
【README 小技巧】 展示gitee中开源项目start <a target"_blank" hrefhttps://gitee.com/wujiawei1207537021/wu-framework-parent><img srchttps://gitee.com/wujiawei1207537021/wu-framework-parent/badge/star.svg altGitee star/></a>...
tcping实用小工具
Tcping实用小工具命令详解 一、tcping介绍 tcping:tcping命令基于tcp协议监控,可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从容硬线连接到分组交换或电路交换网络的各种通信系统之上操作。 …...
【Web】Java反序列化之CC2——commons-collections4的新链之一
目录 关于commons-collections4 一个重要的思维模型 触发Transform的关键类:TransformingComparator 反序列化的入口:PriorityQueue Exp 关于commons-collections4 commons-collections4 是 Apache Commons 组件库中的一个项目,它是对旧…...
golang使用gorm操作mysql1
1.mysql连接配置 package daoimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger" )var DB *gorm.DB// 连接数据库,启动服务的时候,init方法就会执行 func init() {username : "roo…...
Flutter异常上报及性能监控实现
1. 页面异常监测 在Flutter中,通常用FlutterError监测Flutter框架抛出的异常,用runZonedGuarded监测应用中用户代码异常。 class AppGuarded {run(Widget app) {//1. 用FlutterError监测flutter框架抛出的异常FlutterError.onError (FlutterErrorDetail…...
基于springboot+vue的工厂车间管理系统
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 主要内容:毕业设计(Javaweb项目|小程序|Pyt…...
Java基础 - Stream 流:Stream API的终端操作
在前两篇博客中,我介绍了构建 Stream 流的多种方式,以及 Stream API 的中间操作,如果你还没有阅读,你可以点击这里和这里查看。 Java基础 - Stream 流:构建流的多种方式 Java基础 - Stream 流:Stream API…...
高级语言期末2009级A卷(计算机学院)
1.编写函数,打印下列序列0,1,1,2,3,5,8,13,21,34...(斐波那契序列)的前n项 #include <stdio.h>int main() {int x0,y1,z,n;scanf("%d",&…...
docker-compose搭建php开发环境
Docker Compose简介 Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。而DockerCompose作为一种容器编排工具&…...
翻译论文:Beating Floating Point at its Own Game: Posit Arithmetic(一)
仅作记录学习使用,侵删 原文Beating Floating Point at its Own Game: Posit Arithmetic 参考翻译Posit: 替换IEE754的新方式 | SIGARCH 摘要 IEEE标准754浮点数(浮点数)的直接接点替换 Posit的优势 不需要区间算术或可变大小操作数 如…...
【数据结构-图论】并查集
并查集(Union-Find)是一种数据结构,它提供了处理一些不交集的合并及查询问题的高效方法。并查集主要支持两种操作: 查找(Find):确定某个元素属于哪个子集,这通常意味着找到该子集的…...
云计算时代的运维: 职业发展方向与岗位选择
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua,在这里我会分享我的知识和经验。&#x…...
java锁底层概述
Java中的锁是并发编程中核心的同步机制之一,用于控制多个线程对共享资源的访问,以保证数据的一致性和完整性。Java锁的底层实现依赖于操作系统的原生线程模型和Java虚拟机(JVM)的实现。这里主要讨论两种常见的锁:synch…...
win10如何添加指纹登陆
1、首先进入设置,进入下一个设置页面 2、在下一个设置页面内,我们直接使用右上角的搜索框,输入“指纹/finger”进行搜索。回车之后进入设置指纹登陆选项 3、设置指纹登陆的前期是设置好你的密码和pin码(先要设定登录密码和pin码),这里pin和密码都可以直接登陆我们的win10,设…...
足底筋膜炎的症状及治疗
足底筋膜炎症状:足底筋膜炎通常表现为足跟部疼痛,尤其是在晨起或长时间站立、行走后加重。疼痛可能向足底前部或足弓处放射,严重时可能影响行走。此外,患者还可能出现足跟部肿胀、皮肤温度升高、局部压痛等症状。 足底筋膜炎治疗方…...
udp丢包问题研究
//发现udp 有收不到数据包现象. 一: 观察丢包 1. ifconfig enp8s0 2. netstat -s -u 二: 修改系统缓存参数. recv_buffer_size 修改系统buffer_size sysctl -w net.core.rmem_max26214400 sysctl -w net.core.rmem_default26214400 三: 应用程序考虑 av_dict_set(&m_o…...
在idea中用模板骨架初始创建maven管理的web项目时没有src有关的目录的解决方案
一.问题如下 二.解决方法 首先关闭当前项目,接着修改全局设置,重新创建项目 在VM Options中添加"-DarchetypeCataloginternal",点击ok保存 点击创建,如果创建成功没报错且有src,就ok了。 当然如果出现以下…...
WPF 【十月的寒流】学习笔记(2):MVVM中是怎么实现通知的
文章目录 前言相关链接代码仓库项目配置代码初始代码ViewPersonViewModel 尝试老办法通知解决方案ObservableCollectionBindingListICollectionView 总结 前言 我们这次详细了解一下列表通知的底层是怎么实现的 相关链接 十月的寒流 MVVM实战技巧之:可被观测的集合…...
数据结构:广义表
定义:有序数列 表示GL=(a(b,c))长度 2, 表头:a 表尾:(&am…...
告别复杂命令:这款图形化工具让你3步搞定macOS安装包下载
告别复杂命令:这款图形化工具让你3步搞定macOS安装包下载 【免费下载链接】DownloadFullInstaller macOS application written in SwiftUI that downloads installer pkgs for the Install macOS Big Sur application. 项目地址: https://gitcode.com/gh_mirrors/…...
【咸鱼之王】H5修复版:从零到一,宝塔面板+Nginx+Mysql一站式部署实战
1. 环境准备与宝塔面板安装 第一次接触H5游戏服务端搭建的朋友可能会觉得无从下手,但其实只要跟着步骤走,用宝塔面板可以省去80%的配置工作。我去年帮朋友部署过三个类似的H5游戏,实测宝塔面板是最适合新手的方案。 先确认你的CentOS 7.6系统…...
Kirikiri游戏开发终极指南:5个技巧让你轻松处理视觉小说资源
Kirikiri游戏开发终极指南:5个技巧让你轻松处理视觉小说资源 【免费下载链接】KirikiriTools Tools for the Kirikiri visual novel engine 项目地址: https://gitcode.com/gh_mirrors/ki/KirikiriTools 如果你正在处理Kirikiri引擎的视觉小说游戏资源&#…...
北京理工大学LaTeX论文模板:BIThesis如何让你的学术写作效率提升300% [特殊字符]
北京理工大学LaTeX论文模板:BIThesis如何让你的学术写作效率提升300% 🚀 【免费下载链接】BIThesis 📖 北京理工大学非官方 LaTeX 模板集合,包含本科、研究生毕业设计模板及更多。🎉 (更多文档请访问 wiki …...
Bidili Generator新手必看:参数设置详解与生成高质量图片技巧
Bidili Generator新手必看:参数设置详解与生成高质量图片技巧 1. 认识Bidili Generator:你的SDXL图片生成助手 Bidili Generator是一款基于Stable Diffusion XL(SDXL)1.0模型深度优化的图片生成工具。它最大的特点是解决了原生S…...
RS485通信中波特率不匹配导致数据错误?STM32 USART模块的隐藏陷阱
RS485通信中波特率不匹配导致数据错误?STM32 USART模块的隐藏陷阱 在工业自动化、智能楼宇等场景中,RS485总线因其抗干扰能力强、传输距离远等优势被广泛应用。然而,许多开发者在使用STM32系列MCU的USART模块驱动RS485通信时,都曾…...
Janus-Pro-7B惊艳作品:古诗文本→水墨风图像→题跋文字自动生成
Janus-Pro-7B惊艳作品:古诗文本→水墨风图像→题跋文字自动生成 1. 引言:当AI遇见中国古典美学 想象一下这个场景:你读到了一首意境悠远的古诗,脑海中浮现出烟雨朦胧的山水画面,但苦于没有绘画功底,无法将…...
asp.net core + ef core 实现动态可扩展的分页方案
在开始之前,先问你一个问题:你做的系统,是不是每次增加一个查询条件或者排序字段,都要去请求参数对象里加一个属性,然后再跑去改 EF Core 的查询逻辑?如果是,那这篇文章应该对你有用。我会带你做…...
Go语言的sync.Cond条件变量与通道关闭在广播通知中的语义差异
Go语言中,sync.Cond条件变量与通道关闭均能实现广播通知,但两者在语义和适用场景上存在显著差异。条件变量基于锁的协作机制,适合复杂同步逻辑;而通道关闭则依赖Go的CSP模型,以无锁方式实现轻量级广播。理解二者的差异…...
Rust的#[repr(align)]编程需求
Rust作为一门注重安全与性能的系统级编程语言,提供了精细控制内存布局的能力。其中,#[repr(align)]属性是一个强大的工具,允许开发者显式指定数据类型的对齐方式。这一特性在需要与硬件交互、优化性能或满足特定协议时尤为重要。本文将深入探…...
