【Redis】壹 —— Redis 先容

打印 上一主题 下一主题

主题 989|帖子 989|积分 2967

文章目次:
媒介
一、熟悉Redis
1. Redis
用途
作为数据库
作为流引擎
二、服务端高并发分布式结构演变
1. 单机架构
2. 应用数据分离架构
3. 应用服务集群架构
4. 读写分离 / 主从分离架构
5. 冷热分离 —— 引入缓存
6. 分库分表
7. 微服务架构
8. 概念补充
三、Redis的特性
四、Redis的应用场景
1. 作为数据库
2. 作为缓存 / session存储
3. 作为消息队列


媒介

开始了对Redis的学习,通过博客对这一段时间的学习进行总结、分享!
一、熟悉Redis

我们先来看一下Redis官方对于Redis的描述

此中的关键词:“in - memory data store” ——> 在内存中存储数据
我们之前写的单机程序,都是通过变量来在内存中存储数据;
而对于分布式系统,多个历程同时访问一个变量,就大概会引起线程安全问题,所以在分布式系统中,使用Redis在内存中存储数据;
由于历程具有隔离性,每个历程的内存空间是分隔开的,使用网络,可以进行历程之间的通信;
1. Redis

Redis —— Remote Dictionary Server
用途

基于网络,把自己内存中的变量给别的历程/别的主机的历程使用
作为数据库

Redis也可以作为数据库来使用,那Redis相较于一般数据库(比方:MySQL、Oracle、SQL Server)有什么优点呢???
最大的优点,就是 —— 快!!
由于Redis是在内存中存储数据,而数据库是在硬盘中存储数据,程序访问内存的速度远远大于访问硬盘的速度,但也正因云云,Redis作为数据库也有一定的缺点 —— 存储空间小
关于速度,这里有谷歌公司给出的各层级硬件的执行速度供大家参考

那有没有方法做到又大又快呢??当然有!那便是——
将数据库和Redis结合起来,将Redis当作数据库的缓存(Cache),那缺点便是,程序的复杂性提高了。。。
作为流引擎

在官方先容中,尚有一个关键词 :Streaming Engine —— 流引擎
作用:作为一个消息中间件,消息队列,分布式系统下的生产者消费者模子
二、服务端高并发分布式结构演变

上文提到“单机程序”、“分布式系统”,那什么是单机程序?什么是分布式系统?单机程序又是怎样一步步演化为分布式系统的呢?
1. 单机架构

只有一台服务器,这台服务器负责所有的工作

此中:


  • 应用服务:服务器程序——>写HTTP服务
  • 数据库服务:数据库服务器
缺点:业务进一步增长之后,一台服务器难以应付,一台主机的硬件资源是有限的(硬件资源包括但不限于:CPU、内存、硬盘、网络……)
解决方式:开源节流


  • 开源 ——> 引入更多的硬件资源 ——> 主机能增加的硬件资源也是有上限的 ——> 引入多台主机 ——> 程序上进行适配 ——> 分布式系统
  • 节流 ——> 优化,通过性能测试找出程序瓶颈,进行优化
2. 应用数据分离架构

应用服务和数据库服务在不同主机上完成

此中:
可以针对不同服务器的特点针对性的配置资源 —— 更高的性价比 :


  • 应用服务器 —— 包罗很多业务逻辑 —— 更好的CPU和内存
  • 数据库服务 —— 更大的硬盘空间和更快的数据访问速度 or 固态硬盘(SSD)
3. 应用服务集群架构

引入更多的服务器节点

此中:
负载平衡器(网关):

  • 也是一个单独的服务器
  • 用户的请求先到达负载平衡器,由负载平衡器将请求分发给不同的应用服务器
  • 负载平衡算法:最简单 —— 轮询算法(Round Robin) ——> 轮着来
  • 对请求量的负担能力:

    • 负载平衡器对请求的负担能力远远超越应用服务器
    • 如果当前网关蒙受不了了,引入更多的负载平衡器 ——> 更多机房

4. 读写分离 / 主从分离架构

一主多从分离

