当前位置: 首页 > news >正文

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高可用策略

  • 主从复制机制
  • 故障转移,自动恢复
http://www.lryc.cn/news/309208.html

相关文章:

  • 【README 小技巧】 展示gitee中开源项目start
  • tcping实用小工具
  • 【Web】Java反序列化之CC2——commons-collections4的新链之一
  • golang使用gorm操作mysql1
  • Flutter异常上报及性能监控实现
  • 基于springboot+vue的工厂车间管理系统
  • Java基础 - Stream 流:Stream API的终端操作
  • 高级语言期末2009级A卷(计算机学院)
  • docker-compose搭建php开发环境
  • 翻译论文:Beating Floating Point at its Own Game: Posit Arithmetic(一)
  • 【数据结构-图论】并查集
  • 云计算时代的运维: 职业发展方向与岗位选择
  • java锁底层概述
  • win10如何添加指纹登陆
  • 足底筋膜炎的症状及治疗
  • udp丢包问题研究
  • 在idea中用模板骨架初始创建maven管理的web项目时没有src有关的目录的解决方案
  • WPF 【十月的寒流】学习笔记(2):MVVM中是怎么实现通知的
  • 数据结构:广义表
  • 你好,C++(18) 到底要不要买这个西瓜?4.1.6 操作符之间的优先顺序
  • C语言 for 循环语句的基本格式是什么?
  • 项目-SERVER模块-日志宏
  • TCP为什么要三次握手?
  • 网络防御第6次作业
  • Jmeter分布式部署
  • Odoo迈入开源第一低代码开发平台的重要里程碑
  • WinForm、Wpf自动升级 AutoUpdater.NET
  • GPU不够用:语言模型的分布式挑战
  • 深入理解Redis中的渐进式Rehash技术
  • 数据结构 栈和队列 力扣例题AC——代码以及思路记录