Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caching Redis vs memcached vs Scylla Cache-选择哪一个?_Caching_Redis_Memcached_Scylla - Fatal编程技术网

Caching Redis vs memcached vs Scylla Cache-选择哪一个?

Caching Redis vs memcached vs Scylla Cache-选择哪一个?,caching,redis,memcached,scylla,Caching,Redis,Memcached,Scylla,我正在设计一个应用程序,我想在其中缓存大约10kb的百万数据。。我做了一些分析,并在使用Redis、memcached和Scylla作为缓存之间徘徊。。一些专家能建议哪一种可能最适合我的需要吗 高性能 高可用性 高通量 低价? 完全披露-我在锡拉项目上工作 我认为这是一个延迟和HA与成本的问题。作为一个基于RAM的系统,Redis的延迟将是最低的。如果需要

我正在设计一个应用程序,我想在其中缓存大约10kb的百万数据。。我做了一些分析,并在使用Redis、memcached和Scylla作为缓存之间徘徊。。一些专家能建议哪一种可能最适合我的需要吗

高性能 高可用性 高通量 低价?
完全披露-我在锡拉项目上工作

我认为这是一个延迟和HA与成本的问题。作为一个基于RAM的系统,Redis的延迟将是最低的。如果需要<1毫秒的响应,则可以选择Redis或memcached

“锡拉”是一个基于磁盘的系统。“锡拉”RAM中的这些值的延迟将很低,但需要从磁盘中提取的值将较慢。因此,您的99p延迟可能会变慢。多慢?取决于您的磁盘。NVME可以是99p3-5ms。SSD,可能是5-10ms。如果这是一个可接受的延迟,那么“锡拉”将便宜得多,因为即使是NVME也比RAM便宜得多

至于HA,Redis和memcached是作为缓存使用的。虽然有一些特性和框架可以用来复制周围的数据,但这些都是附加的,增加了复杂性。“锡拉”在设计上是一个分布式系统。因此,允许多层次HA的复制是内置的节点、机架和DC可用性


Redis和memcached都是非凡的缓存。但是,根据您的用例,锡拉可能是正确的选择。

完全披露-我从事锡拉项目

我认为这是一个延迟和HA与成本的问题。作为一个基于RAM的系统,Redis的延迟将是最低的。如果需要<1毫秒的响应,则可以选择Redis或memcached

“锡拉”是一个基于磁盘的系统。“锡拉”RAM中的这些值的延迟将很低,但需要从磁盘中提取的值将较慢。因此,您的99p延迟可能会变慢。多慢?取决于您的磁盘。NVME可以是99p3-5ms。SSD,可能是5-10ms。如果这是一个可接受的延迟,那么“锡拉”将便宜得多,因为即使是NVME也比RAM便宜得多

至于HA,Redis和memcached是作为缓存使用的。虽然有一些特性和框架可以用来复制周围的数据,但这些都是附加的,增加了复杂性。“锡拉”在设计上是一个分布式系统。因此,允许多层次HA的复制是内置的节点、机架和DC可用性


Redis和memcached都是非凡的缓存。但是,根据您的使用情况,锡拉可能是正确的选择。

内存实际上是一件坏事,因为RAM价格昂贵且不持久。 因此,“锡拉”将是K/V或列式工作负载的更好选择。 “锡拉”也有一个有限的Redis api,它使用CQL获得了良好的结果[1] api将产生更好的结果


[1] 内存实际上是一件坏事,因为RAM很昂贵而且不持久。 因此,“锡拉”将是K/V或列式工作负载的更好选择。 “锡拉”也有一个有限的Redis api,它使用CQL获得了良好的结果[1] api将产生更好的结果


[1]

您提到的三个选项都是开源软件,因此定价相同-零:-但是,锡拉和Redis都是由锡拉开发银行和RedisLabs公司分别编写和支持的,因此如果您的用例是关键任务,您可以选择向这些公司支付企业级支持费用,你可以向这些公司询问他们的价格

三者之间更有趣的区别在于技术

您描述了缓存中有10GB数据的用例。这个数量可以很容易地保存在内存中,所以像Memcached或Redis这样的完全内存数据库是一个自然的选择。但是,您仍然需要问自己一些问题,这些问题可能会导致您进入分布式数据库,如“锡拉”,具体取决于您的答案:

您会使用功能强大的多核机器吗?如果是这样,你可能应该排除Memcached——我的经验和其他人——参见 这表明它不能很好地与许多核心进行扩展。在8核机器上,您将无法获得接近单核机器8倍的性能。 Redis也不是真正用于多核的——他说Redis的设计并不是为了从多个CPU核中获益。如果需要的话,人们应该启动几个Redis实例来扩展几个内核。。另一方面,“锡拉”在多核机器上蓬勃发展。在做出决定之前,您可能应该在您的用例上测试所有三种产品的性能

