Redis -- 基础知识1

1.介绍

1.初识Redis

Redis:The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker.

in-memory data:在内存中存储,Redis是在分布式系统中存储起作用的

解释:1.要清楚在单机下就能完成所有的任务时,Redis并没有用,因为可以直接存储变量进行访问。2.在分布式系统中,由于每一个进程之间有隔离性,那么想要把内存中的变量分享给别的主机其实得由网络传输。所以Redis就是以网络为基础,把自己内存中的变量交给其他主机进程能得到变量,达到共享使用。

database:提供数据库的功能

解释:1.MySQL可以提供数据库功能,但它也有缺点,就是效率慢,想要达到一个更快的性能那么就不太合适了。Redis作为数据库比MySQL快,这是因为Redis用内存存储,而MySQL存储在硬盘上。2.Redis的存储内存比MySQL小,所以对于海量数据不适用。

cache:把Redis作为cache来使用。

解释:1.将热点数据存储在Redis中,其他数据存储在MySQL中存储,这样达到了性能快存储多的结果。2.但是这个系统的复杂程度变麻烦了,并且数据修改时要涉及到Redis和MySQL的数据同步问题

streaming engine:作为消息中间件(消息队列),为生产消费者模型。当前很少使用。

分布式是关键。

2.分布式的基本架构

1. 单机模型

就是字面意思,由一台主机或者一个服务器实现所有的功能模块,其中这些模块自然就共同使用上面的所有资源。cpu,内存,寄存器,硬件等等。那么只要运行的东西够多,那么至少会有一个主机资源吃紧导致整体的效率低了,那么就想要进行优化。

1.开源:对吃紧的资源进行物理方面的扩充,加钱就行,不过这也有极限,一个主机最多也就能放那么老些东西

2.节流:需要有更强的数据结构和算法来疏通,这种情况会花费更多的精力和思路去编写代码

2.数据库分离模型

MySQL其实在主机上就是以一个服务器形式存在,我们使用客户端对数据库进行访问。那么可以将执行的应用与用于存储的数据库进行分离,那么此时可以将这两放到不同的服务器中去。那么此时为了增加利用率。应用服务器可以适当升级cpu和内存,而数据库服务器增加硬件,必要时使用SSD硬盘来存储大量数据。

3.应用服务器的集群架构与负载均衡

引入更多的应用服务器,用户请求增加会比较吃cpu和内存的资源,大量用户就需要有更多的应用服务器。用户将请求发送给负载均衡器,负载均衡器通过负载均衡的算法将请求较为均匀的分发给应用服务器群中,降低应用服务器承当的压力。其思路与多线程类似。负载均衡器接收请求的能力远超过应用服务器,每次处理请求和花费的内存都比较小,所以可以处理更多。如果负载均衡器承当不了,那么就可以有更多的负载均衡器,不过管理成本就提高很多,出现问题的概率也大。

4.数据库读写分离

如果应用服务器群对数据库读写都使用在同一个数据库服务器中,那么它承当的压力也很大

1.开源:引入更多的机器

2.节流:数据库优化,门槛高更复杂

数据库读写分离,并发多台服务器。主从结构的结构,不同的服务器定义为不同的角色,那么此时需要将不同角色的服务器进行不同的操作,时时进行数据同步。而一般读数据的频率比写的频率高。主服务器进行写,从服务器进行读,从服务器要同步主服务器的内容。

5.缓存的引入

数据库读硬盘,所以响应慢。把数据进行冷热区分,热点数据存放在缓存中,所有的数据都放在数据库中。缓存为了更快就只能存比较少的热点数据。引入缓存确实提高读取的效率了,但是更改数据后,我们需要对缓存的数据进行同步,那么也比较的复杂。这一缓存的实现就是使用Redis。

6.数据库分库分表

引入分布式系统,不光要应对更高的请求量,也要应对更多的数据量。有些数据占内存大,并且一台服务器难以存储下,这时就需要对这些数据库进行拆分,将其分库分表。

分库:MySQL上的逻辑集合表database,引入多个数据库服务器存储一个database或者多个database

分表:一个database存不下,那么就分表放入服务器中。

7.微服务结构

