在内存中缓存巨大的数据

时间:2014-11-23 16:52:59

标签: caching elasticsearch redis memcached bigdata

我正在寻找可以处理大数据(<5GB)的内存缓存解决方案。对于用户输入的搜索项,数据库(elasticsearch)将返回大量数据,工具将通过该工具的不同网页分析和显示该数据。现在我的问题是我想暂时缓存这些大数据,直到用户会话结束,这样每次用户打开新页面时我都不必再从elasticsearch中获取它。它必须在内存中,因为基于磁盘将花费一分钟,这将非常慢。

我最初认为memcached但它的最大限制为128MB。在阅读了相当多的内容后,Redis看起来很合适,但我不清楚一堆Redis节点是否可以串联工作。是否可以设置许多Redis节点的池,以便在SET上自动选择合适的节点,并在GET上返回数据而不必指定节点?

TL; DR

  • 问题:在内存缓存中缓存大数据(<5GB)
  • 可能的解决方案:Redis
  • 问题:我可以汇集一堆Redis节点,以便在不指定特定节点的情况下获取存储在其中任何节点中的密钥。我不需要分发我的数据,因为单个用户的数据将适合单个节点的RAM。

2 个答案:

答案 0 :(得分:1)

Redis群集听起来非常适合您的用例!

Redis集群通过散列槽提供数据分片机制。在设置时,这些插槽均匀分布在群集中的节点上。

无论何时在cluser中存储值,都会计算给定密钥的相应散列槽,并将数据转发到负责节点。同样,您可以再次查询数据。 所以你的问题的答案当然是肯定的。

但是,每个键的最大值大小为512MB。我不确定我的存储要求是否正确。我假设5GB是所有用户的估计总金额。

结帐redis cluster tutorial

答案 1 :(得分:1)

您还可以NCache查看Tayzgrid(。net)/ Alachisoft(java),

这两种解决方案都提供了动态集群的分布式缓存,允许在运行时添加或删除集群中的节点,而不会丢失任何数据。此外,智能客户端确保引用适当的节点来针对任何密钥获取/存储记录。