用来在内存中存储数据
定义变量不就是在内存中存储数据吗?为什么还需要
redis来向内存中存储数据?这不是绕了一个圈嘛?
redis 更优的选择由于我们现在很多的系统都是分布式的系统,在分布式系统中,若想让多个服务器都共享同一份数据,又想这个数据存在于内存中,此时使用 redis 就是一个可选的选择了
对于存储数据来说,直接存在变量中,往往是更快速、更方便的选择,但是若放在分布式系统中,直接定义变量就不行了
redis 就是针对上述的功能点进行了封装,既然没法突破进程的隔离性直接进行访问,那就使用“进程间通信“,网络 就是其最主流方案网络既可以让同一个主机间的进程进行通信,而且还可以让不同主机之间的进程进行通信,因此,redis 就相当于是基于网络,能够把自己内存中的的变量给别的进程、甚至别的主机的进程进行使用
redis 还被一些人当做数据库来使用
常见的
MySQL最大的问题在于:访问的速度比较慢。 在很多互联网产品中,对性能要求是很高的,“慢”有时候就是一个很大的问题
redis 被当做数据库来使用的优点就在于:快,快很多
MySQL 的数据是在硬盘上的
redis 和 MySQL 相比,最大的劣势是:存储空间是有限的
MySQL 是更好的选择,同时 MySQL 相比于 redis 来说,提供了更丰富的功能那有没有存储空间又大,访问速度又快的方案呢?
redis 和 MySQL 结合起来MySQL 来存储这就是缓存的机制,不过这样系统的复杂程度就会大大提高。而且,如果数据发生修改,还会涉及到 redis 和 MySQL 之间的数据同步问题
redis 的初心,就是作为一个“消息中间件”(消息队列),实现分布式系统下的生产者消费者模型
但当前很少会直接使用 redis 作为消息中间件,因为业界中有更多更专业的消息中间件可以使用
Application)/系统(System)
一个应用,就是一个/组服务器程序
Module)/组件(Component)
一个应用,里面有很多的功能,每个独立的功能,就可以称为是一个模块/组件
Distributed)
引入多个主机/服务器,协同配合完成一系列的工作(物理上的多个主机)
Cluster)
通过多个服务器/主机,去协同配合完成一系列的工作(逻辑上的多个主机,一个服务器上部署多个服务器程序,这些服务器程序之间也是通过网络进行通信,看上去也是和多个主机没什么区别,但在硬件上还是一个主机)
Master)/从(Slave)
分布式系统中,一种比较典型的结构。比如现在有多个服务器节点,其中一个是主,另外的是从。这个时候从节点就是主节点的跟班(从节点的数据要从主节点同步过去),
Middleware)
一组和业务无关的服务(功能更通用的服务,数据库、缓存、消息队列…)
Availability)
系统整体可用的时间÷总的时间(这个结果越高越好)
一个系统的第一要务
Response Time RT)
衡量服务器的性能,越小越好,和具体服务器要做的业务密切相关
Throughput)vs 并发(Concurrent)
衡量系统的处理请求的能力,是衡量性能的一种方式
千万不要把所谓的“分布式”想的太复杂,太高大上…

此处假定是一个“电商网站”,用户通过网络访问这个服务器,其分为两个部分:
C++ 里面的 cpp-hyyplibJava 里面的 SpringHTTP 服务器的MySQL MySQL 是一个“客户端-服务器“结构的程序,本体是 MySQL 服务器(存储和组织数据的部分)HTTP 应用服务服务器作为客户端,去读写数据库服务MySQL 服务器,然后 MySQL 查找数据之后将数据返回给应用程序,最后应用程序通过 HTTP 协议,最终将信息返回给用户绝大部分的公司的产品都是这种单机架构。因为现在的计算机硬件发展速度是非常快的,这就意味着哪怕我们只有一台主机,这一台主机的性能也是非常高的,可以支持非常高的并发,非常大的数据存储
如果业务进一步增长,用户量和数据量都水涨船高,当一台主机难以应付的时候,就需要引入更多的主机,引入更多的硬件资源,就需要使用分布式系统了
一台主机的硬件资源是有上限的,包括但不限于一下几种:
如果我们真的遇到了这样的服务器不够用的场景,我们可以:
当一台主机扩展到极限了,但是还不够,就只能引入多台主机了
但不是说买来的新的机器直接就可以解决问题,也需要软件上做出对应的调整和适配。当引入多台主机了,我们的系统就可以称为“分布式系统”了
引入分布式系统是万不得已的,系统的复杂程度会大大大提高(指数增长),这样出现 bug 的概率就越高、加班的概率就越大、丢失年终奖的概率也随之提高