在高并发环境下,缓存与数据库,哪个优先级更高?
- 内容介绍
- 文章标签
- 相关推荐
咱们先别急着上硬核方案,回到原点思考一下。为什么我们需要缓存?
MQ的一大优势就是自带重试机制。如果消费者删除失败了MQ会自动把消息重新投递过来直到成功为止。 我晕... 如果重试多次还是不行,还可以把消息扔进死信队列,人工介入处理。
为什么要休眠?就是为了等那个“倒霉”的读请求把旧数据写进缓存。等它写完了我再来一次删除,把它的劳动成果清空。 雪糕刺客。 这样就能保证到头来缓存里要么是空的,要么是下次读请求重新填的新数据。
纯属忽悠。 优化实践示例:假设一个高并发应用需要优先初始化缓存客户端和数据库连接池,再初始化业务Bean.它拥有比~@Order~更高的优先级,用于决定自动配置类之间的加载顺序.
一、 高并发场景下Bean加载顺序的挑战与优化目标
他破防了。 在高并发或要求快速弹性伸缩的微服务环境中,应用的启动速度至关重要.
事实上... 这种方案虽然好,但对业务代码有一定的侵入性,你得引入MQ客户端,还得处理消息发送的逻辑。不过为了系统的稳定性,这点代价通常是值得的。
太坑了。 这时候,缓存里存的是A的旧值,数据库里是B的新值。两边又不一致了。而且,这个方案还有一个很现实的问题:浪费资源。如果缓存数据不是简单的字符串, 而是要经过复杂的计算、聚合才能得出后来啊,那你每次写数据库都要算一遍,CPU不干了吗?
如果你觉得上面的方案还不够完美, 或者你的系统对一致性要求到了“变态”的程度,那我们还有更高级的招数。
当然架构复杂度也会随之上升,你需要维护Canal、MQ等一系列中间件。 反思一下。 但对于高并发、大数据量的系统来说这笔投入绝对是划算的。
既然先删缓存不行,那再说说一种方案:先写数据库,成功之后再删缓存。
更别提那些“写多读少”的业务场景了你辛辛苦苦算出来写进缓存, 我可是吃过亏的。
咱们先别急着上硬核方案,回到原点思考一下。为什么我们需要缓存?
MQ的一大优势就是自带重试机制。如果消费者删除失败了MQ会自动把消息重新投递过来直到成功为止。 我晕... 如果重试多次还是不行,还可以把消息扔进死信队列,人工介入处理。
为什么要休眠?就是为了等那个“倒霉”的读请求把旧数据写进缓存。等它写完了我再来一次删除,把它的劳动成果清空。 雪糕刺客。 这样就能保证到头来缓存里要么是空的,要么是下次读请求重新填的新数据。
纯属忽悠。 优化实践示例:假设一个高并发应用需要优先初始化缓存客户端和数据库连接池,再初始化业务Bean.它拥有比~@Order~更高的优先级,用于决定自动配置类之间的加载顺序.
一、 高并发场景下Bean加载顺序的挑战与优化目标
他破防了。 在高并发或要求快速弹性伸缩的微服务环境中,应用的启动速度至关重要.
事实上... 这种方案虽然好,但对业务代码有一定的侵入性,你得引入MQ客户端,还得处理消息发送的逻辑。不过为了系统的稳定性,这点代价通常是值得的。
太坑了。 这时候,缓存里存的是A的旧值,数据库里是B的新值。两边又不一致了。而且,这个方案还有一个很现实的问题:浪费资源。如果缓存数据不是简单的字符串, 而是要经过复杂的计算、聚合才能得出后来啊,那你每次写数据库都要算一遍,CPU不干了吗?
如果你觉得上面的方案还不够完美, 或者你的系统对一致性要求到了“变态”的程度,那我们还有更高级的招数。
当然架构复杂度也会随之上升,你需要维护Canal、MQ等一系列中间件。 反思一下。 但对于高并发、大数据量的系统来说这笔投入绝对是划算的。
既然先删缓存不行,那再说说一种方案:先写数据库,成功之后再删缓存。
更别提那些“写多读少”的业务场景了你辛辛苦苦算出来写进缓存, 我可是吃过亏的。

