mysql+redis缓存策略常见的错误

  1. 什么时候应该更新缓存

    应该是从数据库读取数据后,再更新缓存,从缓存读取到数据,就不需要再重新写缓存了,一个常见的错误是,每次访问接口都更新缓存,这样的话,如果接口一直有流量,那么db中的数据,就一直没有更新的机会了,每次访问,都给续上时间了

  2. 数据更新时,是否需要同步更新缓存

    可以更新,但是没法保证双写一定能够成功,所以存在缓存的情况下,是没有办法避免db与cache不一致的情况的,同步更新,只能缓解不一致的情况,没法完全避免

  3. 给mysql的表添加一个redis缓存,当数据修改时,一般有以下两种方案

    i. 先写mysql、再更新cache

    ii. 先更新cache、再写mysql

    哪一个更合理

上述两种方案,均有两个步骤,每个步骤都存在出错的可能,方案2,存在一个问题,就是删除redis成功后,可能别的线程在访问数据时,又会把老数据写回redis, 会导致不一致的问题,所以只能选方案一

缓存带来的复杂度并不算低,并且一旦引入缓存,一致性的问题就没有办法避免了,如今基于level db/rocks db的分布式kv存储引擎,在性能上,已经接近redis了,而且提供了持久化的功能,在很多业务场景,直接使用,替代mysql+redis,并不会存在性能问题,而且比mysql+redis的方案更加简洁

https://github.com/XiaoMi/pegasus

https://github.com/alibaba/tair

posted @ 2020-01-14 18:24  xsirfly  阅读(328)  评论(0编辑  收藏  举报