当前位置: 首页 > 知识库问答 >
问题:

对于Redis来说,成为一个“内存中”的数据库意味着什么?

邹京
2023-03-14

维基百科说Redis是一个内存数据库,但也说它可以“至少每2秒将数据持久化到磁盘”。我觉得这两件事是互相排斥的。它能在磁盘上存储数据,怎么能被认为是内存中的呢?我假设内存中的定义意味着它不存储到磁盘中。

这是一个类似的问题:Redis概念:在内存中还是在DB中?不同的是,他询问的是持久性实现。我的问题是关于内存中与持久性的概念。

共有1个答案

罗诚
2023-03-14

Redis是一个内存中但在磁盘上持久化的数据库,因此它代表了一种不同的折衷方法,即在数据集不能大于内存的限制下实现非常高的写和读速度。内存数据库的另一个优点是,与磁盘上的相同数据结构相比,复杂数据结构的内存表示操作起来要简单得多,因此Redis可以做很多事情,而内部复杂性很小。同时,两种磁盘存储格式(RDB和AOF)不需要适合于随机访问,因此它们非常紧凑,并且总是以仅追加的方式生成(甚至AOF日志循环也是仅追加的操作,因为新版本是从内存中的数据副本生成的)。

http://redis.io/topics/faq

在redis中,所有数据都必须在内存中。这是与其他NoSQL完全不同的一点。通常,当您访问和读取数据库中的一些数据时,您不知道这些数据是否在内存(缓存)中,但在Redis的情况下,可以保证所有数据都在内存中。写入磁盘是可选的,您可以认为这是在内存上有中继,在磁盘上有一种备份。如果突然关闭服务器,上次保存到磁盘后保存的数据可能会丢失。

 类似资料:
  • 为了正确理解Java中并发性的问题和解决方案,我浏览了官方的Java教程。在其中一页中,他们定义了内部锁和同步链接。在这一页,他们说: 只要一个线程拥有一个内在锁,其他线程就不能获得相同的锁。另一个线程在试图获取锁时会阻塞。 此外,他们在同步方法中的锁一节中提到: 当线程调用同步方法时,它会自动获取该方法对象的内部锁,并在方法返回时释放该锁。即使返回是由未捕获的异常引起的,也会发生锁释放。 对我来

  • 来自请求率和性能指南-Amazon Simple Storage Service: Amazon S3会自动扩展到高请求率。例如,您的应用程序可以在存储桶中的每个前缀每秒至少实现3,500个PUT/POST/DELETE和5,500个GET请求。存储桶中的前缀数量没有限制。以指数方式提高您的读取或写入性能很简单。例如,如果您在Amazon S3存储桶中创建10个前缀以并行化读取,您可以将读取性能扩

  • 问题内容: 我很好奇,需要快速找到答案。Google不会有太大帮助。 Java Persistence API具有这些属性,这些属性告诉框架对关联实体进行级联操作: 我知道前两个是什么意思:当我持久化具有B的对象A时,也持久化B,并且在删除A时也删除B。 但是我无法理解其他两个人的成就。救命? 问题答案: REFRESH的意思是“将数据库中的任何状态更改拉到我的表示中”。级联这很简单;这意味着将刷

  • 对于下面的代码,我为一个对象< code>obj提供< code>isShiny,它被列为属性的一部分,本质上是一个键-值对,其中键是< code>isShiny,值是匿名函数。 但是,当我为函数 提供 时,幕后到底发生了什么?当我打印出一个函数时,没有提示在哪里。 这是来自的输出。

  • 我想创建一个

  • 问题内容: 我已经阅读了有关node.js和其他服务器(例如Apache)的信息,其中线程有所不同。我根本不了解线程的含义。 如果我有一个运行SQL的网页来访问数据库,请在一个服务器端页面中说三个不同的数据库,这对node.js中的线程意味着什么?阿帕奇?“线程”在这里是什么意思? 或者作为我看到的文章,“启动一个新线程来处理每个请求”。 说Apache为每个请求生成一个线程,但node.js却没