我知道当多个服务器需要缓存时,会使用memcache和redis。 我正在创建一个节点应用程序,它将仅在单个服务器上运行并使用mysql作为db,我需要散列大约100,000个密钥,每个密钥将包含长度为200的json字符串,这样我就不必调用mysql进行读取
如果我使用memcache或redis,我将使用回调来获取我的数据,但如果我使用javascript哈希,我可以同步获取数据,但它会以某种方式影响应用程序,如内存的高使用率。我应该为这样的应用程序使用哪一个?
答案 0 :(得分:1)
这取决于你甚至可以通过mysql选择memcached :)。对于简单的操作,例如只是 - 只是将它存储在你的javascript代码中(我相信作为字典对象)就足够了。但请确保你有足够的RAM :)。
答案 1 :(得分:1)
我知道当多个服务器需要缓存时,会使用memcache和redis。
不一定,例如Facebook将memcache实例放在每个mysql服务器的前面。您可以使用Redis / Memcache进行快速计算(例如实时分析),而无需使用整个群集。
我需要散列大约100,000个密钥,每个密钥将包含长度为200的json字符串,这样我就不必调用mysql进行读取。
看起来像是过早的优化,如果MySQL有足够的RAM(数据集存在于内存中),你不必担心性能,那只是100键。
如果我使用memcache或redis,我将使用回调来获取我的数据
如果真的取决于您使用的语言(Ruby和Python提供同步Redis客户端)以及使用什么类型的paradygm(事件循环,线程池...)
但如果我使用javascript哈希,我可以同步获取数据
更确切地说,这只是因为你使用的是node_redis,而不是因为你正在使用javascript“hash”(事实上是一个对象)。
但它会以某种方式影响应用程序,例如内存的高使用率
这取决于您是否正在加载流程中的所有密钥,如果您使用的是Redis Hash,则只能查询所需的字段,而不是每次都查询整个字段。
我应该为这样的应用程序使用哪一个?
要记住的最好的事情是降低堆栈中必须维护的应用程序数量,同时仍然使用正确的工具来完成正确的工作。在这里,MySQL已经足够了,但如果你真的想使用Redis或MemCached,我会选择Redis。它将提供与memcached相同的功能,具有相同的性能,允许您在将来使用其他数据结构,而无需在堆栈中使用其他应用程序。
此外,如果您将所有数据放在Redis HASH中,您只需一次调用即可检索字段(hget)或一组字段(hmget)或所有字段(hgetall)。
最后,关于recent statistics和Redis生态系统(GUI,hosting,librairies,...),Redis似乎比Memcached更具未来性证明真的很想走那条路。
免责声明:我是Redsmin的创始人,这是一个面向在线开发人员的管理和监控Redis的服务。