redis内存优化【转载】

一、一次string转化为hash的优化

1. 场景:

用户id: userId,

用户微博数量:weiboCount

2. 实现方法:

(1) 使用Redis字符串数据结构, userId为key, weiboCount作为Value

(2) 使用Redis哈希结构,hashkey只有一个, key="allUserWeiboCount",field=userId,fieldValue= weiboCount

(3) 使用Redis哈希结构,  hashkey为多个, key=userId/100, field=userId%100, fieldValue= weiboCount

3. 获取方法:

#获取userId=5003用户的微博数

(1) get 5003

(2) hget allUser 5003

(3) hget 50 3

4. 内存占用量对比(100万用户 userId u:1~u:1000000)

#方法一 Memory

used_memory:118002640

used_memory_human:112.54M

used_memory_rss:127504384

used_memory_peak:118002640

used_memory_peak_human:112.54M

used_memory_lua:36864

mem_fragmentation_ratio:1.08

mem_allocator:jemalloc-3.6.0

---------------------------------------------------

#方法二 Memory

used_memory:134002968

used_memory_human:127.80M

used_memory_rss:144261120

used_memory_peak:134002968

used_memory_peak_human:127.80M

used_memory_lua:36864

mem_fragmentation_ratio:1.08

mem_allocator:jemalloc-3.6.0

--------------------------------------------------------

#方法三 Memory

used_memory:19249088

used_memory_human:18.36M

used_memory_rss:26558464

used_memory_peak:134002968

used_memory_peak_human:127.80M

used_memory_lua:36864

mem_fragmentation_ratio:1.38

mem_allocator:jemalloc-3.6.0

三、结果对比

redis核心对象 数据类型 + 编码方式 + ptr  分段hash也不会造成drift

方案                            优点                              缺点

string                  直观、容易理解             内存占用较大                                                                key值分散、                                                                 不便于计算整体

hash                  直观、容易理解         内存占用大、 一                                                            个key占用过大内                                                            存,如果是redis-                                                     cluster会出现data drift

segment-hash    内存占用量小          理解不够直观

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容