Redis开发与运维读书笔记之5
Redis开发与运维读书笔记之五
第2章 API的理解和使用 第3部分
哈希
Hash类型指键值本身又是一个键值对结构,如value={{field1,value1},...{fieldN,valueN}}
Hash值的映射关系叫field-value,这里的value是field对应的值,不是键对应的值
Hash命令
设置值
也可以使用hsetnx用于添加,和set与setnx的关系一样,但作用域为field
获取值
删除值
计算field个数
批量设置或获取field-value
判断field是否存在
获取所有field
获取所有value
获取所有field-value
注意:当hash元素较多时,hgetall可能会造成Redis阻塞,建议要获取多个,可以使用hmget,如果一定要获取所有field-value,可以使用hscan命令,采用渐进式遍历Hash类型
自增指定数字/浮点数字
计算value字符串长度
内部编码
使用场景
Hash类型和关系型数据库的不同之处:
第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不适合模拟关系型复杂查询,维护成本太高