【发布时间】:2019-10-13 15:33:33
【问题描述】:
我需要存储大约 1.5 亿个键值对,其中键是整数,值是一组整数(无序)。 我在我的个人桌面上使用 redis 作为单个实例,具有 32 GB RAM 和一个具有 8 个内核的 CPU。
我为此使用“SADD”命令。我使用的客户端是hiredis,以及流水线。 所以,命令看起来像这样:
redisAppendCommand(context,"SADD %d %d %d",integer_key, integer_value1, integer_value2 );
执行时间: 使用 linux 中的“时间”命令,我得到以下结果:
真实:8m 30s
用户:5m 18s
系统:0m 7s
内存使用情况:
在 redis 中,数据库占用大约 18GB,redis 的内存占用增长到 28GB。
一个键看起来像这样“94190049249988”。
“keys.bytes-per-key”:(整数)1830。
以下是我尝试过的优化,以提高速度并减少内存占用:-
1) 流水线以提高速度。
2)存储整数集以减少内存占用。这使用 int-set 编码。
是否有一种内存和速度有效的方式来存储这 1.5 亿个键值?
我应该以某种方式使用其他数据类型,如 HSET 吗?会有帮助吗?
我可以尝试其他优化吗?
我的用例推荐任何其他数据存储也将不胜感激。
【问题讨论】: