常见的Redis架构设计缺陷

Redis的Hash类型:一个强大而令人失望的数据结构 Redis的Hash类型是一个键值对的集合,其中的值可以是字符串、整数或浮点数。然而,尽管Redis的Hash类型在某些方面非常强大,但也有一些让人失望的地方。当你处理较小的数据集并且不需要嵌套结构时,Redis的Hash类型是一个不错的选择。总之,Redis的Hash类型在存储和访问结构化数据方面提供了一些便利,但也有一些让人失望的地方。了解这些局限性可以帮助我们更好地使用Redis的Hash类型,并在需要时考虑其他适合的数据结构。也就是说,你不能在Hash类型的字段中存储另一个Hash类型。 阅读详情
Redis架构设计缺陷主要分为两方面

1.缓存穿透

2.缓存击穿

缓存穿透是什么?

所谓的缓存穿透,简单来讲就是查询某些不存在的key时,缓存和数据库查询结果都为空,而空的结果又不被缓存起来,而导致每次查询都去请求数据库层的情况。


过程:


缓存不命中,进而导致每次查询都去查询数据库,缓存也就失去了作用,通常表现为服务器负载迅速上升,严重时可能直接宕机。


常见场景

日常网站开发中,我们通常会将一些访问频繁的页面缓存起来,比如文章详情页、商品详情页等,而这些又恰恰是爬虫最喜欢访问的页面,如果缓存设计不合理,遇到不负责任的爬虫,顺着ID频繁抓取数据,后果是非常严重的!

另外,有很多同学写代码时不够细心,特别是循环去调用某些接口时容易出现缓存的情况,有时候威力堪比恶意攻击(泪奔)。


预防措施

常见的两种方法是缓存空数据和使用布隆过滤器,需要根据实际场景进行选择。

1.缓存空数据

当第一次查询数据库时,若数据不存在,返回空数据时将其写入缓存,后续查询就不必再去查询数据库了。


存在问题:

如果key过期时间较长,出现恶意攻击时,容易出现内存不够的情况。另外,需要额外的业务逻辑处理数据库与缓存中数据一致性的问题。


2.布隆过滤器拦截

访问缓存之前,先从布隆过滤器中验证数据是否存在。


简单来讲就是使用多个hash函数将一个key映射到一个很长的二进制向量的多个比特位中,类似于hash set。


存在问题:维护复杂,建议只在海量数据的情况下使用。

缓存击穿是什么?

所谓的缓存击穿,就是我们对于热点数据设置缓存时,对于这些key的过期策略考虑欠缺,而导致某个热点key过期时大量的请求瞬间穿透到数据库层,造成DB负载飙升,甚至服务器宕机的情况。

这里针对的主要是单个key的情况,对于批量key过期策略不当造成的问题通常被称之为缓存雪崩。它们二者之间十分相似却又有所不同,这里我们主要说说击穿的情况,有兴趣的可以再去深入了解。


过程:

原先热点key中的数据不需要去查询DB,流程是这样的:


某个key过期时候,如果处理不当,就变为以下这样:


如果过期瞬间的并发量很大,那么问题就出现了。


常见场景

商城经常会有抢购、秒杀一类的活动,参加活动的商品数据会被缓存起来,又比如运营人员发表的某篇文章、某张图片,这些都有可能成为热点数据,也都会被缓存起来。


解决方案

1.多个热点key的缓存过期时间应该被均匀错开;

2.重新设计缓冲过期方式,让其永远不会自动过期,这里的不过期并非真的不过期,而是配合使用分布式锁,当数据缓存超过一定时间之后,只有取得锁的请求允许重建缓存,其余均返回旧数据。

ps:关于如何使用Redis实现分布式锁,之前我们已经介绍过,还不清楚的小伙伴记得等会翻回去看看。


其他问题

除了上面缓存过期的问题,在超高并发的环境中,可能还会遇到以下的问题

1.单个value的大小造成的网络阻塞;

2.如何避免因出现单机热点,比如热点key都落到同一台机子上面;





