Redis——初识Redis

news2024/12/23 14:33:18

初识Redis

  • Redis
    • 认识Redis
  • 分布式系统
    • 单机架构
    • 为什么要引入分布式
    • 理解负载均衡
    • 数据库的读写分离
      • 引入主从数据库
    • 引入缓存
    • 数据库分库分表
    • 业务拆分——微服务
    • 常见概念了解
  • Redis背景介绍
    • 特性
    • 应用场景
    • Redis不能做的事情
    • Redis客户端
      • redis客户端的多种形态

Redis

认识Redis

  • 存储数据
  • 在内存中

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

Redis就是基于网络可以吧内存中的变量给别的进程,甚至别的主机的进程进行使用

Mysq和Redis

  • Mysql最大的问题在于,访问速度比较慢(用硬盘存的),很多互联网产品中,对与性能要求很高
  • Redis也可以作为数据库使用,速度快(用内存存的)
  • 两个用到的功能和使用场景不一样
  • Redis相对于MySql最大的劣势——存储空间是有限的,且Mysql提供的增删改查的功能更多

有没有一种方案可以 存储空间又大,速度又快的?——典型方案:可以吧Redis和Mysql结合起来使用

  • 用Redis来作为Mysql的Cache

二八原则 :20%的热点数据,能满足80%的访问需求

代价——系统的复杂度大大提升,而且如果数据发生修改,还涉及到Redis和Mysq的数据同步问题
在这里插入图片描述

Redis的初心,最初是用来作为分布式系统下来作为一个“消息中间件”的(消息队列)分布式系统下的生产者消费者模型

当前很少会直接随时用Redis作为消息中间件(业界有更多更专业的消息中间件使用)

分布式系统

单机架构

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

在这里插入图片描述

如果业务进一步增长,用户量和数据流都水涨船高,一台主机难以应付的时候,就需要引入更多的主机,引入更多的硬件资源——这个时候就要过渡到分布式系统中。

为什么要引入分布式

一台主机的硬件资源是有上限的(CPU,内存,硬盘,网络,...),服务器每次收到一个请求都需要小号上述的一些资源,如果同一时刻处理的请求多了,此时资源就不够用了,无论是哪一方面不够用了,都可能会导致服务器处理的请求时间变长,甚至处理出错

在这里插入图片描述

一旦引入多台主机了,咱们的系统就可以称为“分布式系统”

  • 引入分布式,是万不得已的无奈之举,系统的复杂程度会大大提高,随之出现Bug的概率也回变高
应用服务器存储服务器
里面可能会包括很多的有业务逻辑,可能会吃CPU和内存需要更大的硬盘空间,更快的数据访问速度,可以配置更大硬盘的服务器,甚至可以上SSD硬盘(固态硬盘) 【机械硬盘,便宜,慢】【固态硬盘,贵,快】

应用服务器可能会比较吃CPU和内存,如果把CPU或者内存吃没了,此时应用服务器就扛不住了,这时候就要引入更多的应用服务器

理解负载均衡

负载均衡器,就相当于领导,给员工分配工作,减轻自己的负担
应用服务器,就相当于员工,执行领导的分配,分担领导的工作
(从上往下)负载均衡器(从上往下)
应用服务器应用服务器应用服务器
存储服务器

对于负载均衡器来说,有很多的 负载均衡 具体的算法比如轮询等,对于请求量的承担能力,要远超应用服务器

数据库的读写分离

当负载均衡器的负担增加后,可以增加应用服务器来处理请求量,但是随之存储服务器要承担的请求量也就增多了,这时候该怎么办呢?

引入主从数据库

实际的应用场景中,读的频率是比写的频率要高的!所以主服务一般是一个,只负责写,从数据库可以有多个,只负责写,同时从数据库通过负载均衡的方式,让应用服务器进行访问

引入缓存

数据库有个天然的问题,响应速度是更慢的所以可以把数据区分“冷热”,热点数据放到缓存中~缓存的访问速度往往比数据库快很多。

20%的数据,能够支持80%的访问量

引入一个缓存服务器而这个缓存服务器,也就是Redis的主要应用场景,而缓存想要快,就要付出代价,也就是存储空间小


