Redis开发与运维读书笔记之四——哈希

作者: tcxurun 分类: 学习笔记 发布时间: 2020-03-15 21:28 ė 6 没有评论

哈希Hash

哈希类型指键值本身又是一个键值对结构,如value={{field1,value1},…{fieldN,valueN}}。哈希的映射关系叫field-value,注意,这里的value是指field对应的值,不是键对应的值。

 

常用命令

设置值:hset key filed value,也可以使用hsetnx用于添加,和set与setnx的关系一样,但作用域为field。

获取值:hget key filed,如果键或field不存在,返回nil

删除值:hdel key filed [field…],返回结果为成功删除field的个数

计算field个数:hlen key

批量设置或获取field-value:

hmget key field [field …]

hmset key field value [field value …]

 

判断field是否存在:hexists key field

获取所有field:hkeys key

获取所有value:hvals key

获取所有field-value:hgetall key

注意,当hash元素较多时,hgetall可能会造成Redis阻塞,建议要获取多个,可以使用hmget,如果一定要获取全部filed-value,可以使用hscan命令,采用渐进式遍历哈希类型

 

自增指定数字/浮点数字

hincrby key field

hincrbyfload key field

 

计算value字符串长度

hstrlen key field

 

哈希类型命令的时间复杂度,开发人员可以参考此表选择适合的命令

命令

                            时间复杂度

hset key field value

O(1)

hget key field

O(1)

hdel key field [field …]

O(k),kfield个数

hlen key

O(1)

hgetall key

O(n)nfield总数

hmget field [field …]

O(k),kfield个数

hmset field value [field value…]

O(k),kfield个数

hexists key field

O(1)

hkeys key

O(n)nfield总数

hvals key

O(n)nfield总数

hsetnx key field value

O(1)

hincrby key field increment

O(1)

hincrbyfloat key field increment

O(1)

hstrlen key field

O(1)

 

内部编码

哈希类型的内部编码有两种:

  • ziplist:压缩列表,当hash类型元素个数小于hash-max-ziplist-entries配置(默认512个)、同时所有值都小于hash-max-ziplist-value配置(默认64字节),Redis使用ziplist作为内部实现,更加紧凑,节省内存。
  • hashtable:哈希表。当无法满足ziplist要求时,使用hashtable,因为此时ziplist读写效率会下降,而hashtable的读写时间复杂度为O(n)

 

使用场景

Hash类型和关系型数据库的不同之处:

  • Hash类型是稀疏的,关系型数据库是完全结构化的
  • 关系型数据库可以做复杂查询,Redis不适合模拟关系型复杂查询,维护成本太高

本文出自天一直很蓝,转载时请注明出处及相应链接。

本文永久链接: http://www.tcxurun.cn/archives/553

发表评论

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

Ɣ回顶部