我正在存储大约150M的字符串。它远远低于Redis中字符串的最大大小,但我看到了很多不同的,矛盾的意见,我应该采取的方法,并没有明确的路径。
一方面,我已经看到我应该使用带有小数据块的哈希,另一方面,我被告知会导致间隙,并且存储整个字符串是最有效的。 / p>
一方面,我已经看到我可以传入一个大字符串,或者做一堆 string-append 操作来构建它。后者似乎可能比前者更有效率。
我正在从其他地方读取数据,所以我宁愿不填写本地物理文件,以便我可以传递整个字符串。显然,如果我可以将输入数据分块,并且通过附加将提供到 Redis中,那么它会更好。但是,如果使用Redis无效,则可能需要永久地提供所有数据,一次一个块。我会尝试一下,但我缺乏经验,而且由于各种原因可能效率低下。
话虽如此,有很多关于“小”字符串和“大字符串”的讨论,但目前尚不清楚Redis认为最佳的“小”字符串。 512K,1M,8M?
有没有人有任何明确的评论?
如果我可以为 redis-py 提供类似文件的对象或生成器,我会喜欢它,但这比我的意思更具有语言特性,而且很可能是不可能的对于协议,无论如何:它只需要内部数据块,无论如何,当把它强加给开发者时可能会更好。
答案 0 :(得分:2)
一种选择是:
pipeline
contenxt管理器存储数据,以确保您是唯一一个在此刻写作的人。替代方法,也使用list,将发明随机列表名称,按块将内容块写入其中,并在完成后,更新Redis中已知密钥中的值,指向此随机命名列表。不要忘记删除旧的,这可以通过您的代码完成,但如果它似乎在您的用例中可用,您可能会使用到期。