Kaito's Blog

致力成为一枚silver bullet.

0%

如果Redis的读写请求量很大,那么单个实例很有可能承担不了这么大的请求量,如何提高Redis的性能呢?你也许已经想到了,可以部署多个副本节点,业务采用读写分离的方式,把读请求分担到多个副本节点上,提高访问性能。要实现读写分离,就必须部署多个副本,每个副本需要实时同步主节点的数据。

Redis也提供了完善的主从复制机制,使用非常简单的命令,就可以构建一个多副本节点的集群。

同时,当主节点故障宕机时,我们可以把一个副本节点提升为主节点,提高Redis的可用性。可见,对于故障恢复,也依赖Redis的主从复制,它们都是Redis高可用的一部分。

这篇文章我们就来介绍一下Redis主从复制流程和原理,以及在复制过程中有可能产生的各种问题。

阅读全文 »

从这篇文章开始,我们来介绍Redis高可用相关的机制。Redis要想实现高可用,主要有以下方面来保证:

  • 数据持久化
  • 主从复制
  • 自动故障恢复
  • 集群化

这篇文章我们先介绍Redis的高可用保障的基础:数据持久化。因为Redis的主从复制和自动故障恢复,都需要依赖Redis持久化相关的东西。同时,Redis的数据持久化也可以用来做数据备份,用来保障数据的安全性。

Redis是一个内存数据库,它的数据都保存在内存中,如果实例宕机,那么数据则全部丢失。如何保证数据的完整性和安全性也是提高服务高可用的重要机制之一。

Redis提供了完善的持久化机制,可以把内存中的数据持久化到磁盘上,方便我们进行备份数据和快速恢复数据。

这篇文章我们就来分析Redis的数据持久化是如何实现的?我们经常听的RDB和AOF有什么区别?以及它们不同的使用场景。

阅读全文 »

众所周知,Redis在内存库数据库领域非常地火热,它极高的性能和丰富的数据结构为我们的开发提供了极大的便利。

但我们也听说了,Redis是单线程的,为什么采用单线程的Redis也会如此之快呢?这篇文章我们来分析一下其中的缘由。

其实,严格来说,Redis Server是多线程的,只是它的请求处理整个流程是单线程处理的。这一点我们一定要清楚了解到,不要单纯地认为Redis Server是单线程的!

我们平时说的Redis单线程快是指它的请求处理过程非常地快!

下面我们就来分下一下为什么请求处理使用单线程,依旧可以达到这么高的性能。

Redis的性能非常之高,每秒可以承受10W+的QPS,它如此优秀的性能主要取决于以下几个方面:

  • 纯内存操作
  • 使用IO多路复用技术
  • 非CPU密集型任务
  • 单线程的优势
阅读全文 »

前言

我们都知道,Redis和Memcached都是内存数据库,它们的访问速度非常之快。但我们在开发过程中,这两个内存数据库,我们到底要如何选择呢?它们的优劣都有哪些?为什么现在看Redis要比Memcached更火一些?

这篇文章,我们就从各个方面来对比这两个内存数据库的差异,方便你在使用时,做出最符合业务需要的选择。

要分析它们的区别,主要从以下几个方面对比:

  • 线程模型
  • 数据结构
  • 淘汰策略
  • 管道与事物
  • 持久化
  • 高可用
  • 集群化
阅读全文 »

最近在公司对redis做一些二次开发时,发现一个randomkey命令可能导致整个redis实例长时间阻塞的问题,redis版本为3.2.9,以此记录。

问题

由于我们公司使用的是redis集群版Codis,Codis内置的redis版本比较低,为3.2.9版本。

我们近期在做Codis双机房时,需要对redis增加一些功能以此支持双机房,在开发和测试中发现,执行randomkey命令有可能导致整个redis长时间阻塞的问题。

阅读全文 »

背景

用了5年的MacBook Pro 13寸,以零故障的记录光荣退役了。不得不说,前几年的MacBook品控做的是真好,整机非常耐用。

但后来的MacBook由于在硬件层面做了很多调整,之后的机器或多或少都出现过各种问题,身边的同事和朋友都遇到过一些,例如键盘故障、触控板问题,当然苹果售后也很给力,只要检查出故障就会马上换新,甚至连主板都直接换掉。

不过这次,我也终于入手了最新款的MacBook,更换的原因是因为之前的电脑性能实在跟不上了,常年在公司办公,已经变得越来越慢,Chrome打开的网页一多就能感觉到明显的卡顿情况。

这次入手的这款MacBook Pro是16寸的,配置为i9 CPU + 64G内存 + 1T固态硬盘 + 5300M独立显卡,除了硬盘和显卡之外,其他项选择的都是顶配。

有朋友觉得内存没必要选这么大的,我之前的13寸MacBook Pro只有8G内存,小的可怜,这次直接一步到位,再也不会受到内存瓶颈的影响。另外这台新电脑也计划准备陪我再战4-5年,选这个配置也足够为我未来工作和学习的变化提供足够的支撑。

