python – 在Redis中存储大字符串的最佳方法…获取混合信号

我正在存储大约150M的字符串.它远远低于Redis中字符串的最大大小,但我看到了很多不同的,矛盾的意见,我应该采取的方法,并没有明确的路径.

一方面,我已经看到我应该使用带有小数据块的哈希,另一方面,我被告知会导致间隙,并且存储整个字符串是最有效的.

一方面,我已经看到我可以传入一个大字符串,或者做一堆字符串追加操作来构建它.后者似乎可能比前者更有效率.

我正在从其他地方读取数据,所以我宁愿不填充本地的物理文件,以便我可以传递整个字符串.显然,如果我可以将输入数据分块,并通过追加将其提供给Redis,那么它会更好.但是,如果使用Redis无效,则可能需要永久地提供所有数据,一次一个块.我会尝试一下,但我缺乏经验,而且由于各种原因,它可能效率低下.

话虽如此,有很多关于“小”字符串和“大”字符串的讨论,但目前尚不清楚Redis认为最佳的“小”字符串. 512K,1M,8M?

有没有人有任何明确的评论?

我喜欢它,如果我可以提供类似文件的对象或生成器来redis-py,但这比我的意思更具有语言特性,而且很可能是协议不可能的:它只是无论如何,当需要将数据强加给开发人员时,需要对数据进行内部分块.

最佳答案 一种选择是:

将数据存储为长块列表

>将数据存储在List中 – 这允许将内容存储为块的序列以及一步扫描整个列表
>使用管道contenxt管理器存储数据,以确保您是唯一一个在此刻写入的人.
>请注意,Redis始终处理单个请求,而其他所有请求都被阻止.对于需要时间写入的大型文件,您不仅可以减慢其他客户端的速度,而且还可能超过最大执行时间(请参阅此值的配置).

使用已知指针将数据存储在随机命名列表中

替代方法,也使用list,将发明随机列表名称,按块将内容块写入其中,并在完成后,更新Redis中已知密钥中的值,指向此随机命名列表.不要忘记删除旧的,这可以从您的代码中完成,但如果它在您的用例中似乎可用,您可能会使用到期.

点赞