这里的缓存指的是分布式缓存,而非应用程序本身的内存。
合理使用缓存,能把应用的访问速度大大的提升。
假设一个数据需要经过复杂的运算,从再从遥远的多个数据库中查询而得到,那么这个数据获取的代价是比较昂贵的。
如果这个数据不经常变化,而且读的次数远大于更新的次数,那么就可以把数据放到缓存中来,等待下次需要获取这个数据的时候,直接从缓存中获取,避免再次进行复杂计算和远程获取合并等操作带来的耗时。
缓存的基本原理是 通过空间换取时间。
因为使用缓存等于把指定的数据保存在多个地方,这里涉及到两份数据之间如何做同步。
这里有两个方案:
1.缓存产品提供接口来同步,访问缓存提供的api来操作数据,这些数据会同时保存在缓存和数据库中,实现数据的同步,但是目前这样的产品还是有一定的限制。
2.通过应用的逻辑来同步,即手工同步。每次需要更新数据的时候,不仅仅要更新数据库,同时要更新缓存,这些都由应用来操作。
本文的正题:
应用应该统一规划对数据库的修改,避免在修改了数据库涉及缓存的数据时,没有同步数据的修改到缓存。
因为正常的应用联机逻辑,在使用到缓存的地方一般都会注意到缓存和数据库数据的同步修改。但是由于项目过大,在批量层面往往存在一些操作会对缓存涉及的数据进行修改,而这里的修改往往会把缓存的同步给忽略,从而导致问题的发生。
这是笔者在做项目时的一点经验,因为使用缓存的次数不多,经验有限,在于纪录下来,省己警人。