我想知道是否可以解释内存缓存(redis、memcached)、内存数据网格(gemfire)和内存数据库(VoltDB)之间的差异。我很难区分这三者之间的关键特征。
4 回答
缓存- 根据定义,它存储在内存中。任何存储在内存 (RAM) 中以便更快访问的数据都称为缓存。示例:Ehcache、Memcache 通常您将对象放入缓存中,使用 String 作为 Key,并使用 Key 访问缓存。这是非常直截了当的。这取决于应用程序何时访问 cahce vs 数据库,并且缓存中不会发生复杂的处理。如果缓存跨越多台机器,则称为分布式缓存。例如,Netflix使用建立在 Memcache 之上的 EVCache 来存储您在主屏幕上看到的用户电影推荐。
在内存数据库中 - 它具有缓存的所有功能以及处理/查询功能。Redis 属于这一类。Redis 支持多种数据结构,您可以在 Redis 中查询数据(例如获取最近 10 个访问的项目、获取最常用的项目等)。它可以跨越多台机器并且通常具有非常高的性能,并且如果需要还支持持久性到磁盘。例如,Twitter使用 Redis 数据库来存储时间线信息。
我不了解 gemfire 和 VoltDB,但即使是 memcached 和 redis 也有很大不同。Memcached 是一个非常简单的缓存,一个以非常简单的方式存储变量的地方,然后检索它们,这样您就不必每次需要这些数据时都去文件或数据库查找。变量的类型非常简单。另一方面,Redis 实际上是一个内存数据库,具有非常有趣的数据类型选择。它有一种用于排序列表的出色数据类型,非常适用于排行榜等应用程序。您将新记录添加到数据中,它会自动排序。
所以我不会太拘泥于这些类别。您确实需要以不同的方式检查每个工具,以了解它可以为您做什么,以及您正在构建的应用程序。这有点像试图在 nosql 数据库上进行比较——它们都非常不同,并且做得很好。
我要补充一点,“数据库”类别中的东西往往具有比简单的“缓存”更多的功能来保护和复制您的数据。缓存是临时的(通常),因为数据库数据应该是持久的。我见过的许多缓存解决方案都不会持久保存到磁盘,因此如果整个集群断电,缓存中的所有内容都会丢失。
但也有一些缓存解决方案也具有持久性和复制功能,因此界限很模糊。
内存缓存是一种常见的查询存储,因此可以减轻数据库的读取工作负载。内存缓存的常见示例是 Redis 缓存。一个例子可以是网站存储客户端进行的流行搜索,从而减轻数据库的一些负载。
内存缓存在缓存之上提供查询功能(将会话数据存储在 RAM(临时存储)中)。
Memcache 属于临时存储缓存类别。