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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 了解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之类的方式来分配机器)


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
64 1
|
2月前
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。
|
2月前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
|
2月前
|
存储 编译器
数据在内存中的存储
数据在内存中的存储
42 4
|
2月前
|
存储 Java
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
这篇文章详细地介绍了Java对象的创建过程、内存布局、对象头的MarkWord、对象的定位方式以及对象的分配策略,并深入探讨了happens-before原则以确保多线程环境下的正确同步。
57 0
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
|
2月前
|
存储 机器学习/深度学习 人工智能
数据在内存中的存储
数据在内存中的存储
|
2月前
|
存储 C语言
深入C语言内存:数据在内存中的存储
深入C语言内存:数据在内存中的存储
|
存储 缓存 NoSQL
Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存|学习笔记
快速学习 Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存
Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存|学习笔记
|
缓存 NoSQL 安全
6.0Spring Boot 2.0实战 Redis 分布式缓存6.0|学习笔记
快速学习6.0Spring Boot 2.0实战 Redis 分布式缓存6.0。
333 0
6.0Spring Boot 2.0实战 Redis 分布式缓存6.0|学习笔记
|
缓存 NoSQL Redis
首页数据显示-添加 redis 缓存(3)| 学习笔记
快速学习 首页数据显示-添加 redis 缓存(3)
151 0
首页数据显示-添加 redis 缓存(3)| 学习笔记