death00
death00
我的dubbo-consumer.xml中是这么写的: `` 但是在代码中想调用service的时候,利用spring的`@Autowired`标签注入,结果运行的时候是找不到的 ` @Autowired` ` private INTBPublishCPEZService INTBPublishCPEZService;` 报的错是: `org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'INTBPublishCPEZService': FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException` 请问我的消费方具体应该怎么写呢
那试试先更新数据库,成功后再失效缓存。
@kelekle 缓存一致性的话,比较认可的是 Cache-Aside,就是针对修改数据的操作,一般都是先修改DB,成功后,再删除缓存。 如果你考虑到删除缓存失败的话,就考虑将删除缓存的操作放入你的mq中。(如果是Java的话,我是用的AOP的方式) 如果你觉得这样的做法对业务代码侵入性大的话,那就考虑订阅数据库的log(比如 MySql 的 binlog),然后专门进行缓存的更新。现成的组件就是 otter 这种。
@kelekle 一般的场景,都是读多写少的(比如:读写比是100 : 1),所以缓存失效的情况相对而言会很少,缓存的利用率还是比较高的。 如果你是数据频繁更新的场景(比如:读写比是 2 : 1),采用这样的策略确实比较浪费。我的想法是,这样的数据就不用实时入库,可以先保存在缓存中,然后定期刷新到数据库中,无需保证数据的一致性。