【redis】初始redis和分布式系统的基本知识

news2025/4/4 15:42:48

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱
ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客
本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶​
个人主页:xiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客

系列专栏:​ xiaoxie的redis学习系列专栏——CSDN博客●'ᴗ'σσணღ ​
我的目标:"团团等我💪( ◡̀_◡́ ҂)" 

( ⸝⸝⸝›ᴥ‹⸝⸝⸝ )欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​+关注(互三必回)!

一.初谈redis

1.什么是redis

 redis是一个开源的,基于内存存储的数据结构服务器,起初 redis 的初心是作为一个"消息中间件"(消息队列)而被创建的,但由于市场上的像 KafkaRabbitMQ 等专业消息中间件在处理在处理大规模消息传递、消息顺序保证、以及容错能力方面表现得更为出色,redis 又因为其基于内存存储的特点,而被做为 分布式系统下的缓存服务器来被广泛使用.

2.为什么要在分布式系统下使用redis

无论是在单机环境还是分布式系统中,Redis都可以作为一个强大的缓存解决方案,提高系统的性能和可扩展性。在分布式系统中,Redis的功能特性可以得到更充分的发挥,但在单机环境下,Redis作为缓存也可以带来显著的性能提升.在学习redis之前还是有必要了解一下关于分布式系统的知识.

二.分布式系统

1.名词解释

在了解分布式系统,首先我们应该先了解关于分布式系统的名词

1.应用 / 系统

一个应用/系统 就是一个 / 组 服务器程序

2.模块 / 组件

一个应用,有很多功能,而每个独立的功能,就可以称为一个模块 / 组件

3.分布式

引入多个主机 / 服务器 协同配合完成一系列的工作,就是物理意义上的多个主机.

4.集群

引入多个主机 / 服务器 协同配合完成一系列的工作,但这个是逻辑上的多主机,你可在一台主机上,部署多个服务器,它们协同工作,如果工作量太大,也可以扩展成多个主机上的多个服务器.所以称为逻辑上的多主机集群中的“主机”或“服务器”可以是物理服务器,也可以是在同一台物理主机上运行的多个虚拟服务器或容器.

5.主 / 从

这是分布式系统中比较常见的架构

就是在多台服务器节点中,有一台主节点,另外的节点都为从节点, 并且从节点的数据都是由主节点的数据同步而来的.

6.中间件

位于客户端与服务器之间的软件层,它在分布式系统中起到至关重要的作用。中间件提供了一种机制,用于在不同的应用程序之间进行通信和数据管理,从而简化了复杂系统的开发、维护和集成,例如:

1.数据库

2.缓存

3.消息队列

4....

7.可用性

系统正常运行的时间 / 总的时间 * 100%

例如一个服务器可用的时间为360天,那么它的可用性就为

360 / 365 * 100%

高可用性是许多关键系统所追求的目标,特别是在需要7×24小时不间断服务的场景中,比如金融服务、在线购物平台、云计算服务等

8.响应时长

可以从字面意义上理解,就是户端发送请求到服务器处理完该请求并发送响应回客户端所经历的时间。这个时间包括了网络传输时间、服务器处理时间以及可能的其他延迟,它是衡量一个一个服务器性能的重要指标

9.吞吐 vs 并发

1.吞吐量通常指系统在单位时间内能处理的事务数量或完成的工作量。它反映了系统的处理能力,可以是每秒处理的请求数、每秒传输的数据量或在一定时间内完成的任务数

2.并发性描述了系统能够同时处理多少个操作或请求。高并发性意味着系统可以同时处理来自多个用户的请求,而不会导致明显的性能下降

这两个是衡量系统的处理请求能力,衡量系统能力的重要指标

2.单机框架

单机框架就是只有一台服务器,负责处理所有的工作

现在其实许多的互联网产品其实就是单机框架,因为现在的硬件的发展非常快,哪怕只是一台主机,它的并发量和储存空间都是非常大的,所以其实在中小厂中,单机框架比较常见的,毕竟访问量并没有那么高,而且,单机框架的结构并没有那么复杂,也比较便于管理,单机框架就已经够用了.

