【发布时间】:2016-08-29 04:32:06
【问题描述】:
我想知道是否可以解释内存缓存(redis、memcached)、内存数据网格(gemfire)和内存数据库(VoltDB)之间的差异。我很难区分这 3 个之间的关键特征。
【问题讨论】:
标签: caching redis memcached in-memory-database voltdb
我想知道是否可以解释内存缓存(redis、memcached)、内存数据网格(gemfire)和内存数据库(VoltDB)之间的差异。我很难区分这 3 个之间的关键特征。
【问题讨论】:
标签: caching redis memcached in-memory-database voltdb
缓存 - 根据定义,它存储在内存中。任何存储在内存 (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 属于临时存储缓存类别。
【讨论】: