了解Redis,第一弹,什么是RedisRedis主要适用于分布式系统,用来用缓存,存储数据,在内存中存储那么为什么说是分布式呢?什么叫分布式什么是单机架构微服务架构微服务的本质

简介: 了解Redis,第一弹,什么是RedisRedis主要适用于分布式系统,用来用缓存,存储数据,在内存中存储那么为什么说是分布式呢?什么叫分布式什么是单机架构微服务架构微服务的本质

什么是Redis

Redis主要适用于分布式系统,用来用缓存,存储数据,在内存中存储

那肯定也有人会好奇

内存那么大点地方,能存多少数据啊

这个就说到要点上来了,Redis的特性就是快,但是缺点也很明显他的存储量小,而我们的mysql,他的优点是什么呢?,存储量大,但是慢。

那么我们在生活中,往往会使用Redis和mysql结合去使用,为什么这么使用,因为我们生活中的“二八原则”,什么是二八原则呢?20%的数据,满足80%的需求

这么说就明白了,大部分人玩王者荣耀这游戏,都是用于去打排位,打匹配,获取段位信息这种,这就是20%,其他的80%是什么聊天记录,道具,亲密关系,老友回归这种。

那么这样还带来一个代价,就是系统的负责度就会大大提高,数据发生修改的时候,涉及到,Redis和MYSQL之间的数据同步问题。

那么为什么说是分布式呢?

因为,如果是单机程序,直接通过变量存储数据的方式是比Redis更优的选择。

因为进程具有隔离型,每个进程都是隔离开的,A无法访问进程的量

进程间通信:通过网络(Redis基于网络,可以把自己内存中的变量给别的进程,甚至别的主机的进程进行使用。

什么叫分布式

什么是单机架构

单机架构:只有一台服务器

硬件越来越牛掰。当然如果业务进一步要求提升,用户上升,此时就要分布式,引入更多硬件资源

一台主机的硬件资源有上限!,包括但是不限于

1.CPU

2.内存                                      服务器每收到一个请求,都是消耗上述的一些资源

3.硬盘

4.网络

如果同一时刻,请求多了,此时就可能导致某个硬件资源不够用,无论哪个方面出错了,都可能导致服务器处理请求的时间变长,甚至处理出错。

当然如果真遇到了服务器不够用的场景

1.开源 ->加更多硬件资源(一台机器扩张到极限了,软件商就要做出调整,不是粗暴的买机器,当然引入分布式,系统复杂度大大提高)

2.节流 ->软件上优化(需要通过性能测试,找到哪个环节出现瓶颈,再去对症下药                        

用户请求,会先到达负载均衡器/网关服务器(单独的一个服务器)

负载均衡器,看是承担了所有的请求啊,那他能扛住吗?

他就像是做核酸,组织排队不是费时的,扣嗓子才费时间,分配任务是不耗费时间的,应用服务器承担的具体业务,执行的时间会更长。

增加应用服务器,确实能处理更多请求,但是存储服务器的承担请求也变多了,

相信到了这里,你已经知道,为啥要用redis的原因了,我们在采用redis作为缓存,这也会有下一个问题,应用程序修改存储服务器的时候,缓存服务器能不能修改成功呢?

引入分布式系统:不仅要面对更高的并发量,还要有更大的数据量

我们针对数据库进行进一步拆分的同时,我们也可以对表进行拆分

这也就需要引入微服务

微服务架构

一个服务器程序上,做了很多业务,导致这个服务器代码变的复杂,为了方便代码的维护,就可以把这样一个复杂服务器,拆分成更多功能单一的服务器

微服务的本质

当服务器复杂了,势必就要更多人来维护,当人多了,就要配套的管理,把这里的这些人组织好(防止他们摸鱼),每个组分别配备领导进行管理

引入微服务:解决了人的问题,但是有代价:

1.系统性能下降(要想保证性能不下降太多,还是引入机器,拆下更多的服务,多个功能之间更依赖网络通信,虽然这样代价更好,但是现代科技的万兆网卡,也是非常牛逼的)

2.系统复杂度高,可用性收到影响,服务器多了,遇到的问题更多(这也需要更多的手段,保证系统可用性,更丰富的监控报警,配套的运维人员)

微服务的优势:

1.解决人的问题

2.使用微服务,可以更方便功能的复用

3.可以给不同的服务进行不同的部署

架构推进

应用(application)/系统(System):一个应用,就是一个组服务器程序
模块(Module)/组件(Component):一个应用,里面有多个功能,每个独立的功能,就可以称为一个模块/组件

可用性:系统整体可用的时间/总的时间
响应时长:衡量服务器性能->(越小越好)
吞吐(Throughput)VS并发(concurrent):衡量系统处理请求的能力,衡量性能的一种方式

Redis的特性

MYSQL主要通过表的方式来存储数据的"关系型数据库"

Redis主要是通过键值对方式来存储组织数据的"非关系型数据库"

快:

为什么Redis快

1.Redis数据在内存中就比访问硬盘的数据库要快很多,

2.Redis内部核心逻辑都很简单,数据结构,也是比较简单的操作内存的数据结构

3.从网络角度上,Redis采用了IO多路复用的方式(一个线程管理多个socket

4.Redis使用的单线程(虽然更高版本的Redis引入的多线程),这样的单线程,减少了不必要的竞争者(多线程提高效率的前提是,CPU密集型的任务,使用多个线程可以充分利用cpu多核资源)

5.使用c语言编写(不咋可信,因为mysql也是C编写的,没人问不说)

Redis核心任务:操作内存的数据结构,不吃很多cpu

什么时候用这个Redis

搜索引擎->广告搜索,把所有需要检索的数据都存在内存中,Redis存的是全量数据,这里的数据也不能随便丢。

Redis 可做缓存,数据库,消息队列。

这里的问题:由于负载均衡器随机分配应用服务器,把请求发送到一个应用服务器后,在这个服务器上产生会话,下次发送请求的时候,这个有可能分配到其他没有会话关系的数据。

解决:想办法让负载均衡,把同一个用户的请求始终打在同一个机器上(不是轮询,而是通过userId之类的方式来分配机器)


相关文章
|
运维 NoSQL 测试技术
Redis:内存陡增100%深度复盘
本文深度分析了Redis内存陡增100%的一些细节和解决方案。
683 1
Redis:内存陡增100%深度复盘
|
NoSQL Java 关系型数据库
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Redis 介绍
本文介绍在 Spring Boot 中集成 Redis 的方法。Redis 是一种支持多种数据结构的非关系型数据库(NoSQL),具备高并发、高性能和灵活扩展的特点,适用于缓存、实时数据分析等场景。其数据以键值对形式存储,支持字符串、哈希、列表、集合等类型。通过将 Redis 与 Mysql 集群结合使用,可实现数据同步,提升系统稳定性。例如,在网站架构中优先从 Redis 获取数据,故障时回退至 Mysql,确保服务不中断。
557 0
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Redis 介绍
|
存储 缓存 NoSQL
分布式系统架构8:分布式缓存
本文介绍了分布式缓存的理论知识及Redis集群的应用,探讨了AP与CP的区别,Redis作为AP系统具备高性能和高可用性但不保证强一致性。文章还讲解了透明多级缓存(TMC)的概念及其优缺点,并详细分析了memcached和Redis的分布式实现方案。此外,针对缓存穿透、击穿、雪崩和污染等常见问题提供了应对策略,强调了Cache Aside模式在解决数据一致性方面的作用。最后指出,面试中关于缓存的问题多围绕Redis展开,建议深入学习相关知识点。
958 8
|
12月前
|
存储 缓存 NoSQL
工作 10 年!Redis 内存淘汰策略 LRU 和传统 LRU 差异,还傻傻分不清
小富带你深入解析Redis内存淘汰机制:LRU与LFU算法原理、实现方式及核心区别。揭秘Redis为何采用“近似LRU”,LFU如何解决频率老化问题,并结合实际场景教你如何选择合适策略,提升缓存命中率。
1439 3
|
消息中间件 缓存 监控
中间件架构设计与实践:构建高性能分布式系统的核心基石
摘要 本文系统探讨了中间件技术及其在分布式系统中的核心价值。作者首先定义了中间件作为连接系统组件的"神经网络",强调其在数据传输、系统稳定性和扩展性中的关键作用。随后详细分类了中间件体系,包括通信中间件(如RabbitMQ/Kafka)、数据中间件(如Redis/MyCAT)等类型。文章重点剖析了消息中间件的实现机制,通过Spring Boot代码示例展示了消息生产者的完整实现,涵盖消息ID生成、持久化、批量发送及重试机制等关键技术点。最后,作者指出中间件架构设计对系统性能的决定性影响,
|
存储 监控 NoSQL
流量洪峰应对术:Redis持久化策略与内存压测避坑指南
本文深入解析Redis持久化策略与内存优化技巧,涵盖RDB快照机制、AOF重写原理及混合持久化实践。通过实测数据揭示bgsave内存翻倍风险、Hash结构内存节省方案,并提供高并发场景下的主从复制冲突解决策略。结合压测工具链构建与故障恢复演练,总结出生产环境最佳实践清单。
646 9
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
存储 缓存 安全
分布式系统架构7:本地缓存
这是小卷关于分布式系统架构学习的第10篇文章,主要介绍本地缓存的基础理论。文章分析了引入缓存的利弊,解释了缓存对CPU和I/O压力的缓解作用,并讨论了缓存的吞吐量、命中率、淘汰策略等属性。同时,对比了几种常见的本地缓存工具(如ConcurrentHashMap、Ehcache、Guava Cache和Caffeine),详细介绍了它们的访问控制、淘汰策略及扩展功能。
429 6
|
设计模式 存储 算法
分布式系统架构5:限流设计模式
本文是小卷关于分布式系统架构学习的第5篇,重点介绍限流器及4种常见的限流设计模式:流量计数器、滑动窗口、漏桶和令牌桶。限流旨在保护系统免受超额流量冲击,确保资源合理分配。流量计数器简单但存在边界问题;滑动窗口更精细地控制流量;漏桶平滑流量但配置复杂;令牌桶允许突发流量。此外,还简要介绍了分布式限流的概念及实现方式,强调了限流的代价与收益权衡。
931 12
|
NoSQL Java API
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Spring Boot 集成 Redis
本文介绍了在Spring Boot中集成Redis的方法,包括依赖导入、Redis配置及常用API的使用。通过导入`spring-boot-starter-data-redis`依赖和配置`application.yml`文件,可轻松实现Redis集成。文中详细讲解了StringRedisTemplate的使用,适用于字符串操作,并结合FastJSON将实体类转换为JSON存储。还展示了Redis的string、hash和list类型的操作示例。最后总结了Redis在缓存和高并发场景中的应用价值,并提供课程源代码下载链接。
2895 0