应用服务器处理内容太多导致服务器变得复杂,就需要对业务进行拆分为更小的服务器。每一个服务器处理一个业务,该结构就是微服务结构。一个或者多个服务器共同处理一个业务模块,方便程序员管理;更方便达到功能的复用;不同的服务进行不同的硬件资源部署提高利用率。

缺点:1.整个系统的性能下降。多个服务之间更依赖网络通信,保证性能就必须引入更多的硬件。2.系统复杂度变高,出现问题的概率变大了。需要一系列手段来管理,监控与运维。

3.概念介绍

应用/系统:一组服务器的程序

模块/组件:程序的某个独立的功能

分布式:引入多个主机协同配合完成工作,物理上的多个主机

集群:逻辑上的多个主机

主从结构:分布式系统常见结构。从节点的数据由主节点同步而来

中间件:与业务无关的服务,功能更通用的服务(数据库,缓存,消息队列等)

评价指标:

1.可用性(核心):当前系统整体可用的时间/总时间

2.响应时长:处理一次请求花费的时间

3.吞吐/并发:衡量系统处理请求的能力,能处理多少个请求

2.Redis的特性

1.在内存中存储数据:通过键值对的形式存储数据。是一种非关系型数据库

2.可编程的:通过交互式命令或者脚本来批量执行操作

3.可扩展的:在原有功能上扩展,本质是一个动态链接库

4.持久化的:Redis将数据存储在硬盘上,以内存为主,硬盘为辅的。保证效率最大化

5.支持集群:水平扩展

6.高可用:自身支持主从结构,从节点备份主节点的内容

Redis的操作与访问都快的原因:

1.存储在内存里,访问速率快

2.核心功能简单

3.网络角度,使用了IO多路转接技术

4.使用大多是单线程模式

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

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

相关文章

打印机连接网络后怎么安装驱动?

打印机在我们办公和生活中算是比较常见的设备,特别是在上班时需要时常打印各种文件,但是有时电脑上的打印机也会有无法打印的问题,或者新买的打印机需要先安装驱动才能正常打印的。 那么这个时候我们需要先检查电脑上的打印机是否有安装驱动&…

主线程和子线程的区别

在多线程编程中,我们通常会涉及到主线程(也称为父线程)和子线程(也称为工作线程)。 1. 主线程:主线程是程序的起点,它负责创建和管理其他线程。主线程通常执行程序的初始化操作,包括…

Kotlin中的嵌套类、内部类、枚举类、密封类、数据类、单例类、伴生对象

在Kotlin中,类可以分为以下几种类型,并使用样例代码进行说明: 嵌套类(Nested Class):嵌套类是指可以嵌套在其他类中的类。嵌套类不能直接访问外部类的成员。例如,在下面的代码中,&q…

正点原子嵌入式linux驱动开发——异步通知

上一篇笔记中使用阻塞或者非阻塞的方式来读取驱动中按键值都是应用程序主动读取的,对于非阻塞方式来说还需要应用程序通过poll函数不断的轮询。最好的方式就是驱动程序能主动向应用程序发出通知,报告自己可以访问,然后应用程序再从驱动程序中…

LCR 146. 螺旋遍历二维数组

LCR 146. 螺旋遍历二维数组 原题链接:完成情况:解题思路:参考代码: 原题链接: LCR 146. 螺旋遍历二维数组 https://leetcode.cn/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/description/ 完成情况: 解…

【Leetcode】【每日一题】【简单】2520. 统计能整除数字的位数

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/count-the-digits-that-divide-a…

LeetCode 面试题 16.03. 交点

文章目录 一、题目二、C# 题解 一、题目 给定两条线段(表示为起点 start {X1, Y1} 和终点 end {X2, Y2}),如果它们有交点,请计算其交点,没有交点则返回空值。 要求浮点型误差不超过 10^-6。若有多个交点(…

网络安全保险行业面临的挑战与变革

保险业内大多数资产类别的数据可以追溯到几个世纪以前;然而,网络安全保险业仍处于初级阶段。由于勒索软件攻击、高度复杂的黑客和昂贵的数据泄漏事件不断增加,许多网络安全保险提供商开始感到害怕继续承保更多业务。 保险行业 根据最近的路…

