课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
缓存功能的应用与学习是大多数软件编程开发程序员都应该熟练掌握并应用的一个编程技能,下面我们就通过案例分析来简单了解一下,缓存技术应用优化常用方法。
一、雪崩优化
缓存雪崩:由于缓存层承载着大量请求,有效保护了存储层,但是如果缓存层由于某些原因不能提供服务,于是所有的请求到达存储层,存储层的调用量会暴增,造成存储层级联宕机的情况。预防和解决缓存雪崩问题可以从以下几方面入手。
(1)保证缓存层服务的高可用性,比如一主多从,RedisSentine机制。
(2)依赖隔离组件为后端限流并降级,比如netflix的hystrix。
(3)项目资源隔离。避免某个项目的bug,影响了整个系统架构,有问题也局限在项目内部。
二、热点key重建优化
开发人员使用"缓存+过期时间"的策略来加速读写,又保证数据的定期更新,这种模式基本能满足绝大部分需求。但是如果有两个问题同时出现,可能会对应用造成致命的伤害。
当前key是一个hotkey,比如热点娱乐新闻,并发量非常大。
重建缓存不能在短时间完成,可能是一个复杂计算,例如复杂的SQL,多次IO,多个依赖等。
当缓存失效的瞬间,将会有大量线程来重建缓存,造成后端负载加大,甚至让应该崩溃。要解决这个问题有以下方案:
1、互斥锁
具体做法是只允许一个线程重建缓存,其它线程等待重建缓存的线程执行完,重新从缓存获取数据即可。这种方案的话,有个风险就是重建的时间太长或者并发量太大,将会大量的线程阻塞,同样会加大系统负载。优化方法:除了重建线程之外,其它线程拿旧值直接返回。
2、永不过期
这种就是缓存更新操作是独立的,可以通过跑定时任务来定期更新,或者变更数据时主动更新。
3、后端限流
以上两种方案都是建立在我们事先知道hotkey的情况下,如果我们事先知道哪些是hotkey的话,其实问题都不是很大。问题是我们不知道的情况!既然hotkey的危害是因为有大量的重建请求落到了后端,如果后端自己做了限流呢,只有部分请求落到了后端,其它的都打回去了。一个hotkey只要有一个重建请求处理成功了,后面的请求都是直接走缓存了,问题就解决了。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。