Redis单点会带来哪些问题?

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis单点会带来哪些问题?

引言
相信大家面试有被问题过这样一个问题:你在工作过程中有遇到过什么生产问题?
每个人都会根据自己的经验和总结去回答,今天小面就和大家谈一谈redis单点的问题,处理思路,这样大家在面试的时候又多了一个能讲的案例,拿去和面试官吹逼不过分吧!废话不多说,我们开始今天的话题。

一、Redis单点会带来哪些问题?

  1. redis单点发生故障,数据丢失,影响整体服务应用

在这个负载均衡、集群大规模应用的时候,当然也还有公司或者某些服务在使用一台redis作为缓存中间件或者数据库使用,小面有个朋友,他年前告诉我他们生产环境之前单机redis就缓存一些数据,后面在权限验证的处理中将认证token放在了redis中,某天redis所在服务器受到外部机房断电影响导致redis直接挂掉,其他的应用服务都是需要从redis中去获取token做验证的,因而其他关联的应用服务全部报错,不能使用,redis重启后有数据丢失,他们使用的是RDB存储策略,丢失了在上一次redis做刷写磁盘到断电前的数据,存储策略还有AOF,生产环境中一般是将RDB和AOF合并使用,不熟悉redis持久化的可以看之前的关于RDB和AOF的讲解。
image.png

  1. redis自身资源有限,无法承载更多资源分配

不知道你们有没有经历过单机版的redis在生产环境中跑起来,小面就有幸经历过一次。故事是这样的,在某年某月,我们项目上引入了redis做为缓存使用,而在一个版本开发中,有新的同事进来当时负责一个功能点的数据验证临时结果存储,这个数据校验结果有多大,从前端页面传的一个EXCEL表格,最大行是20000个,字段有20多个,后台解析关联的数据库表大概有4、5张,校验后的返回校验数据得有40多个字段吧,然后他把这个数据放到了redis中,测试时未进行压力测试,单个线程处理感觉不到redis有什么问题,到了上线的第二天,大量用户操作上传excel表格校验处理,后台处理的数据在redis中报增,
image.png
有两个错误异常出现,一个是在内存占满后,redis无法再保存新的数据,同时会启动内存清理策略,这个期间连接会有异常:

io.lettuce.core.RedisCommandTimeoutException: Command timed out after 3 second(s)
另一个是无法分配内存:

Redis Can’t save in background: fork: Cannot allocate memory
redis申请的主机内存已经是顶天了,我们排查发现就是内存不够了,这个很明显的问题就是redis自身资源有限,内存占用满了之后就无法使用了,这肯定是不允许的,一台redis已经解决不了这种对存储空间的需求问题了,所以我们采用了集群加分片的方式进行处理,这里不展开讲,后期会写一篇关于redis集群相关的文章,欢迎各位伙伴关注阅读。
上面这个实例只说明了redis资源受限的一个问题,redis资源受限不仅仅是存储空间上有限,计算机它的算力也是有限的,有更多算力需求来临时它也会支撑不住。
总结一句话就是计算机资源受限是因为存储上限和算力上限在无限增长的互联网需求资源的时候总会发生各种各样的问题,其解决思路就是不要把鸡蛋都放在一个篮子里。

3、并发访问,给服务器主机带来压力,性能瓶颈

image.png

大家应该都知道每一个和服务器建立的TCP连接都会消耗服务器资源,那么当大量的用户同一时刻访问同一台服务器,这是会有很多的tcp连接创建,势必就会给服务器带来巨大压力,神也抗住不,所以大家常常听到说要将产品做到高并发、高可用、高性能,这一个服务器访问压力问题存在就不能够支撑高并发。

二、redis单点存在的问题应该怎么解决?
从上述几点我们应该明确了服务器单点会存在着各种问题,那么前辈们为了解决单点服务器出现的问题,诞生了AKF拆分原则,AKF拆分原则同样可以运用到redis上,那么什么是AFK拆分原则,AFK原则用一简单的句话解释: 通过增加硬件机器来解决单机的容量和单点可用性的问题 。
它是基于X、Y、Z三个方向进行扩展,就是通过三个维度来扩容:

X轴是基于数据进行镜像复制的一个扩展方式,新增的机器和原有的机器拥有着同样的数据;
Y轴是基于数据分类代表着不同的功能,比如用户信息、操作记录、订单信息、商品信息等,新增的机器和原有的机器各自存放着人为划分的功能数据集;
Z轴是基于业务拆分的数据再进行拆分扩展,不同的数据落到不同的分区节点上。image.png

这三个拆分方向分别对应的解决了我们上边所说的单点带来的问题:

X轴解决了单点故障问题,每一台机器都有着相同的数据,其中一台挂掉马上切换到另一台;
Y轴解决了资源受限问题,按照功能划分的数据分拆到不同的机器上,减轻了每台机器的资源存储压力;
Z轴解决了访问压力问题,将业务数据再细分导向规则化的不同的机器,使得每台机器收到的并发访问压力就会大大减少。
三、总结
今天我们了解了redis单点存在的3个问题和AKF拆分原则理论,那么我们根据这个原则进行拆分扩容就可以使得redis单点问题得以解决,但这个AKF拆分原则也存在着一些问题,今天分享的知识就到这里结束了,咱们下期接着谈AKF存在的问题,欢迎持续关注!

相关文章
|
NoSQL Linux Redis
06- 你们使用Redis是单点还是集群 ? 哪种集群 ?
**Redis配置:** 使用哨兵集群,结构为1主2从,加上3个哨兵节点,总计分布在3台Linux服务器上,提供高可用性。
551 0
|
NoSQL Redis 数据安全/隐私保护
Redis实现Single单点登入--系统框架搭建(一)
Redis实现Single单点登入--系统框架搭建(一)
Redis实现Single单点登入--系统框架搭建(一)
|
NoSQL Redis 数据安全/隐私保护
Redis实现Single单点登入详解
Redis实现Single单点登入详解
Redis实现Single单点登入详解
|
7月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
2月前
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
|
3月前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
207 1
Redis专题-实战篇二-商户查询缓存
|
2月前
|
缓存 运维 监控
Redis 7.0 高性能缓存架构设计与优化
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Redis 7.0高性能缓存架构,探索函数化编程、多层缓存、集群优化与分片消息系统,用代码在二进制星河中谱写极客诗篇。
|
7月前
|
缓存 NoSQL Java
Redis+Caffeine构建高性能二级缓存
大家好,我是摘星。今天为大家带来的是Redis+Caffeine构建高性能二级缓存,废话不多说直接开始~
992 0
|
3月前
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。