自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 MySQL 页完全指南——浅入深出页的原理

之前写了一些关于 MySQL 的 InnoDB 存储引擎的文章,里面好几次都提到了页(Pages)这个概念,但是都只是简要的提了一下。例如之前在聊 InnoDB内存结构 时提到过,但当时的重点是内存架构,就没有展开深入。我发现有好几次都需要提到页,那我就正好拿一篇来详细的讲讲 InnoDB 中的页。页是什么首先,我们需要知道,页(Pages)是 InnoDB 中管理数据的最小单元。Buffer Pool 中存的就是一页一页的数据。再比如,当我们要查询的数据不在 Buffer Pool 中时,InnoD

2021-06-21 10:00:52 135

原创 RocketMQ基础概念剖析&源码解析

TopicTopic是一类消息的集合,是一种逻辑上的分区。为什么说是逻辑分区呢?因为最终数据是存储到Broker上的,而且为了满足高可用,采用了分布式的存储。这和Kafka中的实现如出一辙,Kafka的Topic也是一种逻辑概念,每个Topic的数据会分成很多份,然后存储在不同的Broker上,这个「份」叫Partition。而在RocketMQ中,Topic的数据也会分布式的存储,这个「份」叫MessageQueue。其分布可以用下图来表示。这样一来,如果某个Broker所在的机器意外宕机,而且

2021-03-23 10:21:52 287

原创 深度图解Redis Cluster原理

不想谈好吉他的撸铁狗,不是好的程序员,欢迎微信关注「SH的全栈笔记」前言上文我们聊了基于Sentinel的Redis高可用架构,了解了Redis基于读写分离的主从架构,同时也知道当Redis的master发生故障之后,Sentinel集群是如何执行failover的,以及其执行failover的原理是什么。这里大概再提一下,Sentinel集群会对Redis的主从架构中的Redis实例进行监控,一旦发现了master节点宕机了,就会选举出一个Sentinel节点来执行故障转移,从原来的slave节.

2020-12-18 14:20:54 8891 10

原创 MySQL 不完全入门指南

我的 个人网站 上线了,上面可以更好的检索历史文章,并且可以对文章进行留言,欢迎大家访问由于 MySQL 的整个体系太过于庞大,文章的篇幅有限,不能够完全的覆盖所有的方面。所以我会尽可能的从更加贴进我们日常使用的方式来进行解释。小白眼中的 MySQL首先,对于我们来说,MySQL 是个啥?我们从一个最简单的例子来回顾一下。这可能就是最开始大家认知中的 MySQL。那 MySQL 中是怎么处理这个查询语句的呢?换句话说,它是如何感知到这串字符串是一个查询语句的?它是如何感知到该去哪张表中取数据?.

2021-10-09 10:50:10 208

原创 MySQL 中删除的数据都去哪儿了?

不知道大家有没有想过下面这件事?我们平时调用 DELETE 在 MySQL 中删除的数据都去哪儿了?这还用问吗?当然是被删除了啊那么这里又有个新的问题了,如果在 InnoDB 下,多事务并发的情况下,如果事务A删除了 id=1 的数据,同时事务B又去读取 id=1 的数据,如果这条数据真的被删除了,那 MVCC 拿啥数据返回给用户呢?没错,这就需要了解一下 MySQL 的多版本并发的原理相关的东西,感兴趣的可以去看我之前写的这篇文章。所以,实际情况中,调用了 DELETE 语句删除的数据并不

2021-08-23 11:22:07 373

原创 MySQL 到底是如何做到多版本并发的?

