缓存常用于读多写少的场景,用于缓存结果数据,降低响应时间,提高服务性能。
通常缓存与数据库一起使用,数据库负责持久化,缓存负责高性能。
数据库无法同时满足持久化与高性能,所以引入缓存解决高性能问题。
缓存与数据一起使用时,何时操作缓存,是在操作数据库之前还是之后,如何操作缓存,是更新还是删除,操作失败是否会产生较大影响,都是我们需要考虑的重点问题。
在讨论具体问题前需要明确一下关键点:
缓存更新策略目标是?
目标是尽可能读取到正确数据。
何为正确数据?
以数据库数据为准,读取到当前数据库的最新数据即为正确数据。
要求读强一致吗?
不要求。该场景要求尽可能读取到正确数据。不使用复杂的2PC或Paxos多数派协议技术,尽可能降低并发时脏数据的概率。
与多副本数据一致性技术场景相似吗?
不相似。多副本数据一致性解决的是可用性问题,要求多数副本全量数据一致。数据库与缓存解决的高性能的问题,要求尽可能读取到正确数据即可,不要求缓存中有全量数据。
将缓存和数据库看成一个单一存储?
不将缓存和数据库看成一个单一存储。本场景中由应用协调缓存与数据库异构存储来满足服务高性能场景需求。
更新策略重点
缓存更新策略目标是尽可能读取到正确数据。
应用协调操作 缓存 和 数据库。
缓存操作分为 更新 和 删除。
缓存和数据库操作都存在失败情况。
应用并发操作