允许cache miss的缓存还修场景,不管是究竟memcache还是redis,当被缓存的淘汰内容变化时,是缓存还修改修改缓存,还是究竟淘汰缓存?这是今天将要讨论的话题。 问:KV缓存都缓存了一些什么数据?淘汰 答: 问:淘汰缓存中的缓存还修这些数据,修改缓存中的究竟这些数据,有什么差别?淘汰 答: 可以看到,差异仅仅在于一次cache miss。源码库 问:缓存中的value数据一般是怎么修改的? 答: 结论:对于对象类型,或者文本类型,修改缓存value的成本较高,一般选择直接淘汰缓存。 问:对于朴素类型的数据,究竟应该修改缓存,还是淘汰缓存? 答:仍然视情况而定。 案例1: 假设,缓存里存了某一个用户uid=123的余额是money=100元,业务场景是,购买了一个商品pid=456。香港云服务器 分析:如果修改缓存,可能需要: 为了避免一次cache miss,需要额外增加若干次db与cache的交互,得不偿失。 结论:此时,应该淘汰缓存,而不是修改缓存。 案例2: 假设,缓存里存了某一个用户uid=123的余额是money=100元,业务场景是,需要扣减30元。 分析:如果修改缓存,需要: 为了避免一次cache miss,需要额外增加若干次cache的交互,以及业务的计算,得不偿失。 结论:此时,应该淘汰缓存,而不是修改缓存。 案例3: 假设,缓存里存了某一个用户uid=123的余额是money=100元,业务场景是,余额要变为70元。 分析:如果修改缓存,需要: 修改缓存成本很低。 结论:此时,可以选择修改缓存。当然,如果选择淘汰缓存,只会额外增加一次cache miss,成本也不高。 总结: 允许cache miss的KV缓存写场景: 任何脱离分析的技术方案都是耍流氓。 【本文为专栏作者“58沈剑”原创稿件,转载请联系原作者】 戳这里,看该作者更多好文