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]
相关文章推荐
- [置顶]C#中使用Redis不同数据结构的内存占有量的疑问和对比测试
- C#中使用Redis不同数据结构的内存占有量的疑问和对比测试
- Redis采用不同内存分配器碎片率对比
- python不同数据结构下的if...in... 耗时对比
- (C# 版描述)插入排序算法以及排序时间的测试 ---数据结构
- Redis 数据结构使用场景
- C# 使用OLEDB读取不同版本Excel数据的连接字符串
- 树不同的遍历方式及使用的不同数据结构
- 郝斌数据结构 10 跨函数使用内存讲解及其示例
- ceph块设备 VS 本地块设备 使用pgbench TPC-B测试数据对比记录
- Redis和Memcached在功能、性能以及内存使用效率上的对比
- 嵌入式c语言 之数据结构:为什么嵌入式要选择c语言? *c的可移植性好:能在不同平台的结构访问硬件 *c具有简洁紧、使用灵活的语法机制,并能直接访问硬件。 *c具有高效的运行效率
- c#数据结构之运行时间测试
- 【测速】使用不同的Docker镜像加速器下载速度 对比测试
- nginx使用lua基于url参数分发不同文件对比测试
- 小结一下c#WinForm调用sql2000,将老表数据通过与新表数据比较,不同的添加进去,并使用进度条显示进度的教训与经验
- C#中Merge方法实现把不同表结构的表合并成一张表,同时合并数据
- Redis内存使用达到maxmemory设定值后玩家数据无法写入的问题
- C#中结构数据类型的使用