如果数据库已经提供缓存,为什么要使用应用程序级缓存?

新式数据库提供缓存支持。大多数ORM框架也缓存检索到的数据。为什么这种重复是必要的?


答案 1

因为要从数据库的缓存中获取数据,您仍然必须:

  1. 从ORM的“本机”查询格式生成SQL
  2. 执行到数据库服务器的网络往返
  3. 解析 SQL
  4. 从缓存中获取数据
  5. 将数据序列化为数据库的在线格式
  6. 将数据反序列化为数据库客户端库的格式
  7. 将数据库客户端 librarie 的格式转换为语言级对象(即任何内容的集合)

通过在应用程序级别进行缓存,您不必执行任何操作。通常,它是对内存中哈希表的简单查找。有时(如果使用memcache缓存)仍然有一个网络往返,但所有其他事情不再发生。


答案 2

以下是您可能希望这样做的几个原因:

  • 应用程序仅缓存它需要的内容,因此您应该获得更好的缓存命中率
  • 由于网络延迟,访问本地缓存可能比访问数据库快几个数量级 - 即使使用快速网络也是如此