Redis开发与运维读书笔记之五

第2章 API的理解和使用 第3部分

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

Hash命令
设置值
hset key field value

也可以使用hsetnx用于添加,和set与setnx的关系一样,但作用域为field

获取值
hget key field


删除值
hdel key 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,如果一定要获取所有field-value,可以使用hscan命令,采用渐进式遍历Hash类型

自增指定数字/浮点数字
hincrby key field
hincrbyfload key field


计算value字符串长度
hstrlen key field


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


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

猜你喜欢

转载自xwhuang.iteye.com/blog/2377873