内存分布式缓存中的数据分区和数据持久性

时间:2019-09-09 14:31:06

标签: redis ignite stackexchange.redis distributed-caching

我正在探索用于我们的应用程序的不同分布式内存数据库。 我遇到一种情况,想知道Redis Cache和Apache Ignite Cache是​​否可行?

  1. 假设我的内存中分布式缓存大小为15GB
  2. 我正在使用数据分区(例如,在Redis中-Redis群集以及Ignite中的类似方法)
  3. 一旦集群中的任何节点达到内存阈值水平 它会在Redis的整个节点之间自动分配数据吗? 它会在Ignite中的节点之间自动分配数据吗? 在Redis和Ignite中都应用驱逐策略时?毕竟 节点达到那里的存储容量?
  4. 如果一个或多个节点在群集中出现故障或群集中添加了新节点怎么办?
  5. 数据备份呢? (我知道Redis Sentinel for Redis的概念)

我正在寻找这种情况(Redis缓存中可用吗?),请参见概述部分https://apacheignite.readme.io/docs/distributed-persistent-store的链接

Redis缓存中可以实现以下功能吗?

假设我有100条记录。缓存只能在磁盘文件上保存40条记录(最常用),在磁盘文件上可以保存100条记录(不在任何其他数据库中)。

  1. 因此,如果请求这100条记录中的任何内容,我将不必进入实际的数据库(例如Sybase db)?
  2. 如果在100条记录中找到了密钥,但在内存高速缓存中不存在该密钥(40条记录),则获取该密钥,将其放入内存高速缓存中,并使用逐出策略将其他密钥换出到磁盘文件(但是在磁盘上)我总是有100条记录)
  3. 如果缓存和磁盘文件中不存在密钥,则只需要转到数据库(Sybase)并获取它即可。

2 个答案:

答案 0 :(得分:1)

使用Ignite(以及包括Redis在内的绝大部分其他分布式系统),只要监控显示节点即将超出分配的RAM空间,您就可以扩展群集。只需在您的Ignite群集中添加一个额外的节点,数据就会自动重新分配。

此外,使用Ignite,您可以选择启用其本机持久性,以存储超出RAM容量的数据,并可以立即重启。 Ignite会从磁盘读取内容,无需在重新启动时在RAM中预加载任何内容。

希望有帮助。根据提供的详细信息,Ignite非常适合您。

答案 1 :(得分:0)

使用Ignite时,应确保您永远不会用完数据区域内存。没有数据重新分配,该节点将变得不可用。

当节点关闭时,其数据将分发到其他节点(如果配置了足够的备份),但是上述限制仍然适用-节点不应该耗尽内存。

如果添加新节点,一些数据将重新分配给它们。

如果您使用永久模式,您将不会用完内存,因为您的数据只会被写入磁盘。确保不耗尽磁盘空间:)当节点关闭或添加时,该行为将由Baseline Topology控制(通常不会立即移动数据)。