5. 冷热分离 —— 引入缓存

引入缓存来存储被频仍访问的数据

此中:


  • 热门数据:被频仍访问到的数据
  • Redis的应用场景就是缓存服务器
  • 数据库中仍然存储的是全量数据,缓存服务器中存储的是热门数据的缓存
二八原则:20%的数据量可以支持80%的访问量
6. 分库分表

对数据进行拆分

7. 微服务架构

对业务进行拆分 —— 服务器的种类和数量增加

为了方便代码的维护,可以把复杂的服务器划分为更多的、功能单一、更小的微服务器
8. 概念补充



  • 应用/系统

    • 应用:一个/组服务器程序

  • 模块/组件

    • 一个程序实现了许多功能,每个独立的功能就叫一个模块/组件

  • 分布式(Distributed)

    • 引入多个主机/服务器,协同配合完成一系列的工作
    • 物理层面多个主机

  • 集群(Cluster)

    • 引入多个主机/服务器,协同配合完成一系列的工作
    • 逻辑层面多个主机

  • 主从(Master / Slave):

    • 分布式系统中一种典型的结构
    • 多个服务器,一个是主节点,其他的是从节点,从节点要从主节点同步数据

  • 中间件(Middleware)

    • 和业务无关的服务(功能更通用的服务)

  • 可用性(Availablity)

    • 考察单位时间段内,系统可以正常提供服务的概率/期望。

  • 相应时间(Response Time RT)

    • 指用户完成输入到系统给出相应的时间

  • 吞吐率(Throughput)/并发量(Concurrent)

    • 权衡服务器处理请求的能力的

三、Redis的特性

1. 在内存中存储数据
不同于关系型数据库通过表来构造数据,Redis是通过键值对的方式来构造数据(非关系型数据库)
key:只能是string类型
value:可以是string、list、hash、set......类型
2. Programmability
针对Redis的操作,可以直接通过简单的交互式下令进行操作,也可以通过一些脚本的方式,批量进行一些操作
3. Extensibility
可以在Redis原有的功能底子上再进行扩展,Redis提供了一组API
4. Persistence 长期化
Redis是在内存中访问数据,而内存中的数据是易丢失的,Redis会将数据存储在硬盘中,当Redis重启了,就会在重启时加载硬盘的数据规复到重启之前的状态
5. Clustering
Redis作为一个分布式系统中的中间件,可以或许支持集群
Redis可以水平扩展(相当于对数据库进行分库分表),可以引入多个主机,摆设多个Redis节点,每个Redis存储数据的一部门
6. High Availability 高可用
Redis自身也支持“主从”结构,从节点相当于主节点的备份
四、Redis的应用场景

1. 作为数据库

大多数环境下,对于数据库的要求优先考虑是“大”,但也有一些环境,对于数据库的要求是“快”,这种环境下,就可以使用Redis作为数据库
例:广告搜刮 / 贸易搜刮 ——> 对性能要求很高,就必要把必要检索的数据存储在内存中
2. 作为缓存 / session存储

作为缓存
        对数据进行冷热分离
session存储
        cookie通过session配合实现用户身份信息的保存
                cookie:浏览器存储的用户的身份标识(SessionId)
                session:服务器存储的用户数据
        session一般存储与应用服务器中,而在分布式系统中:存在多个应用服务器,用户通过登录,其session存在一个应用服务器中,下次请求如果被负载平衡器分配到另一个应用服务器中,新的服务器中没有保存改用的session,就必要重新登岸

解决方案:


  • 让负载平衡器,将一个用户的请求分配给同一个服务器(不能接纳轮询了)
  • 让Redis存储session,应用服务器在读取会话通过访问Redis服务器,如许一个用户的请求就可以被分配到任意的应用服务器上了;当应用程序重启时,会话不丢失。

3. 作为消息队列

基于这个可以实现一个网络版本的生产者-消费者模子
对于分布式系统来说,服务器和服务器之间偶然候也必要用到生产者-消费者模子
优势:
        1. 解耦合
        2. 削峰填谷

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

兜兜零元

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表