当前位置: 首页 > news >正文

Redis——初识Redis

初识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

相关文章:

Redis——初识Redis

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

Xshell or Xftp提示“要继续使用此程序,您必须应用最新的更新或使用新版本”

Xshell提示“要继续使用此程序,您必须应用最新的更新或使用新版本”,笔者版本是xshell 6 方法一:更改系统时间 对于Windows 10用户,首先找到系统日期,右键点击并选择“调整时间/日期”。将日期设定为上一年。完成调整后&#x…...

table用position: sticky固定多层表头,滑动滚动条border边框透明解决方法

问题:我发现,这个上下滑动有内容经过就会出现如图的情况。 解决的方法:用outline(轮廓)替代border,以达到我们想要的样式。 outline主要是在元素边框的外围设置轮廓,outline不占据空间,绘制于…...

基于飞桨paddle2.6.1+cuda11.7+paddleRS开发版的目标提取-道路数据集训练和预测代码

基于飞桨paddle2.6.1cuda11.7paddleRS开发版的目标提取-道路数据集训练和预测代码 预测结果: 预测影像: (一)准备道路数据集 下载数据集地址: https://aistudio.baidu.com/datasetdetail/56961 mass_road.zip …...

数学建模笔记—— 整数规划和0-1规划

数学建模笔记—— 整数规划和0-1规划 整数规划和0-1规划1. 模型原理1.1 基本概念1.2 线性整数规划求解1.3 线性0-1规划的求解 2. 典型例题2.1 背包问题2.2 指派问题 3. matlab代码实现3.1 背包问题3.2 指派问题 整数规划和0-1规划 1. 模型原理 1.1 基本概念 在规划问题中&am…...

[001-03-007].第26节:分布式锁迭代3->优化基于setnx命令实现的分布式锁-防锁的误删

我的博客大纲 我的后端学习大纲 1、问题分析: 1.1.问题: 1.锁的超时释放,可能会释放其他服务器的锁 1.2.场景: 1.如果业务逻辑的执行时间是7s。执行流程如下 1.index1业务逻辑没执行完,3秒后锁被自动释放。2.index…...

【Unity踩坑】为什么有Rigidbody的物体运行时位置会变化

先上图,不知你有没有注意过这个现象呢? 一个物体加上了Rigidbody组件,当勾选上Use Gravity时,运行后,这个物体的位置的值会有变化。这是为什么呢? 刚体由物理系统处理,因此它会对重力、碰撞等做…...

NGINX开启HTTP3,给web应用提个速

环境说明 linuxdockernginx版本:1.27 HTTP3/QUIC介绍 HTTP3是由IETF于2022年发布的一个标准,文档地址为:https://datatracker.ietf.org/doc/html/rfc9114 如rfc9114所述,http3主要基于QUIC协议实现,在具备高性能的同时又兼备了…...

秋招季!别浮躁!

好久没写了,今天兴致来了,众所周知我一旦想说话,就来这里疯狂写。 最近,我去了一家国企的研究院,听着是不是贼高大上,呵——这玩意儿把我分配到三级机构,我一个学计算机的,它不把我…...

Java的时间复杂度和空间复杂度和常见排序

目录 一丶时间复杂度 二丶空间复杂度 三丶Java常见排序 1. 冒泡排序(Bubble Sort) 2.插入排序(Insertion Sort) 3.希尔排序(Shell Sort) 4.选择排序(Selection Sort) 5.堆排序&am…...

Qt 学习第十天:标准对话框 页面布局

系统标准对话框 错误对话框 //错误对话框connect(createPro, &QAction::triggered, this, []{//参数1 父亲 参数2 标题 参数3 对话框内显示文本内容 。。。QMessageBox::critical(this, "报错!", "没加头文件!");}); 【运行结果】 信息对话框 co…...

体育数据API纳米足球数据API:足球数据接口文档API示例⑩

纳米体育数据的数据接口通过JSON拉流方式获取200多个国家的体育赛事实时数据或历史数据的编程接口,无请求次数限制,可按需购买,接口稳定高效; 覆盖项目包括足球、篮球、网球、电子竞技、奥运等专题、数据内容。纳米数据API2.0版本…...

[数据集][目标检测]高铁受电弓检测数据集VOC+YOLO格式1245张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1245 标注数量(xml文件个数):1245 标注数量(txt文件个数):1245 标注…...

Vuex:深入理解所涉及的几个问题

你好,我是沐爸,欢迎点赞、收藏、评论和关注。 一、Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 二、Vu…...

vue原理分析(六)研究new Vue()

