前言
The open source,in-memory data store used by millions of developers as a database,cache streaming engine,and message broker.——开源的内存数据存储,被数百万开发人员用作数据库、缓存流引擎和消息中间件。
1. 初始Redis
Redis是在内存中存储数据的,而我们平时定义的变量就是在内存中的,那么Redis在什么场景下才有用呢?这么想在平时确实没有用,但是其实它是需要在分布式系统中,才会有效果的。如果只是单机程序,直接通过变量存储数据是更好的方式。
那么说来说去Redis到底是用来干什么的呢?在学习进程部分,我们知道进程是具有隔离性的,彼此之间是无法看到对方的数据的,如果想进行通信,那么就需要双方先看到同一份资源……。
在进程通信中,有一种方式是通过网络来进行的,我们可以通过网络来实现一个主机的不同进程之间的通信,或者是不同主机之间进程的通信。而Redis就是基于网络,可以把自己内存中的数据给其他进程,甚至是其他主机的进程使用。
2. MySQL VS Redis
MySQL是目前主流的数据库,但是它有一个很大的问题, 就是它的访问速度很慢,在一些产品中,对于性能要求很高,那么此时MySQL就不太适用了。而Redis也可以当作数据库使用,由于它是在内存中存储的,而MySQL是在硬盘中存储的,所以在效率上Redis是远高于MySQL的。
自然它也是有缺点的,我们都知道内存相比较硬盘,肯定是小的多的,所以使用Redis作数据库相比较MySQL,存储的数量是比较小的。
那么有没有方式做到效率又快,存储的数据又多呢?典型的方案就是,将Redis和MySQL进行结合,将Redis作为MySQL的缓存,也就是使用Redis存放热点数据,相当于作为一段缓冲区。但是也有一些其他的代价,比如MySQL和Redis之间的数据同步。
3. 什么是分布式系统(也是一种处理大量数据时的处理方式)
3.1 单机架构
我们先来看看一个单机架构,就是只有一台服务器,这个服务器负责所有的工作。
初期,我们需要利用我们精干的技术团队,快速将业务系统投⼊市场进行检验,并且可以迅速响应变化要求。但好在前期用户访问量很少,没有对我们的性能、安全等提出很高的要求,而且系统架构简单,无需专业的运维团队,所以选择单机架构是合适的。
如果用户量和数据量都不高的话,那么一台主机就可以完成高并发和数据存储,而当用户量和数据量越来越高的时候,一台主机不足以支撑的时候,就需要引入更多的主机来分摊压力,这就是我们所说的分布式系统,也就是使用多台主机进行服务。
但是引入分布式系统,是一种万不得已的决策,一旦引入分布式,那么系统的复杂度就会大大增加,不是双倍,而是指数的程度增加,bug出现的概率也会增加……
3.2 数据库与应用服务分离
随着系统的上线,我们不出意外地获得了成功。市场上出现了⼀批忠实于我们的用户,使得系统的访问量逐步上升,逐渐逼近了硬件资源的极限,同时团队也在此期间积累了对业务流程的⼀批经验。面对当前的性能压力,我们需要未⾬绸缪去进行系统重构、架构挑战,以提升系统的承载能力。但由于预算仍然很紧张,我们可以选择将应用和数据分离的做法,可以最小代价的提升系统的承载能力。