本地缓存的使用问题?

在项目中使用本地缓存来提高响应速度,缓存的值是否应该是只读的类型,而不能是需要拿来进行逻辑判断的?
例如这样的场景:缓存热点商品的id,描述等信息(只读的),对于商品库存这些需要读取然后进行逻辑判断的值,是不是不能用本地缓存来做。

阅读 2.4k
2 个回答

本地缓存最大的问题就是数据的同步问题以及和其他节点数据不一致的问题,不过本质上都是一个问题。如果能解决这个问题就可以拿来判断,解决不了或者没解决方案那读都不一定可以用。给你举个例子
场景1: 本地缓存中国的所有省市
场景2: 本地缓存商品库存
场景1的数据明显可以长期缓存,也不会存在多台机器数据不同的情况
场景2的数据明显是可能存在变化,并且没有特殊手段保证多台机器会存在数据不一致问题从而导致代码执行逻辑不一致的情况
举这两个场景只是想说明极端情况下哪些数据可以缓存,哪些是不可以的,但是实际业务场景中大多数都是处于两个极端场景中间,具体能否缓存需要结合业务去看,基本需要考虑一下几点

  • 是否允许不同机器数据不一致,或者说短期不一致
  • 如果允许短期数据不一致,那是否有数据同步手段,极端情况是否会出现数据无法同步
  • 本地缓存会导致排查问题困难不

最后三方缓存一次访问1ms不到,考虑一下吧

判断数据能不能放在本地缓存中,我觉得可以不需要用“能否进行逻辑判断”来做判断。只要确定会不会更新这个数据(只读),是不是读多写少,以及有没有条件去更新这个缓存。

比如库存这个值,从字面上来看,库存是可能会经常变化的。然后在部署多个实例的情况下,如果缓存在本地,就有可能出现不同实例之间的本地缓存不一致,导致每次查询的结果不一致的情况,并且还可能出现错误。

所以需要有机制去同步不同实例之间的本地缓存数据,如果做到这个,商品库存也是可以放在本地缓存中的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题