3.应用服务和数据库服务分离

 虽然说现在的硬件发展的非常快速,但是随着用户访问量增加,仅仅依赖一台主机还是不够的,比较主机上的资源是有限的,所以我们需要引入多台主机了(引入多台主机后就可以称之为分布式系统了),例如把上文的单机框架的应用服务和数据库服务分别部署到不同的主机上

并且我们还可以根据不同的主机上提供的不同服务,采用不同的配置比如

1.应用服务器里面会包含很多的业务逻辑,所以更看重的是 CPU 的性能 和 内存的大小.

2.存储服务器呢因为要存储大量的数据,所以就更看重硬盘的大小.

4.引用更多的应用服务器节点

随着用户的进一步增加,一台应用服务可能也不一定够用,这个时候我们就要进一步的引用更多的应用服务器节点.同时,我们还需要引入一个负载均衡服务器,使用相应的算法合理的分配,用户的请求到各个服务器中,防止出现分配不合理的情况

需要注意的一点是这个负载均衡服务器的算法,是需要根据具体的业务的去具体设计的.同时我上图只是就画了两个服务器,不代表只能增加一个服务器. 并且可能不仅仅只需要一个负载均衡器.

5.读写分离存储服务器

随着应用服务器的增加,同时数据也会大量的增加,这个时候可能一台存储服务器并不能满足业务的需求这个时候,就可以引入更多的存储服务器,把其中一台服务器作为写服务器 以及主服务器,把其他的服务器作为读服务器以及从服务器,因为一般来说在业务场景中,读的频率远高于写的频率

 注意的地方,只能有一台写服务器,但可以有多台读服务器,并且,主服务器的数据还会同步给读服务器.

6.将存储服务器分为"冷热区"

虽然说数据库很好用,但是数据库有一个很致命的缺点那就是慢,这个时候我们就可以引入我们这个话题的主角了也就是 redis 使用它来解决这个问题,它是基于内存存储的,虽然存储空间不大,但它快,在加上二八原则也就是 20 % 的数据 就能够解决80%的访问,甚至 是 10% 和 90% 基于这两点,我们就可以引入 redis 也就是缓存服务器,把热点信息存储到该服务器中,这样就可以大大的提高访问速度了,并且读服务器还是存储着全部数据

 同时,redis虽然是基于内存存储的,但是它会在硬盘上备份一份数据,所以不用担心数据可能是易失性的.

7.分表分区数据库

虽然说我们已经对存储服务器引入多个服务器,但还是有可能出现,一个服务器的数据库可能会存储几十G甚至上百G的数据(短视频),这个时候我们就应该引入更多的主机,并对数据库进行分表分区操作了.使用多个数据库服务器存储原本数据库的一部分数据

其中如果某张表太大了一个主机装不下,也可以对一张表进行拆分,具体如何操作还是要根据实际业务来调整.

8.微服务架构

随着主机的增加,特别是随着应用服务器的增多,一个应用服务器的逻辑代码就十分复杂了,增加更多的应用服务器之后代码就更复杂了,这个时候为了更好的维护我们的代码我们就可以把一个复杂的应用服务器,拆分成一个一个,功能单一,更小的服务器(微服务)每个服务实现特定的业务功能,并且可以独立部署、升级和扩展

以上就是关于分布式系统的简单介绍 

三.再谈redis

从上文中我们可以得知redis,是一个基于内存存储的信息中间件,可以作为数据库,可以作为缓存,特别是可以在分布式系统中发挥出它的作用

1.redis的特性

1.基于内存

redis是基于内存存储数据的,也正是由于这个特性,使得它有非常高的读写性能,使得它非常适合作为缓存来使用,不需要存储大量的数据,只需存储热点数据即可

 2.支持多种数据结构

Redis支持字符串、哈希、列表、集合、有序集合等多种数据结构,便于处理复杂的数据缓存需求

3.持久化

redis虽然是基于内存存储数据的,但是它支持RDB(快照)和AOF(追加文件)两种持久化方式将数据存储在硬盘上,确保即使在服务器重启后,数据也能恢复,增强了数据的安全性 

4.高并发高可用性

