Redis缓存与直接使用内存


141

我还没有使用过Redis,但是我听说过它,并打算尝试将其作为缓存存储。

我听说Redis使用内存作为缓存存储数据库,那么如果我使用变量作为对象或字典数据类型来存储数据有什么区别?喜欢:

var cache = {
    key: {

    },
    key: {

    }
    ...
}

Redis有什么优势?

Answers:


221

Redis是一个远程数据结构服务器。这肯定比仅将数据存储在本地内存中要慢(因为它涉及套接字往返以获取/存储数据)。但是,它也带来了一些有趣的属性:

  • 您的应用程序的所有进程都可以访问Redis,它们可能在多个节点上运行(某些本地内存无法实现)。

  • Redis内存存储非常有效,并且是在单独的过程中完成的。如果应用程序在其内存被垃圾回收的平台(node.js,java等)上运行,则它可以处理更大的内存缓存/存储。在实践中,非常大的堆在使用垃圾收集语言时效果不佳。

  • 如果需要,Redis可以将数据保留在磁盘上。

  • Redis不仅仅是一个简单的缓存:它提供各种数据结构,各种逐出策略,阻止队列,发布/订阅,原子性,Lua脚本等等。

  • Redis可以使用主/从机制复制其活动,以实现高可用性。

基本上,如果您需要应用程序在共享相同数据的多个节点上扩展,则将需要Redis(或任何其他远程键/值存储)之类的东西。


5
您的最后一点尤其使Rlite之类的东西看起来毫无意义-字典存储将在大多数具有单个进程的用例中同样适用。那正确吗?
naught101

1
是。IMO对Rlite的兴趣非常有限。
Didier Spezia 2015年

感谢这些提示,因此Redis可以很好地扩展,但是我假设在一个简单的chat'app中平均要记住300-500个对象的情况下,内存中的数据结构将很好地完成工作,因为自写以来人数少吗?
Webwoman

2
@DidierSpezia very large heaps do not perform well with garbage collected languages你能解释为什么吗?
roottraveller19年

1
@roottraveller,我相信这是因为垃圾回收过程通常必须中断应用程序的执行(“世界停止”)以释放堆内存,并且堆越大,这种中断通常持续的时间越长。
Regorsmitz

3

当前,我们对服务器较少的体系结构更感兴趣,因为每个请求都可以转到不同的容器中。在这种情况下,redis可以发挥非常重要的作用。

我们不能更少地在服务器中使用简单缓存,因为我们无法确保我们的请求在存储简单缓存的同一容器中得到服务。

在这种情况下,我们必须使用redis,因为redis将缓存存储在远程位置,并且即使没有服务器的体系结构,我们也可以访问容器甚至进行更改。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.