美文网首页
redis 用hashmap省内存的误解

redis 用hashmap省内存的误解

作者: 提米锅锅 | 来源:发表于2019-11-22 14:02 被阅读0次

看过许多redis优化的案例,通过引入hashmap的方式将key散列到多个hashmap,
具体可以见:
Redis 利用Hash存储节约内存 - 刘本龙的专栏 - CSDN博客

我们得到如下公式:

key的数量=hashmap数量* 每个hashmap filed的数量

原来是:
key1,key2,key3,key4,key5
变成
hash1:
key1:value1
key2:value2
key3:value2
hash2:
key4:value4
key5:value5

虽然名义上5个key变成了2个hashmap,但是每个filed还是会保存原始的key,所以从key减少的层面是行不通的,这个时候就要从底层储存结构去看。

redis对hashmap有一个优化,当filed数量比较少的时候(因为ziplist是用顺序遍历的方式查找元素,所以数量多了复杂度是o(N)肯定不合适。
),会用一个叫ziplist的结构保存,而不是传统的hash结构,ziplist有几个特点:

1 ziplist申请一个快连续的内存,所有元素是紧挨着存放,能够减少内存碎片
2 通过offset来标识前后元素的位置,不需要额外的指针,也可以减少对象

ziplist介绍
https://blog.csdn.net/weixin_30783913/article/details/98141347

所以hashmap能省内存是依赖ziplist的结构,而不是key的减少。
使用ziplist可以用以下参数控制

hash-max-zipmap-entries 512 #配置字段最多512个
hash-max-zipmap-value 64 #配置value最大为64字节。

必须满足以上两个条件,那么该key会被压缩。否则就是按照正常的hash结构来存储hash类型的key。

相关文章

  • redis 用hashmap省内存的误解

    看过许多redis优化的案例,通过引入hashmap的方式将key散列到多个hashmap,具体可以见:Redis...

  • Redis

    Redis为啥快: 纯内存操作: 数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复...

  • 【问答】Java集合

    用Hashmap实现redis有什么问题 Redis的缓存可以持久化,Map是内存对象,程序一重启数据就没了;Re...

  • Redis面试题汇总

    1、使用 Redis 有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势...

  • Java 面试问题系列八(Redis )

    1:使用redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是...

  • Redis

    1.使用Redis有哪些好处? 1).速度快,因为数据存在内存中,类似于hashmap,hashmap的优...

  • 非关系型数据库redis、memcached对比

    - redis数据库的优点: (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查...

  • Redis 知识总结

    Redis的优点/好处 (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操...

  • redis相关

    1. 使用redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就...

  • java编程细节——你所要知道的Redis

    1. 使用Redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就...

网友评论

      本文标题:redis 用hashmap省内存的误解

      本文链接:https://www.haomeiwen.com/subject/jcafwctx.html