使用hash作为redis的存储类型以节省内存

一般我们存储一个键,很自然的就会使用get/set去存储,实际上这并不是很好的做法。

实际上redis存储一个key会有一个最小内存,不管你存的这个键多小,都不会低于这个内存。所以我们可以把key复用,存储hash类型。下面的内容转自http://oldblog.antirez.com/post/redis-weekly-update-7.html,我大概翻译一下。

如果我们希望执行SET foo bar,我们实际可以这样:

1、把foo通过SHA1算法计算出其值,0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33。
2、使用前四个字符作为真实的key
3、使用前四个字符“0bee”作为hash的key,来存储上述值

所以我们在存储值的时候,执行HSET 0bee foo bar。

下面是一些计算:

1、使用SHA1后的前四个字符作为key,这样一个key里面有65536个键值可以存储。
2、如果有一百万的个键值,差不多每个hash可以存储15个键
3、如果一千万个键值,差不多每个hash可以存储152个键

所以我们可以在redis.conf中设置如下参数:

hash-max-zipmap-entries 512
hash-max-zipmap-value 512

有一个数据的对比:

正常情况下存储一千万的数据需要1.7GB
使用hash存储一千万的数据需要300MB

dump file只有200MB

所以我们在存储纯key-value的数据的时候可以采用hash来提高内存使用效率。

本文原创于赵伊凡BLOG

©原创文章,转载请注明来源: 赵伊凡's Blog
©本文链接地址: 使用hash作为redis的存储类型以节省内存

“使用hash作为redis的存储类型以节省内存”的34个回复

  1. Pingback: Blue Coaster33
  2. Pingback: tv online, online tv
  3. Pingback: tvpackages.net
  4. Pingback: stop parking
  5. Pingback: laan penge
  6. Pingback: mobile porn movies
  7. Pingback: water ionizer machine
  8. Pingback: Instagram likes kopen
  9. Pingback: car parking
  10. Pingback: water ionizer
  11. Pingback: electricians yuma az
  12. Pingback: locksmith vs dizaster
  13. Pingback: pay day loans
  14. Pingback: house blue
  15. Pingback: payment plan
  16. Pingback: plan
  17. Pingback: water ionizer
  18. Pingback: electricity
  19. Pingback: alkaline water
  20. Pingback: here
  21. Pingback: this post
  22. Pingback: this post
    1. 上面说了,一个key会有个最小内存。但是如果内存充裕的话,其实也不建议这样搞,对程序来说有点烦。但是内存不够可以试试这样。

发表评论

电子邮件地址不会被公开。 必填项已用*标注