Caching Redis缓存与直接使用内存

Caching Redis缓存与直接使用内存,caching,memory,redis,Caching,Memory,Redis,我还没有使用过Redis,但我听说过它,并计划尝试将其用作缓存存储 我听说Redis使用内存作为缓存存储数据库,那么如果我使用变量作为对象或字典数据类型来存储数据,有什么区别呢?比如: var cache = { key: { }, key: { } ... } Redis有什么优势?Redis是一个远程数据结构服务器。它当然比只在本地内存中存储数据要慢(因为它涉及套接字往返来获取/存储数据)。然而,它也带来了一些有趣的特性: Redis可以被应用

我还没有使用过Redis,但我听说过它,并计划尝试将其用作缓存存储

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

var cache = {
    key: {

    },
    key: {

    }
    ...
}
Redis有什么优势?

Redis是一个远程数据结构服务器。它当然比只在本地内存中存储数据要慢(因为它涉及套接字往返来获取/存储数据)。然而,它也带来了一些有趣的特性:

  • Redis可以被应用程序的所有进程访问,可能运行在多个节点上(这是本地内存无法实现的)

  • Redis的内存存储非常高效,并且是在一个单独的过程中完成的。如果应用程序运行在内存被垃圾收集的平台上(node.js、java等),它允许处理更大的内存缓存/存储。实际上,使用垃圾收集语言时,非常大的堆不能很好地执行

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

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

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


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

目前,我们更喜欢无服务器体系结构,其中每个请求都可以发送到不同的容器。在这种情况下,Redis可以发挥非常重要的作用

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


在这种情况下,我们必须使用redis,因为它将缓存存储在远程位置&我们甚至可以访问无服务器体系结构中的容器更改。

您的最后一点特别让人觉得有些毫无意义——字典存储同样适用于大多数只有一个进程的用例。是吗?是的。在我看来,Rlite的兴趣非常有限。感谢这些提示,所以Redis的可扩展性非常好,但我假设在一个简单的聊天应用程序中,平均有300-500个对象要在内存中检索,内存中的数据结构即使不是更快也能很好地完成这项工作,因为它们的数量很少?@DidierSpezia
非常大的堆在垃圾收集语言中不能很好地执行
你能解释为什么吗?@roottraveler,我相信这是因为垃圾收集过程通常必须中断应用程序的执行(“停止世界”)来释放堆内存,堆越大,中断通常持续的时间越长。