˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱
ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客
本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶
个人主页:xiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客系列专栏: xiaoxie的redis学习系列专栏——CSDN博客●'ᴗ'σσணღ
我的目标:"团团等我💪( ◡̀_◡́ ҂)"( ⸝⸝⸝›ᴥ‹⸝⸝⸝ )欢迎各位→点赞👍 + 收藏⭐️ + 留言📝+关注(互三必回)!
一.初谈redis
1.什么是redis
redis是一个开源的,基于内存存储的数据结构服务器,起初 redis 的初心是作为一个"消息中间件"(消息队列)而被创建的,但由于市场上的像 Kafka、RabbitMQ 等专业消息中间件在处理在处理大规模消息传递、消息顺序保证、以及容错能力方面表现得更为出色,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是一种高性能的键值存储数据库,它被广泛用于多种应用场景,以下是一些常见的使用案例:
-
缓存:由于其出色的读写性能,Redis常被用作缓存数据库,减少对主数据库的访问,提高数据读取速度。
-
会话存储:在分布式系统中,Redis可以用来存储用户会话,实现会话共享。
-
消息队列:利用Redis的List或Stream数据结构,可以构建消息队列,适用于实现任务队列和消息传递。
-
排行榜:Zset(有序集合)数据结构适合用来构建各种排行榜,如游戏得分、产品销量等。
-
分布式锁:利用Redis的原子命令和键过期功能,可以实现分布式锁,避免多进程或多线程间的竞态条件。
-
计数器:Redis的原子递增和递减操作使其成为实现计数器的理想选择,如统计访问次数、点赞数等。
-
实时分析:Redis的高速特性适合进行实时数据分析,如用户行为分析。
-
全页缓存(FPC):可以使用Redis缓存整个网页的内容,减少服务器的负载。
-
数据共享:在微服务架构中,Redis可以作为不同服务间共享数据的介质。
-
限流:通过设置过期时间和限制请求频率,Redis可以用于实现访问限流功能。
-
购物车:Hash数据结构可以用来存储和管理用户的购物车信息。
-
社交网络:Redis的Set数据结构适合存储用户的好友列表,并进行社交网络分析。
-
位图:可以用于存储用户签到信息、用户在线状态等。
-
HyperLogLog:适合用来做基数统计,如独立访客数量的统计。
-
GEO:用于存储地理位置信息,进行地理距离计算和范围查询。
-
Stream:用于构建高吞吐的消息队列,支持消费组和消息持久化。
-
慢查询日志:Redis的Slow Log功能可以记录执行时间较长的命令,有助于性能调优。
-
分布式系统Session管理:在分布式系统中,使用Redis可以避免Session跨服务器共享的问题。
-
秒杀系统:在高并发场景下,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的内容,有什么需要交流讨论的地方,也可以加文末微信,感谢你的阅读,祝你一天愉快.