Redis实战系列(3) 使用hashtable和hash-max-zipmap-entries优化内存使用
来源:互联网 发布:罗马人的故事版本 知乎 编辑:程序博客网 时间:2024/05/16 15:54
在我的系统中大约有50000个用户,每个用户有nickname1、nickname2、nickname3、nickname4、profile_id。对于上面几个属性来说,每个用户都是唯一的,而用户信息大概有70个字段。我用user:info:$profile_id作为一个hashtable的key来存储一个用户的所有信息。而系统要求能用nickname1、nickname2、nickname3、nickname4来获取到用户信息。
最先考虑的是每个字段对应一个hashtable:user:nickname1:profile_id:map作为一个key,$email作为hashkey, $profile_id作为hashkey的值。对四个字段都做如是的处理,这样处理的内存占用量大概是15M,总共有4个hashtable,每个hashtable中有50000个元素,总共有200000个元素。
下面先解释一下hash-max-zipmap-entries和hash-max-zipmap-value,然后再介绍第二种方案。
hash-max-zipmap-entries是只hashtable中元素的总个数不超过设定数量时,就用zipmap的方式来存储hashtable以节省内存
hash-max-zipmap-value是hashtable中的key以及value的长度小于设定的值时,就用zipmap的方式来存储hashtable以节省内存一旦hashtable的元素个数超过了设定的值,或者任意一个元素的key或者value超过了hash-max-zipmap-value的值,则使用hashtable来存储。这两个配置主要是减少了元数据。因为每个人的nickname1、nickname2、nickname3、nickname4都是全局唯一的,所以对每个人的nickname1、nickname2、nickname3、nickname4做md5,然后取前两位作为hashtable的可以,这样会有256个hashtable,然后hashtable中的key是nickname1、nickname2、nickname3、nickname4 值是profile_id,将200000个元素分布到256个槽中,每个槽平均有781.25个元素。把hash-max-zipmap-entries的数量设置为1000。而nickname1、nickname2、nickname3、nickname4和profile_id的长度是不会超过64个字节的,所以,经过这样处理之后,内存的使用量仅仅是4.7M左右。这样做的坏处是会多消耗一些cpu的时间,因为要遍历将近1000个元素的数量,不过这个代价是值得的。
- Redis实战系列(3) 使用hashtable和hash-max-zipmap-entries优化内存使用
- Redis zipmap内存布局分析
- Redis zipmap内存布局分析
- Redis zipmap内存布局分析
- Redis内存使用优化
- Redis内存使用优化和存储
- 4.redis内存使用优化
- Redis 数据结构之 zipmap 内存布局分析
- redis zipmap
- Redis内存使用优化与存储
- Redis内存使用优化与存储
- Redis内存使用优化与存储
- Redis内存使用优化与存储
- Redis内存使用优化与存储
- Redis内存使用优化与存储
- Redis内存使用优化与存储
- Redis内存使用优化与存储
- Redis内存使用优化与存储
- DIRECTOR的几个小函数
- Java 东芝B-SX5T打印机小结
- Android中播放声音的两种方法
- java中的==和===
- delphi 实现两个exe文件共享内存映像的代码
- Redis实战系列(3) 使用hashtable和hash-max-zipmap-entries优化内存使用
- 社会就是这样现实,别再幼稚下去了,认真读过,你会成长很多… - Qzone日志
- javascript类模版 自力更生
- SQL比较常用的命令
- initramfs 使用
- Android的onCreateOptionsMenu()创建菜单Menu详解
- django-pagination 样式修改
- Windows8RP以及vS2012下载
- Linux驱动的platform机制