栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Redis中存储32位有符号整数的内存有效方式

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Redis中存储32位有符号整数的内存有效方式

在内部,Redis以最有效的方式存储字符串。将整数强制为基数10的字符串实际上会占用更多的内存。

这是Redis存储字符串的方式-

  1. 小于10000的整数存储在共享内存池中,并且没有任何内存开销。如果愿意,可以通过更改redis.h中的常数REDIS_SHARED_INTEGERS并重新编译Redis 来增加此限制。
  2. 大于10000并且在long范围内的整数会消耗8个字节。
  3. 常规字符串的长度为len(string)+ 4个字节的长度+ 4个字节的标记可用空间+ 1个字节的空终止符+ 8个字节的malloc开销。

在您引用的示例中,对于字符串的长v / s 21字节,其问题是8字节。

编辑:

因此,如果我的一组数字都小于10,000,Redis如何存储我的数字集?

这取决于您拥有多少个元素。

如果集合中的元素少于512个(请参阅

set-max-intset-entries
参考资料),则该集合将被存储为一个IntSet。IntSet是有序整数数组的专有名称。由于您的数字小于10000,因此每个元素将使用16位。它(几乎)和C数组一样具有高效的内存。

如果您有512个以上的元素,则该集合将成为HashTable。集合中的每个元素都包装在称为的结构中

robj
,该结构的开销为16个字节。该
robj
结构具有一个指向整数共享池的指针,因此您无需为整数本身支付任何额外费用。最后,
robj
实例存储在哈希表中,哈希表的开销与集合的大小成比例。

如果您对元素消耗多少内存感兴趣,请在数据集上运行redis-rdb-
tools
(免责声明:我是该工具的作者)。或者,您可以阅读MemoryCallback类的源代码,这些注释说明了内存的布局方式。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/391990.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号