地址是一个人的属性,并且这个属性经常变化。
地址是生活的必需,给别人寄信需要地址,在网上买东西需要地址。
寄信很简单,寄信前获知对方现在的地址,然后在信封上手工写一次即可。
由于人类一直在不停地迁徙,所以自身的地址经常在变化。
在网上买东西时由于不慎出现过两次错误。

京东购物经历

2014年11月,当时我刚搬家,在京东上买了些小家电,
在下单页面我发现地址还是之前的地址,所以新增了一个现在的地址。
如果就这么正常下单,当然没问题了。
京东下单支持两种方式:
1:加入购物车
2:轻松购(必须登录才会显示)
我认为我已经修改了地址,没什么疑虑了,所以选择了轻松购,支付。
支付成功后我看了下订单详情,发现地址还是之前的地址,没有改过来。
立马给京东客服打电话,
我: 能不能更改下地址?
客服:订单一旦生存,就不能更改地址,但可以取消订单。
我: 我是在线支付的,无法取消订单。
客服:你可以尝试联系送货员,如果相差不远,送货员可以协调下。
我: 相差几十公里啊。
客服:那就没有办法了。
我表示无语,在线支付的不能取消订单,货到付款的却可以取消订单。
我买的东西还不少,后来没办法,回到我原来住的地方,打的花了两百多才把东西弄回来。
这个事情搞得我当时火冒三丈,我一定要弄清楚为何会出现wrong address。
我明明已经修改了地址,但是下单后却发现地址没有更改。
我重新走了下流程,正常下单,ok,地址成功更改过来。
点击轻松购,我晕,地址还是之前的地址,为何呢?
仔细查看了账户设置页面,发现轻松购为了提高购物效率,绑定了地址。
而我默认绑定的地址是我之前的地址,我修改的地址是下单过程中的地址,而不是默认绑定地址。
这导致了我的悲剧,从此再也不用轻松购。
备注:现在的轻松购中可以选择地址,而不是之前的绑定地址,看来京东修复了这个bug。

微信购物经历

第一次在罗辑思维公众号里买一本书,下单时候发现地址是我之前设置的地址。
微信商城只支持读取用户地址,而不支持手动输入。
造成我回到设置界面更改地址后返回商城,以为读取的地址自然同步过来了,
下单后才发现,地址还是之前的地址,你必须在下单页面重新选择地址。
从这里可以看出用户设定地址后存到数据库,商城读取接口获得地址,没有任何问题。
但用户更改地址后,页面显示的地址依旧是老地址,必须重新选择一次才是新地址。
到底是哪里出了问题?
微信接口数据有延迟吗?
很明显不是,因为我们已经看到更新后的数据了。
原因是:开发者对缓存策略使用不当
第一次读取地址后缓存起来,下次进来后发现有缓存,直接读取缓存,而没有读取接口。
正确策略是:在读取地址这块应该优先读取接口,没有网络再读取缓存。

总结

如果数据经常变化,或者用户可以更改这个数据,那最好是优先读接口,没有网络再读缓存。
如果数据很少变化,或者用户更改不了这个数据,那最好是优先读缓存,缓存miss再读接口。