导图社区 缓存数据库
关系型数据库的数据都存储在磁盘中,在高并发情况下,业务应用的查询会对关系型数据库产生的巨大 I/O 开销,为了最大程度的降低对数据库服务器的访问压力,提出了...
提示: 本内容由社区用户上传并分享。平台不对内容的真实性、合法性、知识产权归属及是否侵害第三方权利进行事前审核或保证。本内容可能包含受版权保护的图片、字体或其他第三方素材,使用前请自行确认授权范围。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
缓存+数据库
方案零:全量定时更新缓存+读写分离 缺点:缓存和数据库不一致;缓存利用率不高,存储了很多不访问的数据 优点:提供读写性能
方案一:同步更新缓存+更新数据库 优点:提高缓存利用率 缺点:数据不一致
前后操作失败问题
更新缓存成功,更新数据库失败时,业务上当前数据是成功的新值、,缓存失效后,数据又变回修改之前的旧值。
有更新就更新缓存,造成机器浪费
并发问题(2个线程同时更新一条数据):A(更新缓存)-B(更新缓存)-B(更新数据)-A(更新数据)
方案二:同步更新数据库+更新缓存
缺点:数据不一致
更新数据库成功,更新数据库缓存失败时,业务上当前数据是失败的旧值,缓存失效后,数据才更新成功为新值。
并发问题(2个线程同时更新一条数据):A(更新数据)-B(更新数据)-B(更新缓存)-A(更新缓存)
方案三:删除缓存+更新数据库
并发问题(2个线程读写,A写B读):A(删除缓存)-B(读取缓存-取数据库旧值)-B(更新缓存旧值)-A(更新数据库新值)
方案四:更新数据库+删除缓存
并发问题(2个线程读写,A读B写):缓存不存在-A(读取数据库旧值)-B(更新数据库新值)-B(删除缓存)-A(写入缓存旧值)
方案五:更新数据库+引入MQ处理第二步、订阅数据变更日志、msyql的binlog、canal中间件处理 解决2步操作失败问题是重试
redis提高性能
读写分离
主从复制
缓存