Redis使用单线程的事件驱动模型,通过非阻塞I/O和事件多路复用机制来处理高并发的请求结合Redis Sentinel,Redis可以构建高可用的系统,实现故障自动转移

 5.灵活的缓存策略

Redis支持LRU(最近最少使用)等淘汰策略,以及设置键的过期时间,自动删除过期数据,帮助管理内存并确保缓存中的数据是最常访问或最新的

6.分布式部署

redis Cluster支持数据的自动分区和故障转移,能够构建大规模、高可用的缓存集群,适合处理大量并发请求和大数据量场景

7.丰富的特性,支持多种语言

Redis提供了多种语言的API,使得开发者可以在多种语言的环境下使用redis.Redis还支持如LRU淘汰、事务实现、数据淘汰机制、Pipelining、Lua脚本执行等高级特性

 2.应用场景

Redis是一种高性能的键值存储数据库,它被广泛用于多种应用场景,以下是一些常见的使用案例:

  1. 缓存:由于其出色的读写性能,Redis常被用作缓存数据库,减少对主数据库的访问,提高数据读取速度。

  2. 会话存储:在分布式系统中,Redis可以用来存储用户会话,实现会话共享。

  3. 消息队列:利用Redis的List或Stream数据结构,可以构建消息队列,适用于实现任务队列和消息传递。

  4. 排行榜:Zset(有序集合)数据结构适合用来构建各种排行榜,如游戏得分、产品销量等。

  5. 分布式锁:利用Redis的原子命令和键过期功能,可以实现分布式锁,避免多进程或多线程间的竞态条件。

  6. 计数器:Redis的原子递增和递减操作使其成为实现计数器的理想选择,如统计访问次数、点赞数等。

  7. 实时分析:Redis的高速特性适合进行实时数据分析,如用户行为分析。

  8. 全页缓存(FPC):可以使用Redis缓存整个网页的内容,减少服务器的负载。

  9. 数据共享:在微服务架构中,Redis可以作为不同服务间共享数据的介质。

  10. 限流:通过设置过期时间和限制请求频率,Redis可以用于实现访问限流功能。

  11. 购物车:Hash数据结构可以用来存储和管理用户的购物车信息。

  12. 社交网络:Redis的Set数据结构适合存储用户的好友列表,并进行社交网络分析。

  13. 位图:可以用于存储用户签到信息、用户在线状态等。

  14. HyperLogLog:适合用来做基数统计,如独立访客数量的统计。

  15. GEO:用于存储地理位置信息,进行地理距离计算和范围查询。

  16. Stream:用于构建高吞吐的消息队列,支持消费组和消息持久化。

  17. 慢查询日志:Redis的Slow Log功能可以记录执行时间较长的命令,有助于性能调优。

  18. 分布式系统Session管理:在分布式系统中,使用Redis可以避免Session跨服务器共享的问题。

  19. 秒杀系统:在高并发场景下,Redis可以作为秒杀系统的核心,处理库存扣减和订单生成

3.在Centos上安装redis

1.添加Redis软件仓库(可选):

使用EPEL(Extra Packages for Enterprise Linux)仓库和Redis的官方仓库可以简化安装过程。首先,你需要安装EPEL仓库:

sudo yum install epel-release

然后,你可以添加Redis仓库

sudo wget https://packages.redis.io/rpm/redis-stable/redis-stable.repo -O /etc/yum.repos.d/redis-stable.repo

2.安装Redis: 

通过yum安装Redis

sudo yum install redis

这将安装Redis服务器和客户端 

3.启动Redis服务

安装完成后,你可以启动Redis服务: 

sudo systemctl start redis

如果想要Redis在系统启动时自动启动,可以使用以下命令: 

sudo systemctl enable redis

4.检查Redis服务状态

检查Redis服务是否正在运行: 

sudo systemctl status redis

 5.配置Redis(可选):

Redis的配置文件位于/etc/redis.conf。你可以编辑此文件以调整配置,例如打开远程访问:

sudo vim /etc/redis.conf

取消注释并修改以下行(如果需要允许远程访问):

protected-mode no

修改配置后,重启Redis服务以应用更改: 

sudo systemctl restart redis

