我正在修改redis和mysql,看看缓存如何提高性能。从缓存中访问数据比从数据库中访问数据要快。
我在程序中计算了这两种情况所需的时间,发现从缓存访问比从数据库访问慢得多。我想知道可能是什么原因。
需要考虑的几点:
- 我正在使用Azure Redis缓存
- 主应用程序在VM实例上
- 我在另一个VM实例上托管了MYSQL服务器
- 这张桌子很小,有200-300张唱片
- 时间计算逻辑没有错误
编辑:
缓存加载时间=约1.2s
mysql的加载时间=约15ms
事实证明,我的应用程序和MySQL服务器在同一个区域,而redis缓存在全球不同的区域,导致了更高的延迟。
但我仍然希望有人解释为什么sql的获取时间要小得多
如果200-300行的表被完全缓存在MySQL的"缓冲池";,那么就不需要花太多时间来获取所有的数据并将其发送回客户端。15毫秒是合理的(尽管这取决于太多的事情,不能更具体(。
如果你正在获取一行,并且你有一个索引(特别是PRIMARY KEY(来定位这一行,我预计它会比15ms更快。
我正在总结一张40K行的表格;耗时不到2毫秒。但请注意:客户端和服务器在同一台机器上。15毫秒可以表示客户端和服务器相距几百英里。
一个简单的SELECT 1
需要多长时间?这将给你一个延迟的线索,低于这个延迟,你就不能不改变机器的物理位置。