之前的文章简单的介绍了 MySQL 的事务隔离级别,它们分别是:读未提交、读已提交、可重复读、串行化。这篇文章我们就来探索一下 MySQL 事务隔离级别的底层原理。本篇文章针对 InnoDB 存储引擎多版本并发控制我们知道,读未提交会造成脏读、幻读、不可重复读,读已提交会造成幻读、不可重复读,可重复读可能会有幻读,和串行化就不会有这些问题。那 InnoDB 到底是怎么解决这些问题的呢?又或者,你有没有想过造成脏读、幻读、不可重复读的底层最根本的原因是什么呢?这就是今天要聊的主角——MVCC(M

2021-08-18 10:51:18 250

原创 啥是 MySQL 事务隔离级别?

之前发过一篇文章,简单了解 MySQL 中相关的锁,里面提到了,如果我们使用的 MySQL 存储引擎为 InnoDB ,并且其事务隔离级别是 RR 可重复读的话,是可以避免幻读的。但是没想到,都 1202 年了都还有人杠,说 InnoDB 的 RR 隔离级别下会出现幻读,只能依靠 gap 和 next-key 这两个锁来防止幻读 ,最开始我还以为是他真的不知道这个点,就跟他聊,最后聊下来发现,发现是在钻牛角尖。这个在下面讲到 可重复读 的隔离级别时会讲。本来我觉得事务隔离级别这玩意儿太简单没啥可讲的,

2021-08-11 14:10:42 117

原创 ArrayList 从源码角度剖析底层原理

本篇文章已放到 Github github.com/sh-blog 仓库中,里面对我写的所有文章都做了分类,更加方便阅读。同时也会发布一些职位信息,持续更新中,欢迎 Star对于 ArrayList 来说,我们平常用的最多的方法应该就是 add 和 remove 了,本文就主要通过这两个基础的方法入手,通过源码来看看 ArrayList 的底层原理。add默认添加元素这个应该是平常用的最多的方法了,其用法如下。接下来我们就来看看 add 方法的底层源码。ensureCapacityIn.

2021-07-20 10:47:04 270 2

原创 NameServer 核心原理解析

在之前的文章中,已经把 Broker、Producer 和 Conusmer 的部分源码和核心的机制介绍的差不多了,但是其实 RocketMQ 中还有一个比较关键但是我们平时很容易忽略的组件——NameServer。在日常的使用中,我们接触的最多的还是 Producer 和 Consumer,而 NameServer 没有直接跟我们有交互。就像 Kafka 集群背后用于其集群元数据管理的 Zookeeper 集群一样,NameServer 也在背后支撑着 RocketMQ 正常工作。你给翻译翻译,什么叫

2021-07-12 14:02:29 234

原创 InnoDB 表空间

这应该是 MySQL 原理中最底层的部分了,我们存在 MySQL 中的数据,到底在磁盘上长啥样。你可能会说,数据不都存储在聚簇索引中吗?但很遗憾,你并没有回答我的问题。我会再问你,那聚簇索引在磁盘上又长啥样?就像 Redis 的 RDB 文件,最终落在磁盘上就是一个真真切切的 dump.rdb 文件,而 MySQL 就显得有点迷,我们只知道通过 SQL 去拿数据,并不知道数据最终是以什么方式进行存储的。当然,了解其底层的存储逻辑,并不仅仅是为了满足好奇心这么简单。其底层的存储方式,会影响到聚簇索引中数据

2021-07-02 09:56:38 245

原创 缓存与数据库的双写一致性

这几天瞎逛,不知道在哪里瞟到了缓存的双写,就突然想起来这块虽然简单,但是细节上还是有足够多我们可以去关注的点。这篇文章就来详细聊聊双写一致性。首先我们知道,现在将高速缓存应用于业务当中已经十分常见了,甚至可能跟数据库的频率不相上下。你的用户量如果上去了,直接将一个裸的 MySQL 去扛住所有压力明显是不合理的。这里的高速缓存,目前业界主流的就是 Redis 了,关于 Redis 相关的文章,之前也有聊过,在此就不赘述,感兴趣的可以看看:Redis 基础数据结构和用法Redis 数据持久化Re.

2021-06-11 09:34:53 474 1

原创 深入剖析 MySQL 自增锁

之前的文章把 InnoDB 中的所有的锁都介绍了一下,包括意向锁、记录锁…自增锁巴拉巴拉的。但是后面我自己回过头去看的时候发现,对自增锁的介绍居然才短短的一段。其实自增锁(AUTO-INC Locks)这块还是有很多值得讨论的细节,例如在并发的场景下,InnoDB 是如何保证该值正确的进行自增的,本章就专门来简单讨论一下 InnoDB 中的自增锁。什么是自增锁之前我们提到过,自增锁是一种比较特殊的表级锁。并且在事务向包含了 AUTO_INCREMENT 列的表中新增数据时就会去持有自增锁,假设事务 A

2021-05-31 19:53:39 352

原创 简单了解 MySQL 中相关的锁

本文主要是带大家快速了解 InnoDB 中锁相关的知识为什么需要加锁首先,为什么要加锁?我想我不用多说了,想象接下来的场景你就能 GET 了。你在商场的卫生间上厕所,此时你一定会做的操作是啥?锁门。如果不锁门,上厕所上着上着,啪一下门就被打开了,可能大概也许似乎貌似有那么一丁点的不太合适。数据也是一样,在并发的场景下,如果不对数据加锁,会直接破坏数据的一致性,并且如果你的业务涉及到钱,那后果就更严重了。锁门表情包锁的分类在 InnoDB 中,都有哪些锁?其实你应该已经知道了很多了,例如.

2021-05-24 19:48:35 96

原创 浅入浅出 MySQL 索引

索引是什么?为什么要有mysql 索引,解决了什么问题,其底层的原理是什么?为什么使用B+树做为解决方案?用其他的像哈希索引或者B树不行吗?简单了解索引首先,索引(Index)是什么?如果我直接告诉你索引是数据库管理系统中的一个有序的数据结构,你可能会有点懵逼。为了避免这种情况,我打算举几个例子来帮助你更容易的认识索引。我们查询字典的时候可以根据字的部首、笔画来查找到对应的字,这样可以快速的找到对应的字所在页,在字典开头那玩意就叫索引还有一本书的目录,可以帮我们快速的跳到不同的章节,此时这里的

2021-05-17 10:21:43 118

原创 深入了解Zookeeper核心原理

之前的文章Zookeeper基础原理&应用场景详解中将Zookeeper的基本原理及其应用场景做了一个详细的介绍,虽然介绍了其底层的存储原理、如何使用Zookeeper来实现分布式锁。但是我认为这样也仅仅只是了解了Zookeeper的一点皮毛而已。所以这篇文章就给大家详细聊聊Zookeeper的核心底层原理。不太熟悉Zookeeper的可以回过头去看看。ZNode这个应该算是Zookeeper中的基础,数据存储的最小单元。在Zookeeper中,类似文件系统的存储结构,被Zookeeper抽象成

2021-04-28 10:24:33 254 1

原创 Zookeeper基础原理&应用场景详解

简单了解ZookeeperTips: 如果之前对Zookeeper不了解的话,这里大概留个印象就好了Zookeeper是一个分布式协调服务,可以用于元数据管理、分布式锁、分布式协调、发布订阅、服务命名等等。例如,Kafka中就是用Zookeeper来保存其集群中的相关元数据,例如Broker、Topic以及Partition等等。同时,基于Zookeeper的Watch监听机制,还可以用其实现发布、订阅的功能。在平常的常规业务使用场景下,我们几乎只会使用到分布式锁这一个用途。Zookeeper

2021-04-21 09:23:00 240

原创 详细了解 InnoDB 内存结构及其原理

最近发现,文章太长的话,包含的信息量较大, 并且需要更多的时间去阅读。而大家看文章,应该都是利用的一些碎片时间。所以我得出一个结论,文章太长不太利于大家的吸收和消化。所以我之后会减少文章的长度,2-3K字就差不多,也能够快速的阅读完。之前写过一篇文章「简单了解InnoDB原理」,现在回过头看,其实里面只是把缓冲池(Buffer Pool),重做日志缓冲(Redo Log Buffer)、插入缓冲(Insert Buffer)和自适应哈希索引(Adaptive Hash Index)等概念简单的介绍了一.

2021-04-13 10:39:13 256

原创 从RocketMQ的Broker源码层面验证一下这两个点

本篇博客会从源码层面,验证在RocketMQ基础概念剖析,并分析一下Producer的底层源码中提到的结论,分别是:Broker在启动时,会将自己注册到所有的NameServer上Broker在启动之后,会每隔30S向NameServer发送心跳之前的文章中,我们知道了RocketMQ中的一些核心概念,例如Broker、NameServer、Topic和Tag等等。Producer从启动到发送消息的整个过程,从源码级别分析了Producer在发送消息到Broker的时候,是如何拿到Broker.

2021-03-15 13:21:17 233 2

原创 RocketMQ基础概念剖析,并分析一下Producer的底层源码

由于篇幅原因,本次的源码分析只限于Producer侧的发送消息的核心逻辑,我会通过流程图、代码注释、文字讲解的方式来对源码进行解释,后续应该会专门开几篇文章来做源码分析。这篇博客聊聊关于RocketMQ相关的东西,主要聊的点有RocketMQ的功能使用、RocketMQ的底层运行原理和部分核心逻辑的源码分析。至于我们为什么要用MQ、使用MQ能够为我们带来哪些好处、MQ在社区有哪些实现、社区的各个MQ的优劣对比等等,我在之前的文章《消息队列杂谈》已经聊过了,如果需要了解的话可以回过头去看看。基础概念.

2021-02-26 13:39:52 219 1

原创 消息队列杂谈

本篇文章聊聊消息队列相关的东西,内容局限于我们为什么要用消息队列,消息队列究竟解决了什么问题,消息队列的选型。为了更容易的理解消息队列,我们首先通过一个开发场景来切入。不使用消息队列的场景首先,我们假设A同学负责订单系统的开发,B、C同学负责开发积分系统、仓储系统。我们知道,在一般的购物电商平台上,我们下单完成后,积分系统会给下单的用户增加积分,然后仓储系统会按照下单时填写的信息,发出用户购买的商品。那问题来了,积分系统、仓储系统如何感知到用户的下单操作?你可能会说,当然是订单系统在创建完订单之

2021-02-19 09:51:09 162

原创 大白话聊聊微服务——人人都能看懂的演进过程

这篇博客的本意是希望看到这篇文章的读者能够很轻松的理解我想表达的意思。但程序向的分享经常会不经意间就贴上了代码,很可能就会让人看的很懵。而且我认为分享一个东西,只有对方真正明白了其中的逻辑,才是有意义的分享。所以接下来我会尝试用大家都能理解的语言来聊一聊”微服务“。【写在前面】那么,什么是微服务呢?你不一定知道微服务,但是你一定知道麦某劳,而且知道麦某劳有个甜品站。你可能会问,甜品站和微服务有什么关联呢?让我们先假设不把甜品站独立出来,而是普通的麦某劳店。经营一段时间你会发现,这个地方虽然人流量很大,

2021-02-18 16:44:57 299 1

原创 基于Redo Log和Undo Log的MySQL崩溃恢复流程

在之前的文章「简单了解InnoDB底层原理」聊了一下MySQL的Buffer Pool。这里再简单提一嘴,Buffer Pool是MySQL内存结构中十分核心的一个组成,你可以先把它想象成一个黑盒子。黑盒下的更新数据流程当我们查询数据的时候,会先去Buffer Pool中查询。如果Buffer Pool中不存在,存储引擎会先将数据从磁盘加载到Buffer Pool中,然后将数据返回给客户端;同理,当我们更新某个数据的时候,如果这个数据不存在于Buffer Pool,同样会先数据加载进来,然后修改修改内存

2021-01-28 10:21:07 522

原创 深入了解MySQL主从复制的原理

欢迎微信关注「SH的全栈笔记」0. 主从复制首先主从复制是什么?简单来说是让一台MySQL服务器去复制另一台MySQL的数据,使两个服务器的数据保持一致。这种方式与Redis的主从复制的思路没有太大的出入。如果你对Redis的主从复制感兴趣可以去看看《Redis的主从复制》。那既然Redis和MySQL都采用了复制这种方式,主从复制所带来的意义是什么呢?通过复制功能,构建一个或者多个从库,可以提高数据库的高可用性、可扩展性,同时实现负载均衡。当主库发生故障时,可以快速的切到其某一个从库,并将该从.

2021-01-13 14:05:13 349

原创 降低代码的圈复杂度——复杂代码的解决之道

本文代码示例以Go语言为例欢迎微信关注「SH的全栈笔记」0. 什么是圈复杂度可能你之前没有听说过这个词,也会好奇这是个什么东西是用来干嘛的,在维基百科上有这样的解释。Cyclomatic complexity is a software metric used to indicate the complexity of a program. It is a quantitative measure of the number of linearly independent paths thro.

2020-12-30 14:24:08 2458

原创 初探Java类型擦除

什么是类型擦除为了让你们快速的对类型擦除有一个印象,首先举一个很简单也很经典的例子。// 指定泛型为StringList<String> list1 = new ArrayList<>();// 指定泛型为IntegerList<Integer> list2 = new ArrayList<>();System.out.println(list1.getClass() == list2.getClass()); // true上面的判断结果是t

2020-12-15 17:56:45 124

原创 浅谈JVM和垃圾回收

写在前面简单的介绍一下JVM(Java Virtual Machine)吧,它也叫Java虚拟机。虽然它叫虚拟机,但是实际上不是我们所理解的虚拟机,它更像操作系统中的一个进程。JVM屏蔽了各个操作系统底层的相关的东西,Java程序只需要生成对应的字节码文件,然后由JVM来负责解释运行。介绍几个容易混淆的概念,JDK(Java Development Kit) 可以算是整个Java的核心,其中有编译、调试的工具包和基础类库,它也包含了JRE。JRE(Java Runtime Environment),包

2020-12-15 17:54:59 152

原创 Redis Sentinel-深入浅出原理和实战

本篇博客会简单的介绍Redis的Sentinel相关的原理,同时也会在最后的文章给出硬核的实战教程,让你在了解原理之后,能够实际上手的体验整个过程。之前的文章聊到了Redis的主从复制,聊到了其相关的原理和缺点,具体的建议可以看看我之前写的文章Redis的主从复制。总的来说,为了满足Redis在真正复杂的生产环境的高可用,仅仅是用主从复制是明显不够的。例如,当master节点宕机了之后,进行主从切换的时候,我们需要人工的去做failover。同时在流量方面,主从架构只能通过增加slave节点来扩展.

2020-12-09 10:02:35 844

原创 用go-module作为包管理器搭建go的web服务器

本篇博客主要介绍了如何从零开始,使用Go Module作为依赖管理,基于Gin来一步一步搭建Go的Web服务器。并使用Endless来使服务器平滑重启,使用Swagger来自动生成Api文档。源码在此处:项目源码大家可以先查看源码,然后再根据本篇文章,来了解搭建过程中服务器的一些细节。搭建环境以下所有的步骤都基于MacOS。安装go在这里推荐使用homebrew进行安装。当然你也可以使用源码安装。brew install go跑完命令之后,在命令行输入go。如果在命令行看到如下输出,则代表

2020-12-02 11:42:32 372

原创 如何正确快速的将你的前端应用打包成Docker镜像并发布

1.前言前段时间,自己搞了个阿里云的服务器。想自己在上面折腾,但是不想因为自己瞎折腾而污染了现有的环境。毕竟,现在的阿里云已经没有免费的快照服务了。要想还原的话,最简单的办法就是重新装系统。而一旦重装,之前的搭建的所有环境就都白搭了。再加上之前本身就想引入docker,所以就打算利用docker容器来部署这次的前端应用。2.构建前端应用在打包之前,首先需要一个可正常运行的前端应用。这个可以使用umi或者create-react-app来构建。3.nginx的默认配置文件然后需要在项目中加上默认n

2020-12-01 15:15:29 2836

原创 如何在SpringBoot中集成JWT(JSON Web Token)鉴权

这篇博客主要是简单介绍了一下什么是JWT,以及如何在Spring Boot项目中使用JWT(JSON Web Token)。1.关于JWT1.1 什么是JWT老生常谈的开头,我们要用这样一种工具,首先得知道以下几个问题。这个工具是什么,这个工具解决了什么问题是否适用于当前我们所处得业务场景用了之后是否会带来任何其他问题怎么用才是最佳实践那什么是JWT呢?以下是我对jwt官网上对JWT介绍的翻译。JSON Web Token (JWT)是一种定义了一种紧凑并且独立的,用于在各方之间使用

2020-12-01 15:14:12 211

原创 想在Java中实现Excel和Csv的导出吗?看这就对了

前言最近在项目中遇到一个需求,需要后端提供一个下载Csv和Excel表格的接口。这个接口接收前端的查询参数,针对这些参数对数据库做查询操作。将查询到的结果生成Excel和Csv文件,再以字节流的形式返回给前端。前端拿到这个流文件之后,最开始用ajax来接收,但是前端发送的请求却被浏览器cancel掉了。后来发现,发展了如此之久的Ajax居然不支持流文件下载。后来前端换成了最原始的XMLHttpRequest,才修复了这个问题。首先给出项目源码的地址。这是源码,欢迎大家star或者提MR。Csv新建

2020-12-01 15:13:09 489

原创 优雅的使用RedisTemplate操作Redis

背景在最近的项目中,有一个需求是对一个很大的数据库进行查询,数据量大概在几千万条。但同时对查询速度的要求也比较高。这个数据库之前在没有使用Presto的情况下,使用的是Hive,使用Hive进行一个简单的查询,速度可能在几分钟。当然几分钟也并不完全是跑SQL的时间,这里面包含发请求,查询数据并且返回数据的时间的总和。但是即使这样,这样的速度明显不能满足交互式的查询需求。我们的下一个解决方案就是Presto,在使用了Presto之后,查询速度降到了秒级。但是对于一个前端查询界面的交互式查询来说,十几秒仍

2020-12-01 11:59:41 1149

原创 WebAssembly完全入门——了解wasm的前世今身

前言接触WebAssembly之后,在google上看了很多资料。感觉对WebAssembly的使用、介绍、意义都说的比较模糊和笼统。感觉看了之后收获没有达到预期,要么是文章中的例子自己去实操不能成功,要么就是不知所云、一脸蒙蔽。本着业务催生技术的态度,这边文章就诞生了。前部分主要是对WebAssembly的背景做一些介绍,WebAssembly是怎么出现的,优势在哪儿。如果想直接开始撸代码试试效果,可以直接跳到最后一个板块。WebAssembly是什么?定义首先我们给它下个定义。WebAsse

2020-12-01 11:57:08 743

原创 手把手教你从零开始搭建SpringBoot后端项目框架

原料新鲜的IntelliJ IDEA、一双手、以及电脑一台。搭建框架新建项目打开IDE,点击File -> New Project。在左侧的列表中的选择Maven项目,点击Next。填写GroupId和ArtifactId什么是GroupId和ArtifactId?大家可以参考一下google出来的定义,可以参考一下。GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构。ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就

2020-12-01 11:54:38 1136

原创 如何正确的注册微信开发测试号

注册测试号注册的地址在 这里要进行微信公众号的开发,那就需要一个本地的开发环境来进行开发。而微信测试号就正好提供了这样的一个development环境。每个微信号只能对应一个测试号,但是每个测试号可以开发多个微信公众号项目。微信号与测试号是一一对应的关系,而测试号与开发项目是一对多的关系。进入之后会看到页面里面有以下几个大块。测试号信息接口配置信息JS接口安全域名测试号二维码模板消息接口体验接口权限表下面针对每个点介绍一下具体是干嘛的。测试号信息包含了appId、appsecret

2020-12-01 11:51:58 1321

原创 在项目中接入微信JS-SDK你所需要知道的所有细节

微信JS-SDK的功能如果你点进来,那么我相信你应该知道微信的JS-SDK可以用来做什么了。微信的官方文档描述如下。微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫等微信特有的能力,为微信用户提供更优质的网页体验。通过使用微信的JS-SDK,你可以让你网页在微信内调用拍照、语音、支付、位置、扫一扫这些只能在微信内使用的功能。进过下面的步骤,

2020-12-01 11:50:11 886

原创 跟随杠精的视角一起来了解Redis的主从复制

不想弹好吉他的撸铁狗,都不是好的程序猿虽然说单机的Redis性能很好,也有完备的持久化机制,那如果你的业务体量真的很大,超过了单机能够承载的上限了怎么办?不做任何处理的话Redis挂了怎么办?带着这个问题开始我们今天的主题-Redis高可用,由于篇幅原因,本章就只聊聊主从复制。为啥要先从主从复制开始聊,是因为主从复制可以说是整个Redis高可用实现的基石,你可以先有这么一个概念,至于具体为什么是基石,这个后面聊到Sentinel和Redis集群的时候会说到。首先我们需要知道,对于我们开发人员来说,.

2020-12-01 10:19:40 191

原创 Redis基础—了解Redis是如何做数据持久化的

之前的文章介绍了Redis的简单数据结构的相关使用和底层原理,这篇文章我们就来聊一下Redis应该如何保证高可用。数据持久化我们知道虽然单机的Redis虽然性能十分的出色, 单机能够扛住10w的QPS,这是得益于其基于内存的快速读写操作,那如果某个时间Redis突然挂了怎么办?我们需要一种持久化的机制,来保存内存中的数据,否则数据就会直接丢失。Redis有两种方式来实现数据的持久化,分别是RDB(Redis Database)和AOF(Append Only File),你可以先简单的把RDB理解为某

2020-11-10 09:57:36 241

原创 简单了解InnoDB底层原理

存储引擎很多文章都是直接开始介绍有哪些存储引擎,并没有去介绍存储引擎本身。那么究竟什么是存储引擎?不知道大家有没有想过,MySQL是如何存储我们丢进去的数据的?其实存储引擎也很简单,我认为就是一种存储解决方案,实现了新增数据、更新数据和建立索引等等功能。有哪些已有的存储引擎可以让我们选择呢?InnoDB、MyISAM、Memory、CSV、Archive、Blackhole、Merge、Federated、Example种类很多,但是常用的存储引擎目前就只有InnoDB和MyISAM,我也会着

2020-10-26 15:37:13 822 1

原创 Redis基础—彻底了解基础数据结构用法及其原理

这是一个系列的文章,打算把Redis的基础数据结构、高级数据结构、持久化的方式以及高可用的方式都讲一遍,公众号会比其他的平台提前更新,感兴趣的可以提前关注,「SH的全栈笔记」,下面开始正文。如果你是一个有经验的后端或者服务器开发,那么一定听说过Redis,其全称叫Remote Dictionary Server。是由C语言编写的基于Key-Value的存储系统。说直白点就是一个内存数据库,既然是内存数据库就会遇到如果服务器意外宕机造成的数据不一致的问题。这跟很多游戏服务器也是一样的,感兴趣的可以参考.

2020-10-21 18:32:25 323

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除