数据库分库分表

引入分布式系统,不光要能够去应对更高的请求量(并发量),同时也要能够应对更大的数据量,这时候就会出现一台服务器空间不够用,存不下数据,需要多台主机来存储。

针对数据库进行进一步拆分: 分库分表

  • 分库:本来一个数据库服务器,这个数据库服务器上有多个数据库(database),现在就可以引入多个数据库服务器,每个数据库服务器存储一个或者一部分数据库
  • 分表:如果一个表特别大,大到一台主机存不下,也可以针对表进行拆分
  • 具体分库分表如何实践?还是要结合实际的业务场景来展开

业务拆分——微服务

什么叫微服务—— 之前的应用服务器,一个服务器程序里面做了很多的业务,这就可能会导致一个服务器的代码变得越来越复杂,为了更方便于代码的维护,就可以把这样一个复杂的服务器,拆分成更多的,功能更单一,但是更小的服务器

微服务的本质是在解决“人”的问题,当应用服务器复杂了,势必就需要更多的人来维护,当人多了,就需要配套的管理,把这些人组织好,划分组织结构,分成多个组,就需要进行分工,按照功能,拆分微多组微服务,有利于上述人员组织结构的分配(大厂)

微服务的缺点:

  1. 系统的性能下降,网络通信的速度可能是比硬盘还慢的(现在又万兆网卡,读写速度已经超过硬盘读写)
  2. 系统复杂程度更高,可用性受到影响,服务器更多了,出现问题的概率也变大了,这就需要一系列的手段来保证系统的可用性

微服务的优势:

  1. 解决了人的问题
  2. 使用微服务,可以更方便于功能的复用
  3. 可以给不同的服务进行不同的部署

常见概念了解

  • 应用/系统:一个应用,就是一个/组服务器程序
  • 模块/组件:一个应用,里面有很多个功能,每个独立的功能,就可以称为是一个模块/组件
  • 分布式:引入多个主机/服务器,协同配合完成一系列工作
  • 集群:引入多个主机/服务器,协同完成一系列工作
  • 中间件:和业务无关的服务(数据库,缓存,消息队列)
  • 可用性:系统整体可用的时间/总的时间(360天/365天=>可用性)

Redis背景介绍

Redis的一些特性(优点)

Mysq主要是通过“表”的方式来存储组织数据的,“关系型数据库”

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

特性

  • 在内存中存储数据
  • 针对Redis的操作,可以直接通过简单的交互式命令进行操作,也可以通过一些脚本的方式,批量执行一些操作(可以带有一些逻辑)
  • 可以在Redis原有的功能的基础上再进行扩展,Redis提供了一组API ,可以支持(c,c++,rust等语言)拓展
  • 持久化:Redis把数据存储在内存上和硬盘上,以内存为主,硬盘为辅(硬盘相当于对内存的数据备份了一下),如果Redis重启了,就会在重启时加载硬盘中的备份数据使Redis的内存恢复到重启前的状态
  • 集群:Redis能存储的数据是有限的(内存空间有限),引入多个主机,部署多个Redis节点,每个Redis存储数据的一部分
  • 高可用:=> 冗余/备份 ————Redis自身支持“主从”结构,从节点相当于主节点的备份
  • 速度快:为什么快?1. Redis数据在内存中,就比访问硬盘的数据库,快很多 2. Redis核心功能都是比较简单的逻辑 3.从网络角度上,Redis使用了多路复用的方式(epoll) 4. Redis使用的是单线程模型,减少了不必要额度线程之间的进程开销 5.Redis是使用C语言开发的,所以就快(? 同样是数据库,Mysql也是C语言开发的)
多线程提高效率的前提是,CPU密集型的任务,使用多个线程可以充分利用CPU多核资源
但是Redis的核心任务,主要就是操作内存的数据结构,不会吃很多CPU

