您的位置:首页 > 理论基础 > 数据结构算法

C#中使用Redis不同数据结构的内存占有量的疑问和对比测试

2020-01-14 08:38 711 查看

    最近在大量使用Redis来进行数据统计前的清洗和整理,每天的数据量超5千万+,在开发过程中,数据量小,着重注意业务规则的处理,在上线基本测试后发现了大量的问题,其中之一就是Redis存储数据过多,内存的使用量大大增加。进过简单分析,对存储非常频繁的实体类进行了改进,字段名字进行缩写处理,一下子就减少了很多内存使用量。在对Redis的研究过程中,发现了以下这篇文章:Redis上踩过的一些坑-美团 ,发现其中 有一节内容:“四、redis内存使用优化 ”,对Redis不同的存储结构的使用量进行了对比,对此很敢兴趣,也发现自己在使用过程中可能存储误区,所以就根据自己的业务情况进行了同样的测试,看看有没有优化的余地。

1.测试环境和对比项目

  C# 4.0 +  ServiceStack.Redis 3.9 + Windows Redis 2.6.2

  测试同样数据结构下,测试存储的Key 的个数100万:

    1) 普通K-V结构存储

    2) 列表结构存储

    3) 独立哈希结构存储

    4) 多个哈希结构存储

    下面看看简单的代码和结果,为了简单起见,我们使用同一个实体结构和同样的数据,这个实体是业务中用到的,对字段值进行了模糊处理。

    由于上述美团的文章的存储结构比较简单,所以我选择了一个比较接近实际使用的实体结构。7个字段,值类型也基本都有。

public static void TestKeyMemoryList()
{
String key = "701183714183_8801_6222";
var model = GetEntity();
Int32 N = 1000000;
for (int i = 0; i < N; i++)
{
MsgRedis.RedisHelper.List_Add<SendScanMsg>(key, model);
}
}

结果如下:

# Memory
used_memory:220861160
used_memory_human:210.63M
used_memory_rss:220861160
used_memory_peak:410351028
used_memory_peak_human:391.34M
used_memory_lua:31744
mem_fragmentation_ratio:1.00
mem_allocator:libc
[h1]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: