NOTE

3.3 如何设计一个缓存中间件

1. 什么是缓存中间件 - 通用缓存的基础设施 2. 为什么需要缓存中间件 - 为应用层屏蔽缓存的读写、并发安全、缓存淘汰、分布式支持等细节 3. 如何设计缓存组件 3.1. 基本读写 - 比如HashMap能实现O(1)的读写效率 3.2. 并发安全 多线程同时读写缓存会出问题,如何解决? 3.2

系统设计创建于 更新于 约 1 分钟读完historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 什么是缓存中间件

  • 通用缓存的基础设施

2. 为什么需要缓存中间件

  • 为应用层屏蔽缓存的读写、并发安全、缓存淘汰、分布式支持等细节

3. 如何设计缓存组件

3.1. 基本读写

  • 比如HashMap能实现O(1)的读写效率

3.2. 并发安全

多线程同时读写缓存会出问题,如何解决?

3.2.1. 加锁

3.2.2. 日志异步更新

  • 参考数据库的设计,将所有的更新写入日志中,后台进程读取日志进而更新缓存

3.3. 缓存淘汰策略

3.4. 分布式

3.4.1. 复制式缓存

  • 进程内缓存+分布式系统复制.md
  • 优点:进程内访问效率高
  • 缺点:
    • 各个节点需要同步数据,节点越多同步越慢
    • 一致性差

3.4.2. 集中式缓存

  • 单独的缓存进程+网络访问
  • 优点:
    • 各个节点不需要同步数据
    • 一致性好
  • 缺点:
    • 需要网络访问效率低点

4. 例子

4.1. Redis

4.2. Caffeine

5. 参考

讨论

使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看