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

Redis如何知道它是否必须从数据库返回缓存的数据或新数据

祁奇略
2023-03-14
问题内容

比方说,我正在使用数据库中的一些长期运行任务来成千上万次记录或进行记录,并使用Redis对其进行缓存。第二天,有人更改了数据库中的一些记录。

下次,redis如何知道它必须返回缓存的数据或再次必须重新访问DB中的所有数千条记录?

如何实现同步?


问题答案:

Redis不知道数据库中的数据是否已更新。

通常,我们使用Redis缓存数据,如下所示:

  1. 客户端检查Redis中是否存在数据(例如键值对)。
  2. 如果密钥存在,则客户端从Redis获取相应的值。
  3. 否则,它将从DB获取数据,并将其设置为Redis。客户端还5为Redis中的键值对设置到期时间(例如分钟)。
  4. 然后,Redis将为以后对同一密钥的所有请求提供服务。尽管Redis中的数据可能已过时。
  5. 但是,5几分钟后,此密钥将自动从Redis中删除。
  6. 转到步骤1。

因此,为了使您的数据保持Redis最新更新,您可以设置较短的到期时间。但是,您的数据库必须处理大量请求。

如果要大大减少对数据库的请求,可以设置较大的到期时间。这样,Redis在大多数情况下都可以为请求提供可能的过期数据。

您应该仔细考虑性能与陈旧数据之间的权衡。



 类似资料:
  • 问题内容: 有没有一种方法可以使用Redis刷新Redis数据库? 我正在寻找类似或 问题答案: Redis-py实际上具有以下功能:

  • 我们使用Redis将各种应用程序配置存储在DB0中。 有没有可能在Redis中查询数据库中的每个键/值对,而不必执行两个单独的查询并自己加入键/值对? 我希望功能类似于以下内容: ...其中将返回元组的元组、列表的列表或字典: 然而,在浏览了StackOverflow,Google和Redis文档之后,我能得到的唯一解决方案(我还没有找到其他人问这个问题..)类似于以下内容: 我的问题根本不是如何

  • 我们需要从外部系统获取数据,并将其存储在Redis缓存中,然后使用Spring Cacheable annotation检索数据。问题是客户希望数据区分大小写。是否可以使用redis或在redis中进行任何配置来实现这一点。

  • 问题内容: 我需要兑现承诺,以便可以通过封闭函数将其返回。我知道,由于正常的JavaScript范围,我可能无法按照编码的方式进行操作。有什么办法可以做到吗? 位于#1 的 console.log 会生成正确的数据。 console.log #2总是产生’a’; 任何指针将不胜感激。 问题答案: 许诺背后的基本原则之一是它是异步处理的。这意味着您无法创建承诺,然后立即在代码中同步使用其结果(例如,

  • 函数getfile: 但我需要一个数组而不是这个promise的东西。怎么解决?

  • 我正在尝试使用以下cmdlet测试Powershell中是否存在DNS区域: 这很好,但我现在需要做的是根据是否有错误或是否有数据返回,将它转换为真/假评估。 例如,这是一个真实的场景: 而这是一个错误的场景: 我正在纠结的是如何对此进行评估?通俗地说,我需要检查是否有实际数据。 非常感谢!