TOC

缓存策略

什么地方需要缓存?

  • DB 查询,加上缓存可以减小数据库压力,同时提升性能。
  • 某些费时费资源的操作,加上缓存可以避免重复计算。

缓存方式

  1. 本地缓存
  2. 进程内缓存(内存)
  3. 磁盘缓存
  4. 缓存服务(redis/memcache)
  5. 数据库:有些任务可以提前进行计算,将结果存在数据库中。

本地缓存的问题是多个节点之间容易出现数据不一致的情况。我听说过 Java 的一些本地缓存组件,应该其中有一些可以做到多个节点之间的数据同步。如果要是自己实现的话,可以在服务中增加一个刷新缓存的接口调用,其中一个节点刷新缓存时,调用其他节点的刷新接口。也可以引入 MQ,避免这个调用造成的耦合和可能的性能损耗。

缓存策略

  1. 提前进行一些计算,将内容缓存起来。如有必要,可以选择合适的时间间隔进行数据刷新。
  2. DB 缓存可以由数据库中间层来做,也可以有客户端库来做,或者就在应用的数据库层中实现。
    查询时,先尝试本地缓存,再尝试缓存服务(两道缓存,避免击穿),最后再进行数据库查询。
    缓存的数据应该是这样的:
  3. 高命中(缓存命中率需要做好监控)
  4. 较少变更
  5. 尽可能保证数据变更之后(不一致问题)不会产生严重影响
    如果一致性要求很高的话,要反复确实是否必须使用缓存,如果确定的话,缓存刷新策略需要考虑清楚。