在项目中有一个需求:
为了提升读取数据的效率,往往会利用guava来做本地缓存,下面举一个场景:
每一个用户进来,都需要取到用户自己的信息,那么我们该如何做才能让用户更快的拿到自己的信息而又不影响服务器的性能呢?没错,是缓存;那么缓存也有很多种,有本地缓存,也有远程缓存,更有关系型数据库保存的,那我们该如何才可以让性能达到最优呢?
首先,我们调用guava相关API看看guava里面有没有缓存了用户对应的信息,如果有,那么直接返回给用户,这样子效率是最高的,因为这是直接从本地内存里面取得的;假如说,没有呢?那么我们就该去远程缓存里面取了,redis也保存一份用户的数据,拿出来后,跟着返回给用户,并保存一份在guava里面,这动作是自动的;如果redis里面依然没有,那么我们就该往关系型数据库里面去拿了,拿出来之后,会直接保存一份在guava的,这样子,当用户第二次来拿的时候,就不需要去查询redis和关系型数据库了;
当然,肯定有人会问,假如说修改了数据之后,那么redis如何更新,guava如何更新,从而保证数据的一致性呢??方法是有的,但是这个方法也并不是实时的保证一致性,总之是最终一致性,更新的顺序是,先把redis的数据删除掉,然后更新关系型数据库的数据,再插入redis,这样子就保证了非关系跟关系型的数据库保证了一致性了,那怎么更新gua