缓存一致性问题

缓存读

缓存更新

缓存并发问题

缓存系统存在根本的问题是缓存的读写和数据库读写不是原子的, 因此它必然会出现并发的问题.

缓存并发解决思路

引入全局锁

例如Redis就有锁机制, 通过redis实现全局锁(行锁), 更新的时候设置排它锁, 不允许读取操作即可.

这就和数据库之中的悲观锁是一个性质的, 这种系统最大的问题就是吞吐量限制, 每次必须查询锁的状态

引入消息队列

或者使用乐观锁的实现方式, 就是引入消息队列, 消息队列相对于全局锁的优势在于:

  1. 可以合并一部分的更新操作, 例如2次更新之间没有任何读取, 就可以将更新合并
  2. 可以和流控系统结合, 消息队列可以用于请求的流控, 通过流控系统可以实现缓存读取的分布式化

缺点就是, 系统架构越来越复杂了, 流控系统的可靠性成为系统的关键.