首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何正确计算散列值?

如何正确计算散列值?
EN

Stack Overflow用户
提问于 2019-06-05 11:40:53
回答 1查看 2K关注 0票数 2

我的问题示例:HMSET myhash field1 value1 field2 value2和my散列只有这两个字段。

主要问题是如何计算hash-max-ziplist-value,使我的散列不会超过以压缩格式维护散列的值,从而将内存使用量降到最低。

非常感谢“凯文·克里斯托弗·亨利”对他的详细解释、帮助和时间。由于我的英语能力有限,我将在这里总结凯文的回答。如果我理解错了,请纠正我。

(1)为了满足hash-max-ziplist-value,我需要计算最大(field1value1field2value2)。假设value1的大小最大。然后,我只需要确保value1的大小不超过hash-max-ziplist-value

(2)要计算value1,只需计算大小的字节数即可。因为hash-max-ziplist-value是任何压缩之前字符串值的字节数。

(3)为了计算value1的字节数,有很多种方法,其中之一是:首先,如果没有,则将value1转换为UTF8编码。其次,使用客户端语言检查它的长度。因为UTF8编码字符串的长度是大小的字节数。(例如:utf8.encode(value1).length)。

原始邮政

例如,HMSET myhash field1 value1 field2 value2

  • 首先,我想澄清hash-max-ziplist-entries的真正含义。

上面的例子是一个条目还是两个条目,因为它有两个字段?

  • hash-max-ziplist-value是什么?的大小,以字节为单位

(a) MEMORY USAGE myhash

(b) field1value1field2value2的总和

(c) value1value2的总和。

(d) max(value1value2)?

(e)最大(field1+value1field2+value2)

  • 我不知道如何计算我的哈希值来匹配hash-max-ziplist-valuehash-max-ziplist-value是字节的大小吗?那是utf-8编码的字符串长度吗?在redis中是否有用于此计算的现有命令?

非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-05 13:08:47

这些值在redis.conf文件以及内存优化文档中都有简要描述。

当哈希有少量的条目时,使用内存高效的数据结构进行编码,并且最大条目不超过给定的阈值。可以使用以下指令配置这些阈值。散列-最大值-ziplist-条目512 散列-最大值-ziplist-值64

使用这些默认值作为示例,如果哈希包含512或更少的条目,且每个条目为64字节或更小,则哈希将使用ziplist进行编码。

尽管文档没有确切说明哈希条目的大小是如何计算的,但是查看源代码表明字段名和值都必须小于或等于阈值。您应该能够通过计算二进制字符串的长度(以字节为单位)来确定大小。

为了回答你的一些具体问题:

上面的例子是一个条目还是两个条目,因为它有两个字段?

二。

hash-max-ziplist-value是什么?

使用您的术语,这将是max(field1, value1, field2, value2)

那是utf-8编码的字符串计算吗?

Redis处理二进制字符串。这取决于您(或您的客户)决定使用什么编码。

有什么简单的方法来计算hash-max-ziplist-value的myhash值(以字节为单位)?在redis中是否存在用于此计算的命令?

据我所知,并不是这样,但是值的二进制字符串表示形式的长度应该大致正确。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56459786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档