`
chenchao051
  • 浏览: 137539 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

redis -- hash_max_zipmap_entries设置过大有问题

阅读更多

使用redis时为了使用hash追求更高的内存使用率,我们一般都用hash结构,并且有时候会把hash_max_zipmap_entries这个值设置的很大,很多资料也推荐设置到1000,默认设置为了512,但是这里有个坑

 

#define ZIPMAP_BIGLEN 254
#define ZIPMAP_END 255

 

 

/* Return the number of entries inside a zipmap */
unsigned int zipmapLen(unsigned char *zm) {
    unsigned int len = 0;
    if (zm[0] < ZIPMAP_BIGLEN) {
        len = zm[0]; //假如subkey个数少于254,直接取出
    } else {
        unsigned char *p = zipmapRewind(zm);
        while((p = zipmapNext(p,NULL,NULL,NULL,NULL)) != NULL) len++;//不然的话,完整遍历
        /* Re-store length if small enough */
        if (len < ZIPMAP_BIGLEN) zm[0] = len;
    }
    return len;
}

 

 

 

看到没,同志们,当zm的subkey数超过ZIPMAP_BIGLEN时,你就悲剧了,每次获得zm的subkey的个数都得去遍历整个zipmap。假如大量并发查询到zm时,都需要去完整遍历zm,结果就是CPU像打了鸡血一样的上去了。

 

 

推荐几个文章:

http://stackoverflow.com/questions/10004565/redis-10x-more-memory-usage-than-data(为什么redis中内存比文件大)


 

分享到:
评论

相关推荐

    redis_介绍_-_田琪

    - Redis 提供了许多参数以优化性能,如哈希表的压缩阈值(`hash-max-zipmap-entries`、`hash-max-zipmap-value`),列表的最大压缩长度(`list-max-ziplist-entries`、`list-max-ziplist-value`),集合的整数集合最大...

    redis 配置详细介绍

    请注意,以上只是一部分配置选项,Redis还有许多其他可调整的设置,如`lua-time-limit`(Lua脚本执行时间限制)、`hash-max-zipmap-entries`(哈希类型压缩阈值)等。理解并正确配置这些参数,能确保Redis在各种应用...

    redis 适用场景与实现

    Hash类型的内存优化可以使用hash-max-zipmap-entries和hash-max-zipmap-value参数;Set类型可以通过set-max-intset-entries参数来优化内存。此外,通过分析网络接口、线程模型、缓存一致性、锁的复杂性和死锁问题等...

    redis系统管理

    - `hash-max-zipmap-entries` - `hash-max-zipmap-value` - `list-max-ziplist-entries` - `list-max-ziplist-value` - `set-max-intset-entries` - `zset-max-ziplist-entries` - `zset-max-ziplist-value` ...

    Redis优化经验总结(必看篇)

    hash-max-zipmap-entries 64 hash-max-zipmap-value 512  当value这个Map内部不超过多少个成员时会采用线性紧凑格式存储,默认是64,即value内部有64个以下的成员就是使用线性紧凑存储,超过该值自动转成真正的...

    redis配置的文档

    `hash-max-zipmap-entries` 和 `hash-max-zipmap-value` 控制哈希表在达到一定大小后转换为 ZIPMAP 以节省内存;`activerehashing yes` 表示启用定期的哈希表重哈希,保持内存利用率。 以上是 Redis 配置文件中的...

    redis详细介绍

    - **hash-max-zipmap-entries**:哈希表中压缩映射的最大条目数,默认为512。 - **hash-max-zipmap-value**:压缩映射中每个条目的最大长度,默认为64字节。 这些参数可以帮助调整Redis内部数据结构的表现形式,以...

    Redis教程(十四):内存优化介绍

    例如,当Hash中的字段数量小于`hash-max-zipmap-entries`配置项指定的值(默认64),并且字段的最大长度不超过`hash-max-zipmap-value`(默认512字节)时,Redis会使用压缩映射(Ziplist)编码。同样的规则也适用于...

    详谈redis优化配置和redis.conf说明(推荐)

    17. **其他高级配置**: 如`glueoutputbuf`、`hash-max-zipmap-entries`等,用于优化内存使用和性能。 请注意,Redis官方并不推荐在生产环境中使用虚拟内存功能(VM),而是倾向于使用AOF或RDB持久化策略。此外,...

Global site tag (gtag.js) - Google Analytics