结论,小数据类型的大批量数据,不适合用string类型存储.
元数据空间占用了太多内存.
1万个数据
string的加了1万个
127.0.0.1:6379> info memory
# Memory
used_memory:1767568
used_memory_human:1.69M
hash加了1万个
127.0.0.1:6379> info memory
# Memory
used_memory:1013984
used_memory_human:990.22K
100万个
string的加了100万个
# Memory
used_memory:81316376
used_memory_human:77.55M
127.0.0.1:6379> dbsize
(integer) 1000000
hash的加了100万个
# Memory
used_memory:11080560
used_memory_human:10.57M
used_memory_rss:77033472
package com.hgh.test;
import redis.clients.jedis.Jedis;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.LongAdder;
/**
* 测试string在大量小数据的情况的内存浪费,以及使用hash来代替的效果
*
*/
public class StringRedisBigDataTest {
public static void main(String[] args) {
try {
Jedis jedis = new Jedis("192.168.0.103");
LongAdder adder = new LongAdder();
adder.add(1000000000L);
for (int i = 0;i<1000000;i++){
adder.add(1);
jedis.set(adder.toString(),adder.toString());
}
System.out.println("end");
}catch (Exception e){
e.printStackTrace();
}
}
}
package com.hgh.test;
import redis.clients.jedis.Jedis;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.LongAdder;
/**
* 测试string在大量小数据的情况的内存浪费,以及使用hash来代替的效果
*
*/
public class StringRedisBigDataTest {
public static void main(String[] args) {
try {
Jedis jedis = new Jedis("192.168.0.103");
LongAdder adder = new LongAdder();
adder.add(1000000000L);
for (int i = 0;i<1000000;i++){
adder.add(1);
String value = adder.toString();
String hashKey = value.substring(0,7);
String hkey = value.substring(7);
jedis.hset(hashKey,hkey,value);
}
System.out.println("end");
}catch (Exception e){
e.printStackTrace();
}
}
}