【方法】如何给PDF文件添加“打开密码”?

PDF文件可以在线浏览,但如果想要给文件添加“打开密码”,就需要用到软件工具,下面小编分享两种常用的工具,小伙伴们可以根据需要选择。 工具一:PDF编辑器 PDF阅读器一般是没有设置密码的功能模块,PDF编辑器…

python自动化测试(二):xpath获取元素

目录 前置代码 一、什么是xpath方式 二、通过xpath 单组属性名属性值 的方式进行元素定位 三、通过xpath的多组属性进行元素的定位 四、通过xpath文本值的方式进行元素定位 五、通过模糊的文本值方式进行元素定位 前置代码 # codingutf-8 from selenium import webdrive…

python树结构包treelib入门及其计算应用

树是计算机科学中重要的数据结构。例如决策树等机器学习算法设计、文件系统索引等。创建treelib包是为了在Python中提供树数据结构的有效实现。 Treelib的主要特点包括: 节点搜索的高效操作。支持常见的树操作,如遍历、插入、删除、节点移动、浅/深复制…

使用Go语言测试Redis性能

1. 前言 Redis是一个高性能的键值存储数据库,常用于缓存、队列、排行榜等场景。在实际应用中,我们需要对Redis的性能进行测试,以便了解其在不同场景下的表现。本文将介绍如何使用Go语言测试Redis的性能。 2. 环境准备 在开始测试前&#x…

MySQL精髓:如何使用ALL一次找到最大值

题目来自LeetCode 题目 表:Project -------------------- | Column Name | Type | -------------------- | project_id | int | | employee_id | int | -------------------- (project_id, employee_id) 是该表的主键(具有唯一值的列的组合)。 employee_id 是该表…

如何让家居设备快速通过Matter认证?移远通信为您带来标准回答

2022年10月,Matter协议正式面向全球发布;2023年10月23日,Matter 1.2最新版本正式发布。在Matter发布至今的时日里,众多头部厂商纷纷加速开发新产品,只为更快抢占市场先机,以“先发者”身份入局新赛道&#…

数据库安全定义以及重要性简单讲解

数据库安全定义 数据库安全指的是对数据库进行保护,以确保其数据的机密性、完整性和可用性,并防止非法访问、篡改、破坏、泄露等安全威胁。一般包括访问控制、数据加密、审计和监控、数据备份、漏洞修补、网络安全等方面。 数据库安全的重要性 1、数据…

微信小程序开发(四) - 页面配置 - json 文件

page.json 每一个小程序页面也可以使用.json文件来对本页面的窗口表现进行配置。 页面的配置比app.json全局配置简单得多 只须设置app.json中的 window 配置项的内容,页面中配置项会覆盖 app.json 的 window 中相同的 配置项。 页面的.json只能设置 window 相关…

C++ 学习 之 名字空间 namespace

必须在模块里面 extern 声明 在一个 cpp 文件中, 一个namespace 可以多次定义,最后合并,使用 using namespace A 这种引入方式的话,使用的时候可以用所有 A 中的数据 多个 cpp 文件的话,不能会自动合并相同的 名字空…

go WriteFile文件追加写入(适合小文件)

go 在做文件追加写入时一般用os.OpenFile 指定 FileMode 为 os.O_APPEND. 如官方文档示例: f, err : os.OpenFile("access.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)if err ! nil {log.Fatal(err)}if _, err : f.Write([]byte("appended some data\n&…

day37(事件轮询机制 ajaxGet执行步骤与案例(五个步骤) ajax属性 PHP返回JSON对象(两种))

一.事件轮询机制 1. 无论同步还是异步代码都要经过主线程编译,同步代码开始排在执行栈(主线程)上,异步代码开 始存放在任务队列中 2. 主线程优先执行同步代码,同步代码必须前一行执行完,后一行才能执行;当异步代码…

使用python爬虫语言调用有道翻译实现英中互译(2023实现)

使用python爬虫语言调用有道翻译实现英中互译(2023实现) 作者: 安静到无声 作者简介:人工智能和硬件设计博士生、CSDN与阿里云开发者博客专家,多项比赛获奖者,发表SCI论文多篇。 Thanks♪(・ω・)ノ 如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关…