Redis缓存与直接使用内存的区别

209
我还没有使用过Redis,但我听说过它,并计划尝试用它来缓存数据。
我听说Redis将内存用作缓存存储数据库。但既然我可以使用对象或字典来存储数据,那么Redis的意义何在呢?就像这样:
var cache = {
    key: {
    
    },
    key: {
    
    }
    ...
}

使用Redis有哪些优势?
2个回答

331

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

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

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

  • Redis可以在需要时将数据持久化到磁盘上。

  • Redis不仅提供了简单缓存功能,还提供了各种数据结构、各种条目驱逐策略、阻塞队列、发布/订阅、原子性、Lua脚本等功能。

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

基本上,如果您需要让应用程序在多个节点上共享相同的数据来扩展,那么类似Redis(或其他远程键/值存储)的东西是必需的。


6
你最后的观点尤其表明像Rlite这样的东西有点无意义 - 对于大多数只涉及单个进程的用例,使用字典存储将同样合适。这样理解对吗? - naught101
1
是的。在我看来,Rlite 的兴趣相当有限。 - Didier Spezia
谢谢这些提示,所以Redis很适合扩展,但我认为对于一个平均需要检索300-500个对象的简单聊天应用程序来说,内存数据结构将非常适合完成工作,如果不是更快,因为这些数字很小? - Webwoman
4
@DidierSpezia说:使用垃圾回收的语言处理非常大的堆通常表现不佳,你能解释一下为什么吗? - roottraveller
7
@roottraveller,我认为这是因为垃圾回收过程通常需要中断您的应用程序(“暂停全局”)以释放堆内存,而堆越大,这种中断通常持续的时间就越长。 - Regorsmitz
显示剩余2条评论

14
我的团队喜欢使用无服务器架构,每个请求都可以发送到不同的容器。在这种情况下,Redis可以发挥非常重要的作用。
在无服务器环境中,我们不能使用简单的缓存,因为我们无法确定我们的请求是否会由存储简单缓存的同一容器提供服务。Redis是一个很好的解决方案,因为它将缓存存储在远程位置。我们可以从任何地方访问Redis。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接