2011-12-26 58 views
2

我想在debian环境中通过C++客户端使用redis来存储大的字符串列表(每个列表近200万个字符串)。我曾经使用boost库的无序集来处理这个问题,但是由于我必须定期将每个列表持久化到文件系统,并且我得到了很多更新和删除操作,而不是开发我的数据库系统,所以我想让redis一试身手。redis的性能问题

我的redis配置没有任何周期性保存,我打算在更新完成时手动保存内存中的所有更改。但出于测试目的,我甚至不执行保存到磁盘。我的测试应用程序执行200万次写入,这需要接近100秒。这是纯粹的内存操作,因为我没有执行任何快照操作(我将配置设置为根本不保存)

如果我使用无序集执行相同的2百万个插入,则需要接近5秒。互联网上的每个技术站点都说,redis速度非常快,但在我的情况下,即使没有涉及IO,它也比boost无序集合慢了近50倍,为什么呢?我在这里忽略了明显的东西吗?

回答

5

您可能需要阅读Redis benchmark page

Redis的是高效的为远程存储。

您试图将本地存储(boost :: unordered_set)与远程存储(Redis)进行比较。与向Redis执行往返操作的成本相比,维护该组在内存中的成本可以忽略不计。如果您的Redis实例托管在同一个盒子上,也是如此。任何IPC都比哈希表查找更昂贵。