6.安全设置(强烈推荐) 

如果你打算将Redis暴露在公网上,强烈建议设置密码:

requirepass yourpassword

记得将yourpassword替换为一个安全的密码。 

7.测试Redis: 

你可以使用Redis的命令行工具测试安装是否成功:

redis-cli

然后,尝试设置和获取一个键值对: 

set mykey "Hello"
get mykey

如果一切正常,你应该能看到输出:"Hello"。 

8.防火墙设置(如果需要):

如果服务器运行的是防火墙,确保开放6379端口(Redis的默认端口) 

sudo firewall-cmd --add-port=6379/tcp --permanent
sudo firewall-cmd --reload

请注意,Redis默认配置为在保护模式下运行,这意味着它只允许本地回环接口上的连接。如果你需要远程访问Redis,需要按照步骤5进行配置。

另外,如果你的CentOS版本较新,可能会使用dnf而不是yum作为包管理器,相应的安装命令需要替换为sudo dnf install redis

 以上就是关于redis和分布式系统的基本认识了,如果你对redis感兴趣的话,可以点上个关注,博主后续会更新更多的关于redis的内容,有什么需要交流讨论的地方,也可以加文末微信,感谢你的阅读,祝你一天愉快.

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

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

相关文章

Linux中ssh登录协议

目录 一.ssh基础 1.ssh协议介绍 2.ssh协议的优点 3.ssh文件位置 二.ssh原理 1.公钥传输原理(首次连接) 2.ssh加密通讯原理 (1)对称加密 (2)非对称加密 3.远程登录 三.服务端的配置 常用的配置项…

C++信息学奥赛 数据结构认识

数据结构 1.1数据结构分类 1.2基本数据类型 1.3数字编码 1.4字符编码 1.1数据结构分类 数据结构如同一副稳固而多样的框架。为数据的有序组织提供了蓝图,算法得以在此基础上生动起来。 常用的数据结构包括哪些 , , &…

QA测试开发工程师面试题满分问答21: 单元测试、集成测试、系统测试的侧重点是什么?

单元测试、集成测试和系统测试是软件测试中的不同层次和阶段,每个阶段侧重于不同的测试目标和范围。以下是它们的侧重点的简要说明: 单元测试: 单元测试是针对软件中最小的可测试单元(通常是函数、方法或模块)进行的测…

版本控制系统-Git

目录 1. Git简介 2. 下载及安装 3.命令行操做 3.1全局设置 3.2初始化仓库 3.3提交代码 3.4查看提交历史 3.5推送代码 3.6拉取合并代码 3.7克隆仓库 3.8. 配置忽略文件 3.9. 凭据管理 4. GUI工具操作 4.1. 全局设置 4.2. 初始化仓库 4.3. 提交代码 输入提交日志…

Gone框架介绍3 - 使用gone命令,自动生成Priest函数

文章目录 1. 安装辅助工具: gone2. 创建一个名为gen-code的新项目3. 创建Goner4. 使用辅助工具5. 添加main函数 我在两年前实现了一个Golang的依赖注入框架,并且集成了gin、xorm、redis、cron、消息中间件等功能,自己觉得还挺好用的;之前一直…

Jenkins首次Build,配置Git,Maven,JDK,凭证管理

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudso…

有哪些好用电脑端时间定时软件?桌面日程安排软件推荐 桌面备忘录

随着现代生活节奏的加快,人们对于时间管理和任务提醒的需求越来越大。为了满足这一需求,市场上涌现出了众多桌面便签备忘录软件,它们不仅可以帮助我们记录待办事项,还能定时提醒我们完成任务。在这篇文章中,我将为大家…

宝子们,到我选Offer了

A. 腾讯IEG光子 游戏客户端 Base 深圳 优点: 1. Title可以,是IEG正经游戏工作室 2. 这可是鹅啊,可以吟唱《作废》歌 缺点: 1. 离得远 要租房 2. 5000HC 转正率懂得都懂 3. 可能会参与预研的东西 不会很快参与…

HaLo-NeRF:利用视觉和语言模型对场景的精准定位和细粒度语义理解