应用场景

  1. 当做数据库(对访问速度要求快,实时性高),如搜索引擎->广告搜索(商业搜索)
  2. 作为缓存——>Redis存储部分数据,全量数据以Mysql为主,哪怕Redis数据没了,还可以从mysql这边再加载回来
  3. 会话
  4. 消息队列(服务器)(不是Linux进程间通信的那个消队列)——>基于这个可以实现以一个网络版本的生产者消费者模型;如果当前场景中,对于消息队列的功能依赖的不是很多,并且又不想引入额外的依赖了,Redis可以作为一个选择。

Redis不能做的事情

  • 存储大规模数据

Redis客户端

首先,要知道Redis也是一个客户端-服务器结构的程序(Mysql)

客户端和服务器((本体)负责存储和管理数据)之间,通过网络通信,可以在同一个主机上,也可以在不同主机上。

redis客户端的多种形态

  1. 自带了命令行客户端 redis-cli
redis -cli
或者
redis -cli -h 127.0.0.1 -p 6379
  1. 图形化界面的客户端(桌面程序,web程序)
  2. 基于Redis的API自行开发客户端【工作中的主要形态】

​ 非常类似于mysql的C语言API和JDBC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2123304.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

flow model

https://www.youtube.com/watch?vuXY18nzdSsMcomponent by component(auto regresive)的生成模型存在的问题(生成的顺序,生成的速度慢);variational auto-encoder存在的问题(optimize a maxihood lower bound,是一个近似);genera…

【机器学习】隐马尔可夫模型的基本概念和应用领域以及在NLP中如何实现(含python代码)

引言 隐马尔可夫模型(Hidden Markov Model,HMM)是一种统计模型,用于描述一个含有隐含状态的马尔可夫过程 文章目录 引言一、隐马尔可夫模型的基本概念1.1 HMM的基本组成1.2 HMM的三个基本问题1.3 解决HMM问题的算法1.4 在python中…

Linux 安装神州通用数据库 ShenTong7.0.8_342.92_linux64

Linux 安装神州通用数据库 ShenTong7.0.8_342.92_linux64 1、准备工作2、安装数据库3、启停数据库4、后续步骤 💖The Begin💖点点关注,收藏不迷路💖 在Linux环境下安装神州通用数据库(ShenTong)是一个相对直…

如何通过 Apache Camel 将数据导入 Elasticsearch

作者:来自 Elastic Andre Luiz 使用 Apache Camel 将数据提取到 Elasticsearch 的过程将搜索引擎的稳健性与集成框架的灵活性相结合。在本文中,我们将探讨 Apache Camel 如何简化和优化将数据提取到 Elasticsearch。为了说明此功能,我们将实…

5G网络建设

题目描述 现需要在基城市进行5G网络建设,已经选取N个地点设置5G基站,编号固定为1到N,接下来需要各个基站之间使用光纤进行连接以确保基 站能互联互通,不同基站之间假设光纤的成本各不相同,且有些节点之间已经存在光纤…

8个动态着陆页案例及最佳实践

动态着陆页是一种让市场营销人员在不必因成百上千变量而抓狂的情况下,利用个性化力量的绝佳方式,从而让他们能够扩大努力并增长业务。使用像光年AI这样的平台,可以更方便地实现这一目标。 在这篇文章中,您将了解到: …

非监督式机器学习:群集

聚类分析是一种非监督式机器学习形式,在此形式下,基于观察值的数据值或特征的相似性,将观察值分组到群集中。 这种就是非监督式机器学习,因为它不使用先前已知的标签值来训练模型。 在聚类分析模型中,标签是群集&#…

【Nacos】健康检查与环境隔离

1. 健康检测 1.1 两种健康检查机制 Nacos作为注册中心,需要感知服务的健康状态,才能为服务调用方提供良好的服务 Nacos 中提供了两种健康检查机制: 1. 客户端主动上报机制 客户端通过心跳上报方式告知服务端(nacos注册中心)健康状态,默认心跳间隔5秒:nacos会在超过15秒未收…

内网穿透之EW使用、判断服务器是否出网

环境搭建 使用的是下面文章的环境 记一次学习--内网穿透-CSDN博客 ew代理 然后同样通过thinkphp漏洞写入文件,然后通过蚁剑连接 然后上传ew的Linux版本,然后加权执行 一层代理 正向代理 设置正向代理(在ubuntu上)&#xff0…

