29

教你生产环境怎么用缓存

 4 years ago
source link: https://www.tuicool.com/articles/EbYzIzf
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

点击蓝色“ 乔志勇笔记 ”关注我哟

加个“ 星标 ”,第一时间获取推送的文章哦

一、缓存的作用

1、提高数据的访问速度,带来系统性能的提升

2、缓存预热,数据预先读取,减小同时高并发访问时数据库的压力

二、缓存的位置

AB77Nrb.png!web

蓝色静态缓存,黄色动态缓存

三、进程外缓存运用

最常用Cache Aside Pattern :

1)定义:

更改时先写DB,然后删除缓存。

读取时先读缓存,如果没有命中,读数据库,再写缓存

2)问题: 主从数据库的数据同步延迟带来的问题

方案一: 通过工具订阅从库的binlog,从库完成同步后再做一次删除缓存,可能有短暂的不一致,但不至于引入缓存导致主从同步造成的数据不一致更糟糕

方案二:强制数据同步这段时间内读主库来加载缓存,可能给主库带来压力

做法是写DB,往缓存中临时数据(唯一键+失效时间)标记,删除缓存 ,读取时判断 是否 包含在临时数据中,分情形读取

3)要点:

1、为啥先写db,后更新缓存 不行啊,因为可能在高并发双写时带来数据不一致

2、为啥先写db,后删缓存,是因为先删缓存,后db,可能在读写并发时因为主从同步延迟造成数据不一致

3、为啥删除缓存,是因为大部分业务场景下修改缓存代价太大,并且对象、文本类型数据修改操作太复杂

4)实践:

在redis中实践最常见

四、进程内缓存运用

1、问题:多个节点的数据同步问题(CAP理论的最经典应用)

解决方案一: 一致性hash缓存,问题是违背了服务器无状态准则,一般不推荐使用

解决方案二: 利用elastic—job定时或者mq实时通知所有节点,只能用在少量节点的情形

2、场景:

1)很少变化的数据,业务上允许不一致

例如马蜂窝使用OHC 堆外缓存在推荐系统中增加本地容灾

2)需要支持非常高的并发,例如秒杀系统, 可以使用guava作为堆内缓存,来达到定时过期,定时刷新,异步刷新 的效果

五、缓存的负面作用

1、缓存雪崩

问题:

1)缓存系统宕机 2)流量激增(高并发的写缓存)3)缓存同时批量过期

对应的解决方案 :

1)缓存系统高可用

2)加锁或者排队限制高并发的写缓存

3)增加随机值避免同时失效

2、缓存穿透

定义:

所需的数据在DB中就不存在

解决方案:

1:布隆过滤器(boomfilter) ,缺点是无法确保100%的准确

2:缓存空对象,缺点是会消耗很多内存

六、代码设计注意项

1、设计查询时走缓存的数据要符合业务逻辑

2、一般情形下,代码中一定要保证查缓存时数据未查到或者出现异常,能够正常去调用第三方或者直接查询数据库,排除上述用堆外缓存做最后一道容灾的情形

3、缓存要按照业务逻辑设置时效性,持久的缓存可以设置定时任务去更新,临时性的缓存失效后查询时主动更新

4、业务逻辑不要依赖临时缓存数据的准确性,还是应该去走数据库

5、储存用户session的缓存信息redis需要固化,储存其他业务的缓存信息的redis为保证数据一致性可以选择不固化。

6、高并发情形,缓存预热非常有必要性

限时分享面试&学习福利资源

好资料第一时间分享,中华石杉老师的 分布式面试突击 视频教程,最清晰整体的 微服务全面解读 的PDF, 体系化的Java路线 资料整理的Github, 亿级电商架构 的视频实战课程,你值得拥有

获取方式: 关注公众号 乔志勇笔记 , 后台回复"学习资料" !!!

YZNv2uQ.jpg!web

近期文章:

BAT 企业技术架构

如何开始架构设计

高性能架构模式

储存高可用架构

到底如何理解CAP

微服务架构————基本组件

微服务实战问题

微服务架构进阶

秒杀系统设计

5种分布式锁实现的对比?

Java并发编程学习体系

java8 Stream 史上最全总结

如果你喜欢本文

请长按二维码,关注 乔志勇笔记

nUVryqI.jpg!web

转发 朋友圈 ,是对我最大的支持哟

如果你喜欢这篇文章,在看,转发吧。

相信明天更加美好 (*^__^*) 


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK