在我的系统中大约有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以节省内存