redis的大致认识

一.认识Redis

    它是开源的

    特点:①存储数据 :在内存中存储数据

              ②被当成一个数据库:MySql最大的问题在于访问速度比较慢,很多互联网中对性能的要求比较高,redis可以被作为数据库(因为它比较快)和MySql相比最大的劣势是存储空间小

              ③消息中间件:redis的初心就是用来作为一个“消息中间件”(消息队列)的分布式系统下的生产者消费者模型(当前直接使用Redis作为消息中间件(业界有更多更专业的消息中间件使用))

             ④Redis是在分布式系统中,才能发挥威力的(如果是单机程序,直接通过变量存储数据的方式,是比使用Redis更优的选择)

             ⑤Redis就是基于网络,把自己内存的变量给别的进程,甚至别的主机的进程使用

存储空间大,速度快的方法:把Redis和MySQL结合使用使用“二八原则”(20%的热点数据能够供应80%的请求)(如果这样的话,这里系统的复杂程度会大大提升,如果数据修改,还涉及到Redis和MySql数据同步的问题)

二.分布式系统:

这里的一个电商网站

(1)单机架构(应用程序+数据库服务器)s

应用服务器:写Http服务器(Java中的Spring)

数据库服务器:MySQL是一个客户端服务器结构的程序(本体是MySQL 用来存储和组织数据)

单机程序中也可以把数据库服务器也去掉,就只用应用服务器负责业务和数据(只是比较麻烦)

问题: 一台主机上的资源是有限的,(1.CPU 2.内存  3.硬盘  4.网络。。。)服务器的每次请求都需要消耗上述一些资源,如果同一时刻处理的请求多了,就可能会导致某个硬件资源不够用。无论是那个方面不够用,都可能会导致服务器处理请求的时间变长,甚至于处理出错

解决:1.开源:增加更多的硬件资源(扩展主机,增加主机(分布式系统))

           2.节流:软件上优化(需要通过性能测试,找到那个环节出现了瓶颈,对症下药)

(2)应用服务和数据库服务分离:应用程序和数据库服务器分别放到不同的主机上部署

                  

应用服务器:里面可能包含很多业务逻辑,可能会吃CPU和内存

数据库服务器:需要更大的硬盘空间,更快的数据访问速度(可以配置更大的硬盘的服务器,甚至还可以上SSD硬盘)固态硬盘

(3)引入负载均衡,应用服务器=>集群:通过负载均衡,把请求均匀的风阀给集群的每个应用服务器

                            

注意:

①负载均衡:就像公司的领导一样,把任务分配给每个员工

②应用服务器可能回比较吃CPU和内存,如果CPU和内存吃没了,应用服务器就顶不住了,就要引入更多的服务器来解决上诉问题(这里看起来是两个,实际上会更多)

③用户的请求,先达到负载均衡/网关服务器(单独的服务器)

④负载均衡承担了所有的请求,跟应用服务器相比,要承担更多的请求,但是它更像是一个领导,起着组织的作用,执行者是应用服务器

⑤也有可能负载均衡承受不了那么多的请求,因此就需要引入多个负载均衡服务器

(4)增加应用服务器确实能够处理更高的请求量,但是随之存储服务器要承担的请求量也随之变多了

于是就引入了读写分离:

注意:①总服务器一般只有一个,从服务器有多个(一主多从),实际的应用场景,读比写多

           ②同时从数据库中通过负载均衡的方式,让应用服务器进行访问

(5)引入缓存,冷热数据分离

注意:①数据库有个天然的问题,就是响应慢,因此把数据分成冷热数据,把热点的数据放到缓存中,把冷点的数据放到数据库中,缓存的访问数据要比数据库快的多

          ②遵循二八原则 20%的数据能够支持80%的访问量

          ③MySQL中存储的仍然是完整的数据全量

(6)引入分布式系统不仅要处处理更多的请求量(并发量),而且要能够存储更多的数据量

所以,如果数据每张表的数据量很大,就需要分库分表

(7)微服务架构:

注意:之前的应用服务器,一个服务器里面有很多的业务,这就会导致这一个服务器的代码变得越来越复杂,为了方便就把这样一个复杂的服务器拆分成功能更多,功能单一的,但是更小的服务器(微服务器)

引入微服务器解决了人的问题,付出的代价?

1.系统的性能下降(要想保证性能不下降太多,只能引入更多的机器,更多的硬件资源=》充钱)

     拆出来的更多的服务,多个功能之间要更依赖网络通信,网络通信速度很可能比硬盘慢

 2.系统复杂程度提高,可用性受到影响(服务器多了,出现问题的概率就更大了,这就需要一系列的手段来保证系统的可用性(更丰富的监控报警,以及配套的运维人员))

微服务器的优势:

 1.解决了人的问题

 2.使用微服务器,可以更方便于功能的复用

 3.可以给不同的服务器进行不同的部署

应用(Application)/系统(System):一组应用就是一个/组服务器程序

