Redis在记忆中是什么意思"数据库?

时间:2015-02-25 02:58:08

标签: redis

Wikipedia says Redis是一个内存数据库,但它也说它可以至少每2秒将数据保存到磁盘上#34;我觉得这两件事是相互排斥的。如何在内存中考虑(它可以)将数据存储在磁盘上?我假设内存中的定义意味着它不存储到磁盘。


这是一个类似的问题:Redis concept: In memory or DB?不同之处在于他询问持久性实现。我的问题是关于内存与持久性的概念。

5 个答案:

答案 0 :(得分:8)

  

Redis是一个内存但持久的磁盘数据库,因此它代表了一种不同的折衷方案,其中通过不能大于内存的数据集的限制实现了非常高的写入和读取速度。内存数据库的另一个优点是,与磁盘上的相同数据结构相比,复杂数据结构的内存表示更易于操作,因此Redis可以做很多事情,内部复杂性很小。同时,两种磁盘存储格式(RDB和AOF)不需要适合随机访问,因此它们非常紧凑,并且始终以仅附加方式生成(即使AOF日志轮换也是附加的 - 仅操作,因为新版本是从内存中的数据副本生成的。

http://redis.io/topics/faq

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

当然,它的优势在于表现。由于所有数据都在RAM中,因此速度非常快。

答案 1 :(得分:2)

它们不是互斥的。内存中是指所有数据都存储在内存中以便访问。这并不意味着不应该将其不时地存储到磁盘上,但绝对不应该从磁盘上访问它,除非发生一些特殊事件。 读取数据后,可以从磁盘或内存中读取数据。在Redis的情况下,总是从内存中检索它(因此-内存数据库)。 每两秒钟将数据写到磁盘上对于在发生故障时进行备份很有用。一方面,访问数据库的用户正在访问存储在内存中的数据,并且备份机制还从内存访问数据并将其写入磁盘。 如果系统出现故障,存储在内存中的数据将丢失。但是,在启动时,会从磁盘中检索数据(最多2秒)并再次存储到内存中,以供应用程序使用。

答案 2 :(得分:1)

为了保持性能,它会将数据保存并存储在内存中。但由于Redis是基于键值对的NoSQL,它还为您提供了在磁盘上保留的选项。

答案 3 :(得分:1)

内存数据库位于Web客户端和后端数据库之间(例如,MySQL,或DynamoDB,Hbase等)。当客户端向Web服务器发送查询时,通常,Web服务器需要查询MySQL以获得结果。 Redis(或Memcached)为这些查询结果提供缓冲区。因此,Web服务器只需要通过存储在Redis / Memcached(存储在内存中)中的键值对来获得结果。密钥通常是特定查询的哈希码,值是查询结果。

可能还有其他使用Redis的方法。但基本思路是相同的:比磁盘数据库更快的查找。

答案 4 :(得分:1)

Redis是一个内存数据库(IMDB),因为它依赖于计算机的主存储器来进行数据存储,而其他人则使用磁盘存储数据库机制。这就是为什么Redis比磁盘优化数据库更快的原因,因为磁盘访问比内存访问慢。