QGIS基于快鸟(QuickBird)影像统计小麦种植面积 ​01数据情况 本次选用某地4月份快鸟(QuickBird)影像为例,使用QGIS演示提取小麦播种情况,并按照200米*200米分区计算种植面积的过程。 注:本文对应的操作视频作为今天第二篇推送同时发布,习惯看视频的朋友可以点击观看。 附数据压缩包: 链接:https://pan.baidu.com/s/1JVUS8uAOR61RxC1n9Or9_w 提取码:qgis 含快鸟影像QB_subset.tif和200*200米分区矢量图层200Mgrid.shp。 ... 阅读详情

相关推荐

BUCK型DC/DC变换器的建模与仿真

BUCK型DC-DC变换器的建模与仿真摘要1 文献调研1.1 研究背景1.2 Buck电路的应用场合2 原理分析2.1 模型介绍2.2 模型分析2.3 频域和时域响应2.4 参数指标要求3 参数设计3.1 校正器选择3.2 校正器参数整定3.2.1 积分器3.2.2 一阶微分环节3.2.3 超前校正器3.3 改进4 结论与展望参考文献 摘要   目前工业自动化水平已成为衡量各行各业现代化水平的一个重要标志。如何对一个系统进行建模分析、补偿校正变得越来越重要。   本文选择BUCK型DC/DC变换器作为载体,

屠龙归来仍是少年 2万+

redission使用的那些坑-hash结构

故障现象: 应用隔2-3天就回导致一次CPU飙到600%+(容器,宿主8核),随后宕机。 排查过程: 首先明确CPU飙升原因 第一步: top -Hp 查看占用CPU进程 发现13~20线程占用大量CPU资源 第二步: jstack 查看实际占用cpu的进程(与top命令中线程关系nid(hex)=pid(dec)) 发现CPU占用...

qq_37892675的博客 4399

双目视觉入门实战:用Matlab标定相机,再到Python OpenCV完成测距的完整链路

本文详细介绍了双目视觉技术的完整实现流程,从Matlab相机标定到Python OpenCV测距的全链路实践。重点解析了Matlab与OpenCV的参数转换技巧,以及立体校正、视差计算等关键步骤的代码实现,帮助开发者快速掌握双目测距系统的搭建方法。

weixin_29166013的博客 444

【五】redis数据结构之hash,命令及其时间复杂度,与string在存储结构化信息时的优缺点对比

hash hash键值结构,其中field不能相同,value可以相同。 key                     field          value user:1:info          name        sid                            age           27                            email...

Sid小杰的博客 4261

深入解析FPGA中的GTX高速收发器架构与设计原理

本文深入解析了FPGA中GTX高速收发器的核心架构与设计原理。文章将GTX比作数据“高速公路”,详细拆解了其PMA(物理媒介适配层)与PCS(物理编码子层)的双层结构,阐述了串并转换、时钟恢复等关键技术,并提供了时钟源选型(QPLL/CPLL)、上电复位流程及信号完整性调试等实战指南,是掌握高速接口设计的必备知识。

f6g7h8i9j的博客 218

【DSP】【工程实战】从零构建C6678多核工程:CCS环境配置与启动模式详解

本文详细介绍了在CCS开发环境中从零构建TMS320C6678多核DSP工程的完整流程。内容涵盖KeyStone架构解析、工程创建、基础代码编写、链接命令文件配置、仿真器调试,并重点深入讲解了包括I2C EEPROM在内的多种一级启动模式原理与配置方法,为开发者提供了一套清晰、可复用的实战指南。

weixin_29164185的博客 416

4种 Redis 集群方案介绍+优缺点对比,一文带你了解

客户端分片是把分片的逻辑放在Redis客户端实现,(比如:jedis已支持Redis Sharding功能,即ShardedJedis),通过Redis客户端预先定义好的路由规则(使用一致性哈希),把对Key的访问转发到不同的Redis实例中,查询数据时把返回结果汇集。比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如mod(key,d),key是数据的key,d是机器节点数,如果有一个机器加入或退出这个集群,则所有的数据映射都无效了。

程序源日志的博客 1053

基于传感器数据实现火灾报警预测分析

火警 系统当检测到烟雾、火灾、一氧化碳或其他与火灾有关或一般通知的紧急情况时,向人们发出警告

DT程序员的博客 721