模块(Module)/组件(Component):一个应用,里面有很多个功能,每个独立的功能就可以被称为是一个模块/组件

分布式(Distributed):引入多个主机/服务器,协同配合完成一系列的工作

集群(Cluster):引入多个主机/服务器,协同配合完成一系列的工作

主(Master)/从(Slave):分布式系统中,比较典型的结构

多个服务器的节点,其中一个主,另一个的是从,从节点的数据要从主节点中同步过来

中间件(Middleware):和业务无关的服务(功能更通用的服务)

1.数据库  2.缓存  3.消息队列。。。。

可用性:系统的可用的时间/总时间(4个9即系统可以提供99.99%的可用性,5个9是99.999%)

响应时长(Response Time Rt):衡量服务器的性能

吞吐和并发:衡量系统处理请求的能力,衡量性能的一种方式

三.Redis的一些特性(优点):

注意:MySQL主要是通过“表”的方式来存储组织数据的“关系型数据库”

          Redis主要是通过“键值对”的方式来存储组织数据的“非关系型数据库”

key都是string

value 就是一些数据结构(像strings,hashes,lists,sets,sorted sets,streams,and more)

1.In-memory data structures :在内存中存储数据(MySQL主要是通过“表”的方式来存储组织数据的  “关系型数据库”   Redis只要是通过“键值对”的方式来存储组织数据的 “费关系型数据库”)

2.Programmablity:编程语言(针对Redis的操作,可以直接通过简单的交互式命令进行操作,也可以通过一些脚本的方式,批量执行一些操作(可以带有一些逻辑))

3.Extensibility:可以在Redis原有的功能的基础上进行扩展,Redis提供了一组API(通过C,C++,Rust这几种编程语言进行扩展,让Redis支持更多的数据结构以及更多的命令)

4.Persistence:持久化,Redis把数据存储在内存上,因为内存的数据是容易丢失的(进程退出/系统重启),Redis会把数据存储在硬盘上,内存为主,硬盘为辅(硬盘相当于对内存数据备份了一下)如果Redis重启了,就会在重启是加载硬盘中备份的数据,是Redis的内存恢复到重启前的状态

5.Clustering:Redis作为分布式系统中的中间件,能够支持集群是很关键的,这个水平扩展,类似于“分库分表”     一个Redis能存储的数据是有限的(内存中间有限)引入多个主机,部署多个Redis节点,每个Redis存储数据的一部分

6.High avaliable:高可用=>冗余/备份      

Redis自身也是支持“主从”结构的,从节点相当于主节点的备份

Redis快的原因:

1.Redis数据在内存中,就比访问硬盘的数据库要快的多

2.Redis的核心功能逻辑都比较简单,核心功能都是比较简单的操作内存的数据结构

3.从网络的角度上,Redis使用了IO多路复用的方式(epoll)(使用一个线程,管理多个Socket)

4.Redis使用的是单线程模型(虽然更高版本的Redis引入的多线程),这样的单线程减少了不必要的线程之间的竞争开销

注意:多线程提高效率的前提是CPU密集型的任务,使用多个线程就可以充分利用CPU多核资源,但Redis的核心任务,只要是操作内存的数据结构,不会吃很多的CPU资源

5.Redis是使用C语言开发的(只是网上这么说的有很多,但MySQL也是C语言开发的)

四.Redis的使用场景

1.把Redis当成了数据库:大多数的情况下,考虑到数据存储,优先考虑的是大,但是仍然有些场景会考虑“快”  (比如:搜索引擎->广告搜索(商业搜索)对性能的要求非常高,搜索系统重没有用到过想MySQL这样的数据库,把所有需要检索的数据都存储在内存中,就使用类似于想Redis这样的内存数据库来完成的。使用这样的内存数据库,存储大量的数据,就需要很多硬件资源,就需要充值了)

2.二八原则:把热点的数据都拎出来,存储在Redis中,Redis存储的是部分数据,全量数据还是以MySQL为主的,哪怕是Redis中的数据没了,也可以从MySQL中加载回来

3.消息队列:基于这个可以实现一个网络版本的生产者 消费者模型

4.对话:cookie(只是在浏览器这边存储了一个用户身份标识)=>实现用户身份信息保存  需要你session(这里真正存储了用户的数据信息)的配合

1.想办法让负载均衡,把同一个用户的请求始终打到同一个机器上(不能轮询了,而是要通过userId之类的方式来分配机器)

2.把会话数据单独拎出来,放到一组独立的机器上存储(Redis)

(应用程序重启了,会话不丢失)

五.Redis客户端

Redis也是一个客户端-服务器 结构的程序

Redis的客户端有多种形态:

1.自带命令行客户端(redis-cli)

2.图形化界面的客户端(桌面程序,web程序)(这样的图形化程序,依赖Windows系统)

3.基于Redis的API自行开发客户端,非常类似以MySQL的C语言API和JDBC

这里说到的Redis快,是相对于MySQL这样的关系型数据库来说的

如果是直接更内存中的操作变量相比的话,就没有优势了,甚至更慢了

  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值