Database 什么是缓存?

Database 什么是缓存?,database,caching,Database,Caching,我经常听说y个人有性能问题x,他们通过缓存解决了这个问题 或者,在程序代码中执行x、y、z会如何影响缓存能力 即使在最新的播客中,杰夫·阿特伍德也谈到了如何缓存某些值以快速检索 “缓存”和“缓存”这两个术语似乎有些含糊不清,这让我对它在不同情况下的含义感到困惑。无论您是指应用程序还是数据库缓存、cpu等,以及这意味着什么 什么是缓存以及缓存的不同类型是什么? 从上下文中我能感觉到, 将经常检索到的值存储到 主内存和快速查找 访问它。然而,这是什么 真的吗 这个词似乎在很多不同的上下文中使用,但含

我经常听说y个人有性能问题x,他们通过缓存解决了这个问题

或者,在程序代码中执行x、y、z会如何影响缓存能力

即使在最新的播客中,杰夫·阿特伍德也谈到了如何缓存某些值以快速检索

“缓存”和“缓存”这两个术语似乎有些含糊不清,这让我对它在不同情况下的含义感到困惑。无论您是指应用程序还是数据库缓存、cpu等,以及这意味着什么

什么是缓存以及缓存的不同类型是什么?

从上下文中我能感觉到, 将经常检索到的值存储到 主内存和快速查找 访问它。然而,这是什么 真的吗

这个词似乎在很多不同的上下文中使用,但含义略有不同(cpu、数据库、应用程序等),我真的想澄清一下

应用程序中的缓存与数据库缓存之间有区别吗?

当有人说他们找到了一个 一段会影响缓存的代码 在他们修复之后,情况有所改善 他们应用程序的速度是多少 谈论什么

程序在缓存什么吗 这是自动完成的吗?怎么办 您允许将值缓存在数据库中 程序?我经常在网上阅读用户 这个网站说他们缓存了一个值 在他们的申请中,我坐在这里 不知道它们是什么意思

还有,这到底意味着什么 有人谈论数据库 缓存?这仅仅是一个特性吗 他们打开了数据库?做 您必须显式缓存值或 数据库是否选择要删除哪些 你的缓存

如何开始缓存项目以提高性能?

您能给我一些示例,说明如何开始在我的应用程序中缓存值吗?或者,这是不是已经完成了,在幕后,我只需要以一种特殊的方式编写代码来允许“缓存”

关于数据库缓存,我该如何开始呢?我听说过memcache之类的东西。在数据库中缓存是否需要这种类型的实用程序


我希望能够很好地区分应用程序和数据库中的缓存,它们是如何使用的,以及在这两种情况下是如何实现的。

缓存是获取长时间或cpu密集型算法的结果并保存答案,这样您就不必再次运行该算法,您只需重复使用结果。

这可能比您想象的要容易——这就是人们试图关闭它的原因

它只是意味着将这些值存储在内存中,而不是每次都返回数据库

有很多方法可以做到这一点,但概念本身并不重要


编辑:它也可以在任何级别上进行--任何需要很长时间的操作都可以缓存到您可以更快访问的地方。

在数据库中缓存通常是数据库的一项功能,由数据库自动管理。应用程序中的缓存将因平台而异

对象缓存是一种机制,您可以使用它将常用对象放入内存,这样您就不需要支付检索数据和重新创建数据的费用。这通常通过代码进行管理,并根据您使用的缓存解决方案而有所不同

有一些分布式缓存解决方案涉及在多台服务器上设置服务,为您提供各种缓存场。这提供了可伸缩性和冗余。客户端可以通过网络请求缓存的信息。同样,这是代码中的手动过程。分布式缓存提供程序的一个示例是memcached:


特定类型的缓存的一个示例是asp.net缓存。Asp.net支持多种缓存。还有传统的对象缓存(它可以用于各种.net应用程序,而不仅仅是网站)。还有缓存功能,允许您配置页面和用户控件以自动缓存其输出。这不会缓存数据,而是缓存最终结果(页面的HTML),当用户使用与前一个用户相同的查询字符串parms请求相同的页面时,会将结果提供给上一个用户。

缓存只是显式或隐式地将数据存储在高性能存储(通常是内存)中并从中检索数据的做法

让我解释一下。内存的访问速度比文件、远程URL(通常)、数据库或任何其他您喜欢的外部信息存储更快。因此,如果使用其中一种外部资源的行为是显著的,那么您可能会从缓存中获益,从而提高性能


Knuth曾经说过,过早优化是万恶之源。就我而言,过早缓存是所有头痛的根源。除非你有问题,否则不要解决问题。你所做的每一个决定都要付出代价,你现在就实施它,以后再改变它,这样你就可以推迟做决定的时间越长,改变你的系统就越好

因此,首先确定您确实存在问题以及问题所在。分析、日志记录和其他形式的性能测试将对您有所帮助。这一步有多么重要,我怎么强调都不过分。我看到人们“优化”一些不成问题的东西的次数是惊人的

好的,那么您有一个性能问题。假设您的页面正在运行一个需要很长时间的查询。如果是读取,则您有许多选项:

  • 将查询作为单独的进程运行,并将结果放入缓存。所有页面只需访问缓存即可。您可以根据需要随时更新缓存版本(每天一次、每周一次、每5秒一次,视情况而定)
  • 通过持久性提供程序、ORM或其他方式透明地缓存。当然,这取决于什么
    function f(n)
        if n < 2 then
            return n;
        return f(n - 1) + f(n - 2)
    
    fib_cache = {}
    
    function f(n)
        if n < 2 then
            return n;
        if fib_cache.contains(n) then
            return fib_cache[n]
        fib_cache[n] = f(n - 1) + f(n - 2)
        return fib_cache[n]