首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

redis - hash_max_zip地图_entries设置过大有有关问题

2012-11-18 
redis -- hash_max_zipmap_entries设置过大有问题使用redis时为了使用hash追求更高的内存使用率,我们一般

redis -- hash_max_zipmap_entries设置过大有问题

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

?

/* 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中内存比文件大)

http://www.searchtb.com/2011/05/redis-storage.html(源码分析)? http://www.oschina.net/question/12_31910(容量估计) http://www.mysqlops.com/2011/09/01/redis-hash-table.html(ht分析) http://www.open-open.com/bbs/view/1321697543077(zipmap分析) http://stackoverflow.com/questions/8963372/how-to-save-and-retrieve-string-with-accents-in-redis(编码问题)

?

热点排行