当前位置: 首页 > 面试题库 >

Redis缓存与直接使用内存

相化
2023-03-14
问题内容

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

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

var cache = {
    key: {

    },
    key: {

    }
    ...
}

Redis有什么优势?


问题答案:

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

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

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

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

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

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

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



 类似资料:
  • 问题内容: 我有以下代码,旨在读取目录并将其压缩到tar.gz归档文件中。当我将代码部署到服务器上并使用一批文件对其进行测试时,它可以在前几个测试批处理中使用,但是在第4批或第5批处理之后,它将始终如一地为我提供java.lang.OutOfMemoryError:即使直接缓冲内存文件批处理大小保持不变,并且堆空间看起来不错。这是代码: } 这是一个例外: 我认为有一个缓冲区内存泄漏,因为它在前4

  • 1. 前言 在MyBatis 缓存一节中,我们介绍了 MyBatis 的多级缓存。MyBatis 的二级缓存可在多个会话中共享缓存,但是这也加大了内存的使用空间,如果二级缓存空间占有量过多势必会导致程序运行空间的不足,因此我们需要将二级缓存转移到专业的缓存服务器上。 Redis 是一个高性能的 kv 数据库,被广泛的使用在缓存服务上,MyBatis 项目开发者提供了 Redis 缓存的实现。本小节

  • 目前,我有一个Grails 2.4.4应用程序,它使用spring-security-ldap 2.0.1通过OpenLdap服务器对授权用户进行身份验证。 LDAP人员担心,当转移到生产时,如果不缓存该应用程序,可能会影响LDAP服务器的性能。他们建议考虑使用Redis作为用户的应用级缓存,b4访问LDAP服务器。 我想在我进入POC之前得到一些方向,确保我在正确的道路上开始: 我在Grail

  • 问题内容: 当redis达到“最大内存”条件时,它将允许客户端进行读取,但不能进行写入。 当然,这将导致致命错误……有什么方法可以使Rails处理缓存的读或写错误,因此,如果缓存发生问题(可用性,读取,写入等),它将继续以如果缓存设置为“关闭”? 问题答案: 您可以告诉redis在内存已满时要遵守的不同行为。 默认是 也许最好的选择是’volatile-ttl’,并确保所有缓存都包括:expire

  • 我正在运行Flink 1.8版。 主要配置如下: 声明的堆大小是12GB,为什么在概述部分显示为7.33GB。 根据文档,堆大小=声明的堆大小-网络缓冲区内存(默认值:声明的堆的0.1倍,但最大为1gb)。所以正确的值是JVM(堆/非堆)部分中显示的值,即11GB :我假设,由于现在使用1GB作为网络缓冲内存,因此32768段基本上是指32KiB大小的内存段的计数。这些用于在任务之间传输数据的TC

  • 如果在记录的初始过期时间之前访问记录,则需要重置过期时间。我使用Spring数据redis API使用Redis作为缓存。我正在使用RediscacheManager的setDefaultEx的(5000)设置默认过期。无法找到有关重置到期时间的任何解决方案或留档。感谢任何指导。 此外,我想知道,为什么这不能成为Redis缓存的一个自然功能,毕竟,它应该从缓存中获取最常用的记录。