《Redis面试系列四、Redis不得不说的缺点|优快云创作打卡》

Redis的缺点 Redis的主要缺点有以下四点: 1.数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。 2.Redis 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。 3.主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。 4.Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复

小雨下雨的雨 4597

海康网口相机不能被flexscan3d识别到MVS版本为4.6.1,flex为3.3.24在MVS中能够检测到,但是在flex中只能看到电脑自带相机,如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1040

使用R包PreMSIm预测微卫星不稳定的标题:基于基因表达量的微卫星不稳定性预测

在本文中,我们将介绍如何使用R语言中的PreMSIm包来根据基因表达量进行微卫星不稳定性的预测。需要注意的是,本文仅介绍了使用PreMSIm包进行微卫星不稳定性预测的基本流程和代码示例。在实际应用中,还需要考虑数据的质量控制、模型优化以及结果的解释和验证等因素,以确保预测结果的准确性和可靠性。预测结果将返回一个包含微卫星不稳定性指数的向量,其中每个元素对应一个样本的预测结果。在有了输入数据后,我们可以使用PreMSIm包中的函数进行微卫星不稳定性的预测。函数生成一个包含所有样本的微卫星不稳定性信息的表格。

2301_79330511的博客 382

常见的Redis架构设计缺陷 - 缓存穿透

什么是缓存穿透 所谓的缓存穿透,简单来讲就是查询某些不存在的key时,缓存和数据库查询结果都为空,而空的结果又不被缓存起来,而导致每次查询都去请求数据库层的情况。 过程: 缓存不命中,进而导致每次查询都去查询数据库,缓存也就失去了作用,通常表现为服务器负载迅速上升,严重时可能直接宕机。 常见场景 日常网站开发中,我们通常会将一些访问频繁的页面缓存起来,比如文章详情页、商品详情页等,而...

linyonghui1213的专栏 502

【ArcGIS Pro微课1000例】0022:基于DEM进行流域分析生成流域图

填洼Fill,在进行水文分析后续操作前,首先要对DEM进行填洼,创建无凹陷点的DEM。在ArcGIS中使用的是八方向流量建模(D8算法),工具位于水文分析下的【流向】。填洼需要使用水文分析工具下的【填洼】。确定输入与输出即可。

智慧空间实验室 2750

得物二面:Redis 中某个 Key 访问量特别大怎么办?我:Redis 能顶得住...

对于可预期的热点(如秒杀、大促),可以提前将热点数据加载到本地缓存中,活动开始前就预热好。:面试官不仅仅是想知道热点 Key 的定义,更是想知道你是否能区分热点 Key 和大 Key 的不同(一个是 "访问太多",一个是 "数据太大"),以及热点 Key 对 Redis 集群的具体影响。两者可能同时存在(比如一个又大又被频繁访问的 Key),但解决思路完全不同:热点 Key 要分散访问,大 Key 要拆分数据。:增加从节点,读请求分散到多个从节点,热点 Key 的读压力被多个节点分担,适合读多写少的场景。

方志朋的博客 708

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Redis分布式锁的缺陷及可能产生的问题

Redis分布式锁的缺陷及可能产生的问题

liuruiaaa的博客 1207

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Redis 分布式锁有什么缺陷?

Redis 分布式锁有什么缺陷?

sanmansan的博客 1669

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Redis常见面试题总结

listpack 中每个节点不再像压缩列表一样包含前一个节点的长度,但还是用一块连续的内存空间来紧凑地保存数据,并且为了节省内存的开销,listpack 节点会采用不同的编码方式保存不同大小的数据。当我们向 listpack 加入一个新元素的时候,不会影响其他节点的长度字段的变化,从而避免了压缩列表的连锁更新问题。避免额外的检查开销,AOF 记录日志不会对命令进行语法检查;在命令执行完之后再记录,不会阻塞当前命令的执行。这样也带来了风险如果刚执行完命令 Redis 就宕机会导致对应的修改丢失;

夏日 の blog 2978

【Redis】Redis分布式锁有什么缺陷

在构建分布式系统时,实现有效的分布式锁是确保数据一致性和协同操作的关键要素之一。Redis分布式锁作为一种常用的解决方案,为开发人员提供了一种简单而高效的方式来管理多个节点之间的并发访问。然而,正如所有解决方案都有其局限性一样,使用Redis分布式锁也需要认真考虑潜在的缺陷和应对策略,以确保系统的可靠性和稳定性。在选择和使用Redis分布式锁时,开发人员需要权衡其简单性与可靠性之间的取舍,并根据具体的业务场景和需求做出合适的决策。

AliceNo的博客 2439

Redis常见问题

Redis之所以采用单线程模型,主要是因为它是基于内存操作的,CPU不是瓶颈。Redis的瓶颈通常是内存的大小或者网络带宽。由于Redis的高效性,即使是单线程也能够处理高达数十万级别的QPS(每秒查询率)。单线程模型有几个关键优势:1.简单性:单线程模型简化了设计和实现,避免了复杂的同步和锁机制,减少了bug的可能性。2.性能预测性:使用单线程,操作执行的顺序是确定的,这使得性能变得可预测,避免了多线程程序中的线程切换和锁竞争带来的性能开销。3.高效的利用CPU。

鹿鹿啊_ 643

redis做订阅的方法和缺陷

链接: python redis做订阅 redis的发布订阅缺陷

weixin_42784553的博客 2822

《Redis高并发架构设计:从单机到Cluster的最佳实践》

文章围绕Redis高并发架构设计,介绍从单机到Cluster的演进。摘要将提炼核心要点,助你快速了解Redis架构知识。 ### Redis高并发架构设计:从单机到Cluster的最佳实践摘要 本文聚焦Redis高并发架构设计,阐述基础部署模型差异,单机模式适用于测试等场景,主从+Sentinel满足中小规模业务,Redis Cluster支撑核心生产环境。深入解析Cluster架构槽位分片与高可用原理,针对热点key和跨槽事务痛点,提出多副本、本地缓存及Lua脚本等解决方案。结合去哪儿网实战,分享混合

lcl_032015的博客 734

探寻Redis的世界:Redis常见面试题总结(下)

Redis 事务提供了一种将多个命令请求打包的功能。然后,再按顺序执行打包的所有命令,并且不会被中途打断。Redis 事务实际开发中使用的非常少,功能比较鸡肋,不要将其和我们平时理解的关系型数据库的事务混淆了。除了不满足原子性和持久性之外,事务中的每条命令都会与 Redis 服务器进行网络交互,这是比较浪费资源的行为。明明一次批量执行多个命令就可以了,这种操作实在是看不懂。因此,Redis 事务是不建议在日常开发中使用的。

zxyhj的博客 1232

redis常见的性能问题

Redis 的性能问题通常源于配置不当、数据结构误用、资源瓶颈或架构缺陷。

zwh1zwh的博客 1245

【Redis】redis主从不一致问题(redis缺点、缺陷)

参考: 数据库主从不一致,怎么解?

m0_45406092的博客 6502

Redis 常见问题

Redis 常见问题 1.redis 是什么?都有哪些使用场景? 2.redis 有哪些功能? 3.redis 和 memecache 有什么区别? 4.redis 为什么是单线程的? 5.什么是缓存穿透?怎么解决? 6.redis 支持的数据类型有哪些? 7.redis 支持的 java 客户端都有哪些? 8.jedis 和 redisson 有哪些区别? 9.怎么保证缓存和数据库数据的一致性?...

weixin_43260831的博客 948

Redis常见

定期删除执行过程中,如果突然遇到大量过期 key 的话,客户端请求必须等待定期清理过期 key 任务线程执行完成,因为这个这个定期任务线程是在 Redis 主线程中执行的。不过,如果 Lua 脚本运行时出错并中途结束,出错之后的命令是不会被执行的。并且,出错之前执行的命令是无法被撤销的,无法实现类似关系型数据库执行失败可以回滚的那种原子性效果。也就是说,一段 Lua 脚本执行过程中不会有其他脚本或 Redis 命令同时执行,保证了操作不会被其他指令插入或打扰,这是 pipeline 所不具备的。

2401_86941462的博客 963
上一篇: Windows 安装 pip
下一篇: Git 远程操作详解
喵星人Xcode
博客等级 码龄11年 235粉丝 141原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值