Caching 缓存服务器-存储1亿个100kb对象

Caching 缓存服务器-存储1亿个100kb对象,caching,Caching,您将使用哪种开源软件(不兼容java、linux)来缓存1亿个大约100kb的对象,这些对象的过期时间(TTL)不同。我以前在文件(可怕)、mysql(仍然不好)、redis(稍微好一点)、mongodb(好的,但是…)中做过 谢谢。10000千字节=9536.74316千兆字节(如果我没有错,请自己仔细检查!) 你说的是“缓存”,所以我假设你想要一个快速的内存缓存 因此,首先,您需要一个足够大的RAM来缓存这个内存,或者需要多台机器,这些机器加起来就是那个数量的RAM,然后在它们之间进行分片

您将使用哪种开源软件(不兼容java、linux)来缓存1亿个大约100kb的对象,这些对象的过期时间(TTL)不同。我以前在文件(可怕)、mysql(仍然不好)、redis(稍微好一点)、mongodb(好的,但是…)中做过


谢谢。

10000千字节=9536.74316千兆字节(如果我没有错,请自己仔细检查!)

你说的是“缓存”,所以我假设你想要一个快速的内存缓存

因此,首先,您需要一个足够大的RAM来缓存这个内存,或者需要多台机器,这些机器加起来就是那个数量的RAM,然后在它们之间进行分片

这取决于缓存的性质。对于非常简单的键值缓存,可以使用Memcache。如果您需要更多的操作,如集合、排序集合、对象哈希等,那么Redis可能是一个非常好的选择(请参阅和Redis)。但别忘了在Redis中关闭持久性,以便它像一个非持久缓存一样工作

需要注意的一个问题是,如果您使用单个程序来缓存这些9GB的数据,那么它将需要一个64位进程。这意味着64位指针开销可能需要大量额外的GB来存储数据。如果很容易将密钥分割成碎片,例如基于哈希和模运算(例如,如果您的密钥使用此或其他分片算法自然分布良好),那么最好的方法是使用多个32位实例(您甚至可以在64位机器上运行32位程序)来存储数据(如果RAM足够大,可以在一台机器上进行,也可以在多台机器上进行分割)。Redis cluster目前正在进行工作,我相信memcached也必须有这样的工具。或者,您可以直接在客户端中进行分片


另外,有一件事需要提及,如果这些缓存数据实际上可以作为您的主数据,那么您可能不必拥有它们的两个副本—一个在DB中,一个在缓存中—因为您可以使用Redis提供的持久性选项(仅附加日志文件和快照),您可以使用Redis作为主数据库。

我认为您的计算是“9536.74316 GB”是正确的,这将使大小超过9TB,而不是9GB…这对今天的内存标准来说是一个硬件挑战。正如你所看到的,9TB是RAM中的一个挑战。我是说文件缓存,你知道redis或mongo之外的东西吗?谢谢。@TimMedora:谢谢,我自己读错了,9TB是:)