Redis常见数据类型二:Hash
hash类型
1、新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息
2、需要的存储结构:一个存储空间保存多个键值对数据
3、hash类型:底层使用哈希表结构实现数据存储
hash存储结构优化
- 如果field(字段)数量较少,存储结构优化为类数组结构。
- 如果field数量较多,存储结构使用HashMap结构。
hash类型数据的操作
单条数据操作
添加/修改数据
添加和修改的格式都是:hset key field value
获取数据
格式:hget key field
删除数据
格式:hdel key field
多条数据操作
添加/修改多条数据
格式:hmset key field value field1 value1
获取多条数据
格式:hmget key field field1
扩展操作
获取key的全部值
格式:hgetall key
获取key的值的数量
格式:hlen key
是否存在field
格式:hexists key field
所有key的字段
格式:hkeys key
所有key的值
格式:hvals key
为哈希表中的字段值加上指定增量值
格式:hincrby key field num
增量也可以为负数,相当于对指定字段进行减法操作。
如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。
如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。
对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。
本操作的值被限制在 64 位(bit)有符号数字表示之内。
为哈希表中的字段值加上指定浮点数增量值
格式:hincrbyfloat key field num
如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。
为哈希表中不存在的的字段赋值
格式:hsetnx key field value
如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。
如果字段已经存在于哈希表中,操作无效。
如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。
hash 类型数据操作注意事项
hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到, 对应的值为(nil)。
每个 hash 可以存储 2³² - 1 个键值对。
hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用。
hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问瓶颈。
End!