使用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-desktop-manager_0.8.3-120_amd64可以用于远程登录redis服务器,管理redis
redis-desktop-manager_0.9.2.19_amd64.deb for linux Redis管理工具 0.9.2
tomcat9负载均衡tomcat-cluster-redis-session-manager_4.0
redis-4.0.14-1.x86_64.rpm
赠送jar包:flink-connector-redis_2.10-1.1.5.jar; 赠送原API文档:flink-connector-redis_2.10-1.1.5-javadoc.jar; 赠送源代码:flink-connector-redis_2.10-1.1.5-sources.jar; 赠送Maven依赖信息文件:flink-...
1、redis_4.0.10-1_arm64.deb 银河麒麟v4+飞腾 安装包 2、自带服务启动 3、目录树 /opt/redis-4.0.10/ ├── bin ...│ ├── redis-sentinel -> redis-server │ └── redis-server └── redis.conf
redis-spring-pub_sub
Redis-4.0.10_linux_setup
redis-5_0_0_debug-源码.rar
redis-3.0.1_windows_64位 可以直接解压缩到指定盘符下 直接执行redis.exe 即可
redis-desktop-manager_0.9.0.27_amd64.deb redis客户端
版本大于ubuntu 16 redis-desktop-manager_0.9.0.17_amd64.deb
官方离线安装包,亲测可用
Redis是一个开源的、基于内存的数据结构存储器,可以用作数据库、缓存和消息中间件。redis-3.0.503_x64位免安装版,下载即用。
redis-desktop-manager_0.9.1.18_amd64.deb Redis管理工具 0.9.1
x86 php_redis-2.2.7-5.6-ts-vc11-x64 php_redis-2.2.7-5.6-ts-vc11-x86
Redis-x64-3.2.100_2.zip 的windows版本,可以价位 windows 服务,很方便本地调试,以及winows server的项目部署
redis-desktop-manager_0.9.3.20_amd64.deb for Linux Redis管理工具 0.9.3 New features ReJSON module support Fixes Fix #4095: Fedora 27 - QQmlApplicationEngine failed to load component
scrapy-redis分布式爬虫框架+示例
redis-acl\lib_acl_cpp\samples\redis路径下,把lib_acl_vc2010d.lib、lib_acl_cpp_vc2010d.lib放到 \redis-acl\lib_acl_cpp\samples\redis\redisclient路径下: 依赖的库 需要下载开源 源码编出来 : svn://svn....