Web 应用程序的缓存方案如何选择?
当 Web 应用程序遇到流量增长,上缓存就是必须的手段,因为缓存让我们不再读取磁盘,减少 IO,是个能快速提升系统性能的手段。论方法,Web 程序使用的缓存有两种:进程内和进程外。
- 进程内的缓存:使用诸如 Python
@lru_cache
之类的方法在进程里面缓存住返回值。好处是没有方法能比它更快了更简单了,你甚至不需要做序列化,任何编程语言的对象或者结构数据都能放进缓存。缺点是没法在进程间共用,程序重启需要重新构建缓存。 - 进程间的缓存:使用诸如 Memcached,Redis 等工具。利弊和上面相反,速度降了,需要做数据序列化,但能多进程多主机共用,程序重启不影响缓存。
引入缓存后,一个特别需要注意的问题就是何时让缓存过期,毕竟方法过段时间可能会返回不同的值。最简单的方法是设置过期时间,例如 1h, 1d 等。另外的做法是做更新或删除操作的时候主动清缓存,不过实现就麻烦了,尽管大多人会选择这个方案。