突然丢失缓存的全部内容会造成多大的灾难?在某些用例中,这只意味着您需要查询稍微慢一点的后端服务器,因此在重新启动时突然丢失缓存是可以接受的。在这种情况下,像Memached或Redis这样的仅内存缓存可能正是您所需要的。然而,在其他情况下,从头开始可能会受到很大的惩罚 使用空缓存-后端服务器可能非常慢,或者原始内容存储在一个距离较远的服务器上,该服务器具有缓慢且昂贵的WAN。在这种情况下,您需要一个磁盘备份的缓存,因此如果内存缓存丢失,您仍然可以从磁盘而不是从后端服务器刷新它。Redis有一个磁盘备份选项,在锡拉,磁盘备份是主要的方式

您提到了一个10GB的工作集,它可以很容易地容纳单个服务器的内存。但是,这是否可能会增长,并且在一年内您会发现自己需要缓存100 GB或1 TB的内存,这不再适合单个服务器的内存?在memcached,你会倒霉的。Redis过去有一个虚拟内存解决方案用于此目的,但它已被弃用,现在表示Redis至少目前没有考虑对大于RAM的数据库的支持。“锡拉”确实通过两种方式处理这个问题。首先,您的缓存将存储在比内存大得多的磁盘上,您拥有的任何内存量都将用于进一步加速该缓存,但它不需要适合内存。其次,“锡拉”是一个分布式服务器。它可以将100 GB的工作集分发到10个不同的节点。Redis也有复制功能,但它将整个数据复制到所有节点,而Scylla可以选择在不同节点上存储不同的数据子集


您提到的所有三个选项都是开源软件,因此定价相同-零:-但是,Scylla和Redis分别由Scyllab和RedisLabs公司编写和支持,因此如果您的用例是关键任务,您可以选择向这些公司支付企业级支持费用,你可以向这些公司询问他们的价格

三者之间更有趣的区别在于技术

您描述了缓存中有10GB数据的用例。这个数量可以很容易地保存在内存中,所以像Memcached或Redis这样的完全内存数据库是一个自然的选择。但是,您仍然需要问自己一些问题,这些问题可能会导致您进入分布式数据库,如“锡拉”,具体取决于您的答案:

您会使用功能强大的多核机器吗?如果是这样,你可能应该排除Memcached——我的经验和其他人——参见 这表明它不能很好地与许多核心进行扩展。在8核机器上,您将无法获得接近单核机器8倍的性能。 Redis也不是真正用于多核的——他说Redis的设计并不是为了从多个CPU核中获益。如果需要的话,人们应该启动几个Redis实例来扩展几个内核。。另一方面,“锡拉”在多核机器上蓬勃发展。在做出决定之前,您可能应该在您的用例上测试所有三种产品的性能

突然丢失缓存的全部内容会造成多大的灾难?在某些用例中,这只意味着您需要查询稍微慢一点的后端服务器,因此在重新启动时突然丢失缓存是可以接受的。在这种情况下,像Memached或Redis这样的仅内存缓存可能正是您所需要的。但是,在其他情况下,如果从零开始使用空缓存,可能会受到很大的惩罚-后端服务器可能非常慢,或者原始内容存储在一个距离较远的服务器上,该服务器的WAN速度较慢且价格昂贵。在这种情况下,您需要一个磁盘备份的缓存,因此如果内存缓存丢失,您仍然可以从磁盘而不是从后端服务器刷新它。Redis有一个磁盘备份选项,在锡拉,磁盘备份是主要的方式

您提到了一个10GB的工作集,它可以很容易地容纳单个服务器的内存。但是,这是否可能会增长,并且在一年内您会发现自己需要缓存100 GB或1 TB的内存,这不再适合单个服务器的内存?在memcached,你会倒霉的。Redis过去有一个虚拟内存解决方案用于此目的,但它已被弃用,现在表示Redis至少目前没有考虑对大于RAM的数据库的支持。“锡拉”确实通过两种方式处理这个问题。首先,您的缓存将存储在比内存大得多的磁盘上,您拥有的任何内存量都将用于进一步加速该缓存,但它不需要适合内存。其次,“锡拉”是一个分布式服务器。它可以将100 GB的工作集分发到10个不同的节点。Redis也有复制功能,但它将整个数据复制到所有节点,而Scylla可以选择在不同节点上存储不同的数据子集