Java 针对hashmap与字符串键的Redis内存优化

Java 针对hashmap与字符串键的Redis内存优化,java,data-structures,redis,memory-optimization,Java,Data Structures,Redis,Memory Optimization,我一直试图在两种情况下评估redis的内存大小 情景1: String commonString = "Test"; long commonId = 1234567890L; int size = 0; for(int i = 1; i <= 100; i++) { jedis.set((commonString+"_"+commonId+"_KEY_"+i).getByte

我一直试图在两种情况下评估redis的内存大小

情景1:

    String commonString = "Test";
    long commonId = 1234567890L;
    int size = 0;
    for(int i = 1; i <= 100; i++)
    {
        jedis.set((commonString+"_"+commonId+"_KEY_"+i).getBytes(),("Value_"+i).getBytes());
        DebugParams debugParams = DebugParams.OBJECT(commonString+"_"+commonId+"_KEY_"+i);
        size += Integer.parseInt(debugged.split(":")[4].split(" ")[0]);
    }
String commonString=“Test”;
长公共ID=1234567890L;
int size=0;

对于(int i=1;i如果您参考关于的文档,您将了解:

调试对象是客户端不应使用的调试命令。请改为检查对象命令

换一种说法,无论您从
DebugParams.OBJECT
得到什么,都很可能与您试图实现的目标几乎完全无关

好消息是Redis v4引入了新的
内存
(Doctor)命令

6.新内存命令。 我爱它,就像我爱延迟医生一样,他曾经在邮件列表中提出削减“我的Redis很慢”的抱怨 一小部分。现在我们有它的内存问题以及

127.0.0.1:6379> MEMORY DOCTOR
Hi Sam, this instance is empty or is using very little memory, my issues detector can't be used in these conditions. Please, leave for
你在地球上的任务,并用一些数据填充它。新的山姆和我 一旦我完成重新启动,就会回到我们的编程

电影版权所有者可能会因为我接受科幻对话的灵感而起诉我,但没关系。等我回来的时候给我带些橘子来 在监狱里

记忆的作用远不止这些

127.0.0.1:6379> MEMORY HELP
1) "MEMORY USAGE <key> [SAMPLES <count>] - Estimate memory usage of key"
2) "MEMORY STATS                         - Show memory usage details"
3) "MEMORY PURGE                         - Ask the allocator to release memory"
4) "MEMORY MALLOC-STATS                  - Show allocator internal stats"
127.0.0.1:6379>内存帮助
1) “内存使用情况[示例]-估计密钥的内存使用情况”
2) “内存统计信息-显示内存使用详细信息”
3) “内存清除-要求分配器释放内存”
4) “内存MALLOC-STATS-显示分配器内部统计信息”
usage子命令的内存使用情况报告将非常有用,但“STATS”提供的深入信息也非常有用

现在所有这些都没有被记录下来,所以想一想它到底是干什么的吧


我正在使用redis-3.2.8。我如何才能找出情景1和情景2中的确切内存?1)重置Redis 2)从
INFO memory
3)创建大量相同的键4)读取另一个读数5)重复每次实验并进行比较。不准确,但在v4之前您可以做到最好。
    String commonString = "Test";
    long commonId = 1234567890L;
    jedis.flushAll();
    String info1 = jedis.info();
    for(int i = 1; i <= 75; i++)
    {
        jedis.hset(commonString+"_"+commonId,"KEY_"+i,"VALUE_"+i);
    }
    String info2 = jedis.info();
127.0.0.1:6379> MEMORY DOCTOR
Hi Sam, this instance is empty or is using very little memory, my issues detector can't be used in these conditions. Please, leave for
127.0.0.1:6379> MEMORY HELP
1) "MEMORY USAGE <key> [SAMPLES <count>] - Estimate memory usage of key"
2) "MEMORY STATS                         - Show memory usage details"
3) "MEMORY PURGE                         - Ask the allocator to release memory"
4) "MEMORY MALLOC-STATS                  - Show allocator internal stats"