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。 (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |