高级〜系统架构设计师〜第2章计算机与网络基础知识(28)

2024-06-16 来源:飞速影视
读操作主要解决查询效率问题。写操作的顺序是先写数据库,如失败,则返回失败;如成功,则更新缓存。更新缓存可能的方式有:如缓存中无此 key 值,则在缓存中不作处理;如缓存中存在此 key 值,则删除 key 值或使该 key 值失效。写操作的顺序主要防止数据库写操作失败,缓存更新为内存操作,失败的概率很小。同时删除 key 或使 key 失效,则在下一次查询该 key 值时,会发起数据库读操作,并同步更新缓存中的 key 值,从而最大程度上避免双写不一致问题。
【问题】
存在问题:不在系统中的 key 值是无限的,如果均设置 key 值为空,会造成内存资源的极大浪费,引起性能急剧下降。
解决思路:查询缓存之前,对 key 值进行过滤,只允许系统中存在的 key 进行后续操作(例如采用 key 的 bitmap 进行过滤)。
该方法主要的思路是为系统中不存在的 key,在缓存中增加该key ,并设置 key 对应的值为空值,从而防止下次发起对数据库的查询操作。
该方法存在的问题是,不在系统中的 key 值是无限的,如果均设置 key 值为空,会造成内存资源的极大浪费,引起性能急剧下降。
解决思路是对于系统中存在的 key 值,在査询前进行过滤,只允许系统中存在的 key 进行后续操作。因为一般情况下,系统中的 key 是有限的,或者是符合某种规则的。例如可以采用 key 的 bitmap 进行过滤,降低过滤的消耗。
【问题】
思路 1:缓存失效后,通过加排它锁或者队列方式控制数据库写缓存的线程数量,使得缓存更新串行化;
思路 2:给不同key 设置随机或不同的失效时间,使失效时间的分布尽量均匀;思路 3:设置两级或多级缓存,避免访问数据库服务器。
运维团队发现的大量缓存 key 值同时失效,从而导致整个系统性能急剧下降,进而造成整个系统崩溃。其主要的原因是key 值失效,导致数据库服务器请求瞬时爆量,引起大量缓存更新操作,从而导致了系统性能急剧下降,系统崩溃。
解决该问题的思路就是采取某种做法,使得缓存中同一时间不会出现大量的 key 值失效。具体的思路有: 1.缓存失效后,大量的缓存更新操作进行排队,通过加排它锁、队列等方式控制同时进行缓存更新操作的数量,使得缓存更新串行化,降低更新频率。此方式效果不佳,并没有从根源上解决大量缓存 key 值同时失效的问题。
相关影视
合作伙伴
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)

www.fs94.org-飞速影视 粤ICP备74369512号