内存缓存和内存数据库的区别

问题描述 投票:0回答:5

我想知道是否可以解释内存缓存(redis、memcached)、内存数据网格(gemfire)和内存数据库(VoltDB)之间的差异。我很难区分这 3 者之间的关键特征。

caching redis memcached in-memory-database voltdb
5个回答
15
投票

Cache - 根据定义意味着它存储在内存中。任何存储在内存 (RAM) 中以便更快访问的数据都称为缓存。示例:Ehcache、Memcache 通常,您将一个对象以 String 作为 Key 放入缓存中,并使用 Key 访问缓存。这非常简单。何时访问 cahce 与数据库取决于应用程序,并且 Cache 中不会发生复杂的处理。如果缓存跨越多台机器,则称为分布式缓存。例如,Netflix 使用构建在 Memcache 之上的 EVCAche 来存储您在主屏幕上看到的用户电影推荐。

内存数据库 - 它具有缓存的所有功能以及处理/查询功能。 Redis 就属于这一类。 Redis 支持多种数据结构,您可以查询 Redis 中的数据(例如获取最近 10 个访问的项目、获取最常用的项目等)。它可以跨越多台机器,通常具有非常高的性能,并且如果需要的话还支持持久化到磁盘。例如,Twitter使用Redis数据库来存储时间线信息。


3
投票

我不了解gemfire和VoltDB,但即使是memcached和redis也有很大不同。 Memcached 是非常简单的缓存,它以非常简单的方式存储变量,然后检索它们,这样您就不必每次需要该数据时都去文件或数据库查找。变量的类型非常简单。另一方面,Redis 实际上是一个内存数据库,具有非常有趣的数据类型选择。它具有用于排序列表的出色数据类型,非常适合排行榜等应用程序。您将新记录添加到数据中,它会自动排序。

所以我不会太在意这些类别。您确实需要以不同的方式检查每个工具,看看它能为您做什么以及您正在构建的应用程序。这有点像尝试在 nosql 数据库上进行比较 - 它们都非常不同,并且能很好地完成不同的事情。


1
投票

我想补充一点,“数据库”类别中的东西往往比简单的“缓存”有更多的功能来保护和复制数据。缓存(通常)是临时的,而数据库数据应该是持久的。我见过的许多缓存解决方案都不会持久保存到磁盘,因此如果整个集群断电,您将丢失缓存中的所有内容。

但是有些缓存解决方案也具有持久性和复制功能,因此界限很模糊。


0
投票

内存中的缓存是一种常见的查询存储,因此可以减轻数据库的读取工作负载。内存缓存的常见示例是 Redis 缓存。一个例子是网站存储客户进行的流行搜索,从而减轻数据库的一些负载。

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

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


0
投票

处于非常高的水平:

内存缓存是简单的映射/字典式结构,您可以在其中添加数据并通过键+逻辑获取/查找,以根据过期标准处理清除。它仅限于单个进程或节点。

内存网格是分布式缓存,其中多个实例相互通信并作为集群一起工作。它可以处理这样的情况,例如当一个条目添加到一个节点上的缓存时,您可以从不同的节点获取/查找相同的条目,因为所有节点都已连接并相互通信。

内存数据库提供了sql查询功能,比简单的按键获取灵活得多。它处理多种类型的条目以及不同 top、group by、order by 等的使用。一些内存数据库也支持事务 (ACID) 语义。

显然,当您选择特定工具时,将会涉及一系列功能和更多细微差别。

© www.soinside.com 2019 - 2024. All rights reserved.