包含大量摄影师拍摄的照片的互联网图像集有望实现对大型旅游地标的数字探索。然而,先前的工作主要集中在几何重建和可视化上,忽略了语言在为导航和细粒度理解提供语义界面方面的关键作用。 项目:HaLo-NeRF: Learning Geometry-Guided Semant…

Ansible自动化运维工具主机清单配置

作者主页:点击! Ansible专栏:点击! 创作时间:2024年4月24日12点21分 Ansible主机清单文件用于定义要管理的主机及其相关信息。它是Ansible的核心配置文件之一,用于Ansible识别目标主机并与其建立连接。 …

win10安装DHCP服务--用于2台机器之间搭建简易网络来进入目标机器修改配置

前言: 客户多了,往往会出现各种突发情况。 比如一个客户现场没有DHCP,没有显示器,键盘。 你只有一台笔记本的情况下要配置目标机器的网络。要如何配置?? 这时候就可以使用这篇博客提供的方式了。 Windows…

分布式与一致性协议之CAP和Paxos算法(一)

CAP 理论 如何使用BASE理论 以InfluxDB系统中DATA节点的集群实现为例。DATA节点的核心功能是读和写,所以基本可用是指读和写的基本可用。我们可以通过分片和多副本实现读和写的基本可用。也就是说,将同一业务的数据先分片,再以多份副本的形…

STM32驱动SYN6288语音合成模块

STM32驱动SYN6288语音合成模块 简介功能特点通讯方式接线代码结果总结 简介 SYN6288通过异步串口(UART) 通讯方式,接收待合成的文本数据,从而实现文本到语音的转换SYN06188 语音芯片的优秀特点:最小SS0P28L 贴片封装、硬件接口简单、低功耗、音色清亮圆…

C++中auto关键字的用法详解

1.简介 auto作为一个C语言就存在的关键字,在C语言和C之间却有很大区别。 在C语言中auto修饰的变量,是具有自动存储器的局部变量,但因为局部变量默认类别默认是auto修饰导致一直没有人去使用它。 C11中,标准委员会赋予了auto全新…

Linux学习笔记:进程间的通信.共享内存shm

共享内存shm 什么是共享内存shm共享内存的特点关键函数ftokshmgetshmatshmdtshmctl 代码示例 什么是共享内存shm 进程间通信的前提:必须让不同的进程看到同一份资源,并且这个资源是OS提供的 而共享内存(Share memory)就是在内核共享内存区找一块物理内存空间,并允许多个进程共…

西瓜书学习——决策树形状、熵和决策树的本质

文章目录 决策树形状监督学习算法分类与回归 熵信息熵香农熵 (Shannon Entropy) - H(X)联合熵 (Joint Entropy) - H(X, Y)条件熵 (Conditional Entropy) - H(Y|X)互信息 (Mutual Information) - I(X; Y)相对熵 (Relative Entropy) / KL散度 (Kullback-Leibler Divergence) - DK…

学习CSS3,实现红色心形loading特效

试想一下,如果你的网站在加载过程中,loading图由一个老旧的菊花转动图片,变为一个红色的心形loading特效,那该有多炫酷啊。 目录 实现思路 初始化HTML部分 延迟动画是重点 设定动画效果 完整源代码 最后 实现思路 每个…

怎样批量将jpg图片转换成HEIC格式?jpg快速转换成HEIC图片

heic格式和jpg格式图片大家都很熟悉了。那么这两种图片格式的区别是什么?哪种格式图片更好一些? 一,区别:jpg和HEIC的区别 1,jpg格式有良好的压缩性能和良好的重建质量而被广泛应用于图像和视频处理中。 2&#xff…

HarmonyOS实战开发-RPC连接、如何实现前台选择商品和数目,后台计算总价的功能

介绍 本示例使用ohos.rpc 相关接口,实现了一个前台选择商品和数目,后台计算总价的功能,使用rpc进行前台和后台的通信。 效果预览 使用说明: 点击商品种类的空白方框,弹出商品选择列表,选择点击对应的商品…

常用工具网站

代码生成器: SQL转Java代码生成器 | 不求人导航SQL转Java代码生成器https://codegen.bqrdh.com/