【Redis】壹 —— Redis 介绍

文章目录:

前言

一、认识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. 应用服务集群架构

引入更多的服务器节点

其中:

负载均衡器(网关):

  1. 也是一个单独的服务器
  2. 用户的请求先到达负载均衡器,由负载均衡器将请求分发给不同的应用服务器
  3. 负载均衡算法:最简单 —— 轮询算法(Round Robin) ——> 轮着来
  4. 对请求量的承担能力:
    1. 负载均衡器对请求的承担能力远远超越应用服务器
    2. 如果当前网关承受不了了,引入更多的负载均衡器 ——> 更多机房

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. 削峰填谷

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

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

相关文章

auto-gptq安装以及不适配软硬件环境可能出现的问题及解决方式

目录 1、auto-gptq是什么?2、auto-gptq安装3、auto-gptq不正确安装可能会出现的问题(1)爆出:CUDA extension not installed.(2)没有报错但是推理速度超级慢 1、auto-gptq是什么? Auto-GPTQ 是一…

AI 的时代,新科技和新技术如何推动跨学科的整合?

在当前AI的发展中,我们面临的一个主要挑战就是融合的问题,这实际上不仅是技术上的融合,还有更深层次的哲学层面的思考。 或许在中国这方面的讨论较少,但在西方哲学和神学的语境中,探讨万物的根本和不同学科之间的联系…

【h5py】 提取mat文件中的HDF5格式的数据

h5py 提取mat文件中的HDF5格式的数据 使用纯Python查看数据配合Matlab后,使用Python查看数据 一、使用纯Python查看文件数据内容 原理:当HDF5存储的是struct类型数据,解析时要像一棵树,我们需要逐层次的去解析,直到…

【指南】03 CSC联系外导

确定外导 课题组有合作关系的国外导师与自己研究方向密切相关的国外导师国外高校官网、谷歌学术、Research Gate等平台检索不可以是中国港澳台的高校科研院所或机构注意外导所在高校排名和科研水平可列表记录注意外国签证政策 发送邮件 自我介绍简要介绍CSC介绍自己的研究对…

DOM与BOM试题

基础回顾题(48分,1分1道题) querySelector 基础 写出一段代码&#xff0c;使用querySelector选择页面上第一个<button>元素&#xff0c;并打印该元素到控制台。 querySelectorAll 基础 使用querySelectorAll选择所有类名为item的元素&#xff0c;并打印这些元素组成的N…

20.LMAX——DDD的极致性能架构

学习视频来源&#xff1a;DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 历史起源架构目标架构要素 时序对比传统时序事件溯源时序LMAX时序 单线程非阻塞异步IO&#xff08;reactor&#xff09;多线程单…

MFC集成WebBrowser控件的实例教程

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;本文提供了如何在MFC应用程序中集成WebBrowser控件的详细步骤&#xff0c;该控件利用ActiveX技术实现内嵌IE浏览器引擎功能。读者将学习如何创建对话框、处理控件事件&#xff0c;并添加导航功能以实现网页浏览。…

解决:IDEA中@Autowired自动注入MyBatis Mapper报红警告的几种解决方法

文章目录 解决&#xff1a;IDEA中Autowired自动注入MyBatis Mapper报红警告的几种解决方法问题描述&#xff1a;解决办法&#xff1a;1.将Autowired注解改成Resource2.给Autowired(required false)设置属性3.给Mapper层加注解Mapper/Repository4.改变写法,用RequiredArgsConst…

python 调Qt C++ 写法配置和坑点

python 示例写法 和调c动态库一样 通过回调函数方式 将python函数注册到c 动态库中 from ctypes import *def DllCall(nParam, nFlag):print(nParam, nFlag)z2 0.6z3 0.4z4 0.0z5 0.3z6 0.5z7 0.8z8 0.3z9 0.9strData str(z2) str(z3) str(z4) str(z5)…

在Docker中运行MySQL的思考:挑战与解决方案

引言 在云计算和容器化技术日益普及的今天&#xff0c;Docker作为一种轻量级的容器化平台&#xff0c;已经成为开发和部署应用的首选工具之一。其提供的便携性、可扩展性和环境一致性对于无状态微服务来说无疑是巨大的福音。然而&#xff0c;并非所有应用都适合在Docker容器中…

Cesium 限制相机倾斜角(pitch)滑动范围

1.效果 2.思路 在项目开发的时候&#xff0c;有一个需求是限制相机倾斜角&#xff0c;也就是鼠标中键调整视图俯角时&#xff0c;不能过大&#xff0c;一般 pitch 角度范围在 0 至 -90之间&#xff0c;-90刚好为正俯视。 在网上查阅了很多资料&#xff0c;发现并没有一个合适的…

Navicat for MySQL 查主键、表字段类型、索引

针对Navicat 版本11 &#xff0c;不同版本查询方式可能不同 1、主键查询 &#xff08;重点找DDL&#xff01;&#xff01;&#xff01;&#xff09; 方法&#xff08;1&#xff09; &#xff1a;右键 - 对象信息 - 选择要查的表 - DDL - PRIMARY KEY 方法&#xff08;2&…

软考系分:今日成绩已出

前言 今年报考了11月份的软考高级&#xff1a;系统分析师。 考试时间&#xff1a;11月9日。 总体感觉偏简单&#xff0c;但是知识点记得不牢&#xff0c;估计机会不大。 今日 12.11 &#xff0c;成绩已出&#xff0c;每科总分 75分&#xff0c;全部45分以上为通过。 成绩总…

angular图表echarts设置

angular框架ngx-echarts图表的配置 图表高度设置 默认高度是400px 可以自己动态设置容器高度 <div echarts nz-row nzJustify"start" [options]"option" [style.height]"option.echartHeight"></div>option.echartHeight‘600px’…

springboot402航班进出港管理系统(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统航班进出港管理系统信息管理难度大&#xff0c;容错率低…

umi实现动态获取菜单权限

文章目录 前景登录组件编写登录逻辑菜单的时机动态路由页面刷新手动修改地址 前景 不同用户拥有不同的菜单权限&#xff0c;现在我们实现登录动态获取权限菜单。 登录组件编写 //当我们需要使用dva的dispatch函数时&#xff0c;除了通过connect函数包裹组件还可以使用这种方…

【计算机网络层】数据链路层 :局域网和交换机

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f3af;局域网 &#x1f6a6;局域网…

浏览器定制 | Windows11 编译 Chromium 133.0.6885.0(截稿前Chromium最新版之编译篇[一])

序章回顾 其实&#xff0c;在此之前&#xff0c;我已经发表过如何在Windows下编译Chromium及前期环境准备的系列文章了。 那么&#xff0c;既然之前已然撰写过了&#xff0c;缘何又出这么一篇类似的文章呢&#xff1f; 倘若你看过我那几篇关于windows编译Chromium的系列文章…

使用webrtc-streamer查看实时监控

摄像头配置&#xff08;海康摄像头为例&#xff09; 摄像头视频编码应改成H264格式 webrtc-streamer下载 webrtc-streamer下载地址 下载后解压出来双击运行&#xff0c;端口默认8000 VUE2项目引入文件 在项目静态文件“public”中需引入两个js文件“webrtcstreamer.js”与“…

Android四大组件——Activity(二)

一、Activity之间传递消息 在&#xff08;一&#xff09;中&#xff0c;我们把数据作为独立的键值对进行传递&#xff0c;那么现在把多条数据打包成一个对象进行传递&#xff1a; 1.假设有一个User类的对象&#xff0c;我们先使用putExtra进行传递 activity_demo06.xml <…