【尚庭公寓|项目日记】第九天

摘要:

        本文介绍了Redis缓存优化的原理与数据一致性解决方案。核心思想是将频繁访问的磁盘数据缓存在内存中,显著提升性能。针对数据库与缓存数据不一致问题,分析了两种方案:同时更新缓存(资源浪费)和删除缓存(推荐方案),并比较了先删缓存后更新数据库与先更新数据库后删缓存的优劣,建议采用后者结合消息队列确保操作成功。经测试,该优化使性能提升至少3倍,可扩展至其他热点操作。

一,通过redis进行缓存优化:

缓存优化的核心思想就是将一些原本保存在磁盘(例如MySQL)中的、经常访问并且查询开销比较大的数据,临时保存到内存(例如Redis)中。后序再访问相同数据时,就可直接从内存中获取结果,而无需再访问磁盘,由于内存的读写速度远高于磁盘,因此就能极大的提高程序的性能。
 

二, 数据不一致的问题及解决(这里采用第二种)

【全网最详细】如何保证缓存和数据库一致性-优快云博客

在使用缓存优化时,有一个问题不得不提,那就是“数据库和缓存数据的一致性”,当数据库中的数据发生变化时,缓存中的数据也要同步更新,否则就会出现数据不一致的问题,解决该问题的方案有如下几个

(1)数据发生变化时,更新数据库的同时也更新缓存

  每次数据发生变更,都「无脑」更新缓存,但是缓存中的数据不一定会被「马上读取」,这就会导致缓存中可能存放了很多不常访问的数据,浪费缓存资源。

  而且很多情况下,写到缓存中的值,并不是与数据库中的值一一对应的,很有可能是先查询数据库,再经过一系列「计算」得出一个值,才把这个值才写到缓存中。

  由此可见,这种「更新数据库 + 更新缓存」的方案,不仅缓存利用率不高,还会造成机器性能的浪费。
(2) 数据发生变化时,更新数据库的同时删除缓存

1,删除缓存两种方案:

     ——先删除缓存,后更新数据库

     ——先更新数据库,后删除缓存

2,哪种更优更安全?

(1)先删除缓存,后更新数据库,第二步操作失败,数据库没有更新成功,那下次读缓存发现不存在,则从数据库中读取,并重建缓存,此时数据库和缓存依旧保持一致,都是并发【读写】还是会不一致

(2)如果是先更新数据库,后删除缓存,第二步操作失败,数据库是最新值,缓存中是旧值,发生不一致,都是并发【读写】情况下发生不一致问题的概率非常低

总结:所以一般采用第二种方案,同时引入消息队列来执行删除缓存操作

三,压力测试

经过压力测试,性能至少提升3倍,同时可尝试添加缓存优化到其他“热点操作”

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值