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