拿到手里第一个感觉真的是:大!视觉冲击很棒!13寸的用了太久,这次尝试体验一下16寸的,新鲜感十足!

MacBook Pro 16寸

MacBook Pro 16寸

阅读全文 »

上篇文章讲了CPU在内存中读取数据时,为了提高读取速度,在中间增加了一层缓存,即高速缓存Cache。

这篇文章我们的角度下放,重点来看一下程序在运行过程中,内存是如何管理的。

内存问题

计算机出现的早期,其工作内容比较简单,同一时间只做一个计算任务,然后输出结果。

但随着人类需求的提高,人们希望计算机能同时计算多个任务,提高计算机的使用率。逐渐地,多任务计算机出现,但要想同时运行多个任务,那各任务之间如何分配和使用计算机资源呢?

为了解决这个问题,人类发明出操作系统,所有的计算机资源交由操作系统统一管理,各程序需要使用资源要向操作系统提出申请,操作系统按照某种规则统一分配和管理,同时保证资源的合理分配。

内存是一段连续的地址空间,如果多个程序同时运行,对于内存的时候一不小心会不会侵入了别的程序,导致运行结果产生错误?那么如何合理地分配和保护内存资源,变得十分重要。

我们都知道,一段程序要想运行必须加载到内存,然后CPU从内存获取指令和数据进行逻辑运算和处理,但如果一段程序运行时需要的内存非常大,超过了计算机的物理内存,这种程序还能否运行呢?

我们整理一下,针对内存资源遇到的问题:

  • 多个程序同时运行,如何保证各程序之间内存资源分配合理,且资源互不干扰?
  • 程序运行能否突破物理内存的大小?

基于这2个问题,我们来看一下,计算机是如何解决这些问题的,这其中涉及硬件与操作系统共同的协作。

阅读全文 »

从这篇文章开始,我们开始讲解存储器相关的知识。存储器在计算机中处于非常重要的位置,其中内存最为重要,其涉及到的内容主要包含高速缓存Cache和虚拟内存两大块,这篇文章先来看高速缓存Cache的基本原理。

存储器层次化结构

存储器有很多种类,我们常见的有内存、磁盘,还有平时看不到的集成在CPU内部的寄存器、高速缓存等。

正常来说,存储器的容量和性能应该伴随着CPU的速度和性能提升而提升,以匹配CPU的数据处理。但随着时间的推移,CPU和存储器在性能上的发展差异越来越大,存储器在性能增长越来越跟不上CPU性能发展的需要。

那怎么办呢?

为了缩小存储器和CPU之间的性能差距,通常在计算机内部采用层次化的存储器体系结构,以此来发挥出存储器的综合性能。

阅读全文 »

之前的文章讲完了数字在计算机内部的表示方式,那英文、中文字符在计算机内部是如何表示的呢?这篇文章我们来看字符的表示方式。

西文字符

西文字符主要由拉丁字母、数字、标点符号及一些特殊符号组成,它们统称为字符,所有字符的集合叫做字符集

但字符不能直接在计算机内部处理,必须对字符进行数字化编码,转换成二进制0/1序列,因此构成了字符和数字化编码对应的代码表,简称码表,码表中的字符与代码一一对应。

世界各国都有自己的语言,即各国都有自己的字符,每个国家的字符组合起来也就产生了多种字符集。

由于计算机是美国人发明的,所以对于英文字符,美国人制定了一个字符和二进制对应的码表,这个码表就是ASCII码,即美国标准信息交换码(American Standard Code for Information Interchange)。

阅读全文 »

我们知道计算机中数字都是使用的二进制表示和运算,对于我们熟悉的十进制数字,可以通过数值进制公式进行转换后计算和显示。

但除了这种编码方式之外,计算机有时为了显示和计算方便,对十进制还定义了新的编码方式:ASCII码字符表示、BCD码表示。这篇文章我们来了解一下这2种编码方式的特点。

ASCCI码字符表示

如果只是对十进制数进行打印或显示,那么可以把十进制数看成字符串,直接用ASCII码表示,09分别对应ASCII码的30H39H,这种表示方式,1位十进制用8位二进制数表示。

用ASCII码表示的十进制又分为前分隔数字串后嵌入数字串

前分隔数字串

前分隔数字串将符号位单独用一个字节表示,放在数字串之前。

正号(+)用ASCII码2B(H)表示,符号(-)用2D(H)表示。

例如十进制数+236用前分隔数字串表示为0010 1011 0011 0010 0011 0011 0011 0110,对应的十六进制为2B 32 33 36,在内存中占用4个字节。

十进制数-2369用前分隔数字串表示为0010 1101 0011 0010 0011 0011 0011 0110 0011 1001,对应的十六进制为2D 32 33 36 39,在内存中占用5个字节。

可见,十进制数每增加一位,就要多一个字节表示对应数字。

阅读全文 »