今天我们来分析使用new Vue() 之前研究时,只是说是在创建一个实例。并没有深入进行研究 在vue的源码中找下Vue的构造函数 function Vue(options) {if (!(this instanceof Vue)) {warn$2(Vue is a constructor and should be called with the new keyword);}this.…...

滑动窗口+动态规划

前言:分析这个题目的时候,就知道要这两个线段要分开,但是要保证得到最优解,那么我们在选取第二根线段的时候,要保证我们第一根线段是左边最优解 并且我们选的两根线段的右端点一定是我们的数组的点(贪心思…...

vscode配置django环境并创建django项目

1、创建文件夹 创建文件夹 并在vscode打开 终端输入命令 “ python -m venv env ” 查看目录结构 2、创建项目 在终端输入 django-admin startproject 文件名(这里以myshop为例) 3、创建应用 在myshop打开终端 在终端输入 django-admin startapp 应用名 这里以app1为例…...

WebGL系列教程四(绘制彩色三角形)

目录 1 前言2 varying变量介绍3 开始绘制3.1 声明顶点着色器3.2 声明片元着色器3.3 创建顶点和颜色的缓冲区3.4 指定变量从缓冲区获取值3.5 效果3.6 varying的内涵3.7 完整代码 4 总结 1 前言 上一篇中我们介绍了如何使用缓冲区来绘制三角形,这一篇我们来讲讲如何给…...

通过mxGraph在ARMxy边缘计算网关上实现工业物联网

在当今的工业4.0时代,工业物联网(IIoT)已经成为制造业转型升级的关键技术之一。ARMxy边缘计算网关作为工业自动化和物联网的重要组成部分,能够为工厂车间提供实时的数据处理能力和智能化服务。而mxGraph作为一种流行的JavaScript库…...

GEE案例:利用sentinel-1数据进行洪水监测分析(直方图统计)

目录 简介 数据 函数 ee.Filter.calendarRange(start, end, field) Arguments: Returns: Filter updateMask(mask) Arguments: Returns: Image 代码 结果 简介 利用sentinel-1数据进行洪水监测分析 数据 COPERNICUS/S1_GRD数据是由欧洲空间局(ESA)的Copernicus项…...

QT 联合opencv 易错点

https://blog.csdn.net/qq_51699436/article/details/135777911 网上已经有大量优秀切详尽的文章来讲述QT联合opencv了,我把容易出错的点列出来备忘 1、在进行opencv进行编译时,要确认好是32位还是64位,因为在创建QT项目的时候QT和opencv要匹…...

例如/举例的使用方法 ,e.g., 以及etc的使用方法

e.g. 例如 for example for the sake of example such as 1 e.g. 是拉丁语 exempli gratia 的缩写意思是“举个例子,比如”,等同于for example、 for the sake of example、such as,使用 e.g. 的目的是用几个例子来说明前面的观点。 2 例…...

20240902-VSCode-1.19.1-部署vcpkg-win10-22h2

20240902-VSCode-1.19.1-部署vcpkg-win10-22h2 软件环境 标签:C++ VSCode mingw gcc13 vcpkg cmake分栏:C++操作系统:Windows10 x64 22h2一、安装VScode-1.19.1 请参考另一篇文章《20240717-VSCode-1.91.1-部署gcc13-C++23-win10-22h2》。 二、安装cmake 本文流程需要安…...

MySQL学习(多表操作)

基本知识 一对多 创建部门表 – 主表 create table if not exists dept(deptno varchar(20) primary key ,name varchar(20) );创建员工表 – 创建外键约束 方式1constraint emp_fk foreign key(dept_id) references dept(deptno) create table if not exists emp(eid varc…...

鸿蒙开发(NEXT/API 12)【网络连接管理】 网络篇

简介 网络连接管理提供管理网络一些基础能力,包括WiFi/蜂窝/Ethernet等多网络连接优先级管理、网络质量评估、订阅默认/指定网络连接状态变化、查询网络连接信息、DNS解析等功能。 说明 为了保证应用的运行效率,大部分API调用都是异步的,对…...

VMware Fusion虚拟机Mac版 安装Ubuntu操作系统教程

Mac分享吧 文章目录 下载镜像地址:[www.macfxb.cn](http://www.macfxb.cn)一、CentOS安装完成,软件打开效果二、Mac中安装Ubuntu虚拟机1️⃣:下载镜像2️⃣:创建虚拟机3️⃣:虚拟机设置4️⃣:虚拟机安装5️…...

基于SpringBoot+Vue+MySQL的房屋租赁管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 二十一世纪互联网的出现,改变了几千年以来人们的生活,不仅仅是生活物资的丰富,还有精神层次的丰富。在互联网诞生之前,地域位置往往是人们思想上不可跨域的鸿沟,信息的…...

虚拟机器配置固定IP地址

新安装的虚拟机,如何配置固定的ip地址,废话少说直接上干货 第一步:在VMarea中 选中你要固定IP的虚拟机器,点击上面的“编辑”按钮,然后找到“虚拟网络编辑器”,选中你要修改的ip VMnet8,然后是…...

用python实现基于形态学的方法,如开运算和闭运算,来去除pcd格式激光点云中的植被

在Python中,你可以使用open3d库来读取和处理pcd格式的点云数据。下面是一个示例代码,展示如何使用形态学操作来去除植被。 首先,确保你已经安装了open3d库,可以使用以下命令进行安装: pip install open3d接下来&…...

QT 绘制简易时钟

原文件 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->startTimer(1000); }Widget::~Widget() {delete ui; }//时钟底座 void Widget::paintEvent(Q…...