在内存缓存和内存数据库之间的区别

26

我想知道In-Memory缓存(redis, memcached),In-Memory数据网格(gemfire)和In-Memory数据库(VoltDB)之间的区别。我很难区分这3者之间的关键特征。

5个回答

15

缓存 - 按照定义,指的是存储在内存中。为了更快速地访问而存储在内存(RAM)中的任何数据都被称为缓存。例如:Ehcache、Memcache 。通常您使用字符串作为键将对象放入缓存中,并使用该键访问缓存。这非常直接明了。什么时候访问缓存和数据库取决于应用程序,缓存中不进行任何复杂处理。如果缓存跨多个机器,则称之为分布式缓存。例如,Netflix 使用建立在 Memcache 之上的 EVCache 存储用户在主页上看到的电影推荐。

内存数据库 - 它具有缓存的所有功能,还包括一些处理/查询功能。Redis 属于此类别。Redis 支持多种数据结构,并且可以查询 Redis 中的数据(例如获取最近使用过的 10 个项目、获取最常用的项目等)。它可以跨多台计算机,通常性能非常高,并且支持必要时将数据持久保存到磁盘。例如,Twitter 使用 Redis 数据库存储时间线信息。


3
我不知道Gemfire和VoltDB,但即使是Memcached和Redis也有很大的区别。Memcached只是一个简单的缓存,可以以非常简单的方式存储变量,并检索它们,这样每次需要数据时就不必进行文件或数据库查找。变量类型非常简单。另一方面,Redis实际上是一个内存数据库,具有非常有趣的数据类型选择。它有一种用于排序列表的精美数据类型,非常适合像排行榜这样的应用程序。您将新记录添加到数据中,它会自动排序。
因此,我不会过分关注类别。您真的需要分别检查每个工具,看看它对您和您正在构建的应用程序能做什么。这有点像尝试比较nosql数据库-它们都非常不同,并且擅长做不同的事情。

1
我想补充一下,属于“数据库”类别的东西往往比简单的“缓存”具有更多保护和复制数据的功能。缓存是暂时的(通常是),而数据库数据应该是持久的。我看到的许多缓存解决方案都不会持久化到磁盘,因此,如果整个集群失去电源,您将失去缓存中的所有内容。
但是,也有一些缓存解决方案具有持久性和复制功能,因此界限模糊。

内存数据网格和内存数据库有什么区别? - Yolo49
标签变得棘手起来。但通常,任何称为“DB”(数据库)的东西都将拥有更多功能以确保数据完整性、数据安全性和数据恢复性。而“网格”可能更关注速度和分组,而不是数据完整性。此外,“网格”一词明确暗示着多个节点,可能是无主的,而内存数据库可以完全位于一个节点上。 - Beaker

0

内存缓存是常见的查询存储,因此减轻了数据库的读取工作量。内存缓存的常见示例是Redis缓存。例如,网站存储客户端进行的热门搜索,从而减轻了数据库的一些负载。

内存缓存在缓存之上提供查询功能(将会话数据存储在RAM(临时存储)中)。

Memcache属于临时存储缓存类别。


0
在非常高的层面上: 内存缓存是一个简单的类似于Map/字典的结构,您可以通过键添加数据并进行获取/查找。此外,它通常具有根据过期条件清除数据的逻辑。它仅限于单个进程或节点。 内存网格是一个分布式缓存,多个实例彼此通信并作为一个集群共同工作。它可以处理这样的情况:当一个条目在一个节点上添加到缓存中时,您可以从不同的节点获取/查找相同的条目,因为所有节点都连接并相互通信。 内存数据库提供了SQL查询功能,比简单的按键获取更加灵活。它可以处理多种类型的条目,以及使用不同的top、group by、order by等。一些内存数据库还支持事务(ACID)语义。
显然,当您选择特定的工具时,会涉及到一系列功能和更多细微之处。

在撰写这个答案时,你是否使用了任何生成式人工智能,或者直接引用了其他材料而没有进行改写? - undefined

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