缓存

1. 主动写缓存与被动写缓存

缓存

相对来说,被动写缓存对缓存一致性的保障更好。

一般缓存一致性保障方法:

  • 补偿机制
  • 定期全量或增量build
  • 失效机制

2. 自定义注解实现缓存

由三部分组成,可参考 https://www.jianshu.com/p/9c2771b75488

1. 自定义注解

public @interface SetCache {}

public @interface ClearCache {}

2. 缓存操作实现类

实现对缓存的具体操作,例如具体如何插入,插入前要作何处理等等。

3. AOP实现类

切入点为自定义注解,当遇到自定义注解时,提取参数,执行缓存操作实现类。

3. 缓存位置

引用他人的见解:

前置的要求:领域建模(白名单模型)要做好,保证Tair中内容的存储结构不轻易改变。否则,一旦Tair中内容的存储结构发生变化,Client端就要一起改变。

而在后置中,会用Repository层(仓库层)隔离业务层和数据层,这样数据层Tair的存储结构改变不会影响业务层。

做缓存前置要满足以下要求

  1. 需要是稳定的查询接口。接口怎样才能稳定?领域建模和服务建模做好,接口自然稳定。
  2. 需要是架构分层合理的系统,并且tair里存领域对象而不是PO。
  3. 最关键的一点是收益要足够大,体现在两个方面:a、节省机器量要百台以上;b、能大幅度提升高访问量接口的rt(网络开销是影响rt主因的情况)

如果系统符合以上三点要求,可以考虑缓存前置。否则完全没必要。