React 发现无webpack相关的配置的目录,使用eject进行创建, 安装插件需要进行配置

React 发现无webpack相关的配置的目录,进行创建, 安装插件需要进行配置 react脚手架将webpack相关的配置隐藏起来了,如果想要看到webpack的配置可以执行package.json文件中的一个脚本:“eject”: “react-scripts eject”&#x…

流媒体之HLS协议(其三)

欢迎诸位来阅读在下的博文~ 在这里,在下会不定期发表一些浅薄的知识和经验,望诸位能与在下多多交流,共同努力! 江山如画,客心如若,欢迎到访,一展风采 文章目录 前期博客参考书籍一、HLS协议简…

TwinCAT3 实时核中ADS实现C++ server、clinet数据传输

一、基本概念 ADS :Automation Device Specification,ADS设备间进行通信的协议规范。协议定义了ADS device之间如何寻址对方、ADS device之间可以执行哪些操作、执行这些操作需要哪些参数,以及操作完成后如何返回结果等。从编程角度看&#…

SVM 监督学习

一、分类问题 利用一条直线分类存在很多问题 二、SVM 支持向量机 其核心思想是通过在特征空间中找到一个最优的超平面来进行分类,并且间隔最大。分类面尽可能远离样本点,宽度越大越好。 适用于中小型复杂数据集的分类。 三、硬间隔和软间隔 硬&#x…

Android Studio -> Android Studio 获取release模式和debug模式的APK

Android Studio上鼠标修改构建类型 Release版本 激活路径:More tool windows->Build Variants->Active Build Variant->releaseAPK路径:Project\app\build\intermediates\apk\app-release.apk Debug版本 激活路径:More tool w…

linux上使用rpm的方式安装mysql

1.从mysql官网上下载需要的版本,根据操作系统版本,CPU架构,下载让rpm bundle,这个版本是个完整版,包含其他所有版本 上传到服务器的一个目录,进行解压 执行tar -xvf mysql*.tar tar -xvf mysql*.tar 2.卸载老版本m…

【Canvas与电脑桌面】用六角回旋镖铺满一个平面(1920*1080)

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>六角回旋镖桌面1920x1080</title><style type"text/cs…

动手学深度学习(pytorch)学习记录27-深度卷积神经网络(AlexNet)[学习记录]

目录 创建模型读取数据集训练AlexNet AlexNet 是由 Alex Krizhevsky、Ilya Sutskever 和 Geoffrey Hinton 在 2012 年提出的深度卷积神经网络&#xff0c;它在当年的 ImageNet 大规模视觉识别挑战赛&#xff08;ILSVRC&#xff09;中取得了显著的成绩&#xff0c;从而引起了深度…

动手学深度学习(pytorch土堆)-02TensorBoard的使用

1.可视化 代码使用了 torch.utils.tensorboard 将数据记录到 TensorBoard 以便可视化。具体来说&#xff0c;它将标量数据记录到目录 logs 中&#xff0c;使用的是 SummaryWriter 类。 代码分解如下&#xff1a; SummaryWriter("logs")&#xff1a;初始化一个 Ten…

常用的 git命令的使用

一. 简介 本文简单学习一下&#xff0c;在从远程仓库中拉取代码&#xff0c;或者向远程仓库提交代码时&#xff0c;经常用到的一些 git命令。 二. git的其他命令的使用 1. 重新提交代码的命令 当已经提交过一笔代码&#xff0c;并经过了 CI自动化编译通过。这时可能发现…

WebAPI(二)、DOM事件监听、事件对象event、事件流、事件委托、页面加载与滚动事件、client,offset

文章目录 一、 DOM事件1. 事件监听2. 事件类型(1)、鼠标事件(2)、焦点事件(3)、键盘事件(4)、文本事件 3. 事件对象(1)、获取事件对象(2)、事件对象常用属性 4. 环境对象 this5. 回调函数 二、 DOM事件进阶1. 事件流(1)、 捕获阶段(2)、 冒泡阶段(3)、 阻止冒泡(4) 、阻止元素默…