Redis避不开的五种数据结构
我们看上图执行的命令知道,hset 命令也是有返回值的。如果 hset 命令设置成功,则返回 1,否则返回 0。除此之外 Redis 也为哈希类型提供了 hsetnx 命令。在前文对字符串的介绍中,我们知道 nx 命令只有当 key 不存在的时候,才能设置成功,同样的,hsetnx 命令在 field 不存在的时候,才能设置成功。 2.获取值 hget key field ![]() 我们看 hget 命令和 get 有很大的不同,get 命令在获取的时候,只要写一个名字就可以了,而 hget 命令则要写两个名字,第一个名字是 key,第二个名字是 field。当然 key 或者 field 不存在时,返回的结果都是 nil。 3.删除 field hdel key field [field ...] ![]() hdel 命令删除的时候,也会有返回值,并且这个返回就是成功删除 field 的个数。当 field 不存在时,并不会报错,而是直接返回 0。 4.计算 field 个数 hlen key ![]() hlen 命令返回的就是当前 key 中 field 的个数,如果 key 不存在,则返回 0。 5.批量设置或获取 field-value hmget key field [field ...] hmset key field value [field value ...] ![]() hmset 命令和 hmget 命令分别是批量设置和获取值的,hmset 命令没有什么要注意的,但 hmget 命令要特别注意,当我们获取一个不存在的 key 或者不存在的 field 时,Redis 并不会报错,而是返回 nil。并且有几个 field 不存在,则 Redis 返回几个 nil。 6.判断 field 是否存在 hexists key field ![]() 当执行 hexists 命令时,如果当前 key 包括 field,则返回 1,否则返回 0。 7.获取所有 field hkeys key ![]() 8.获取所有 value hvals key ![]() 9.获取所有的 field-value hgetall key ![]() hgetall 命令会返回当前 key 中的所有 field-value,并按照顺序依次返回。 10.计数 hincrby key field increment hincrbyfloat key field increment ![]() hincrby 命令和 incrby 命令的使用功能基本一样,都是对值进行增量操作的,唯一不同的就是 incrby 命令的作用域是 key,而 hincrby 命令的作用域则是 field。 11.计算 value 的字符串长度 hstrlen key field ![]() hstrlen 命令返回的是当前 key 中 field 中字符串的长度,如果当前 key 中没有 field 则返回 0。 时间复杂度 内部编码 Redis 哈希类型的内部编码有两种,它们分别是:
下面我们通过以下命令来演示一下 ziplist 和 hashtable 这两种内部编码。 当 field 个数比较少并且 value 也不是很大时候 Redis 哈希类型的内部编码为 ziplist: ![]() 当 value 中的字节数大于 64 字节时(可以通过 hash-max-ziplist-value 设置),内部编码会由 ziplist 变成 hashtable。 ![]() 当 field 个数超过 512(可以通过 hash-max-ziplist-entries 参数设置),内部编码也会由 ziplist 变成 hashtable。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |