hash

哈希类型

前面介绍了string类型,存数据还行,但是对象类数据的村塾如果具有较频繁的跟新需求的时候的笨重

hash类型

  • 新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息
  • 需要的存储结构:一个存储空间保存多个键值对数据
  • hash类型:底层使用哈希表结构实现数据存储

哈希存储结构优化

  • 如果field数量较少,存储结构优化为类数组结构

  • 如果field数量较多,存储结构使用hashmap结构

基本操作

单条

# 添加/修改数据
hset key field value
    127.0.0.1:6379> hset user name zcc
    (integer) 1
    127.0.0.1:6379> hset user age 38
    (integer) 1
    127.0.0.1:6379> hset user weight 50
    (integer) 1
   
# 获取数据
hget key field
    127.0.0.1:6379> hget user name
    "zcc"
    
hgetall key
 	127.0.0.1:6379> hgetall user
    1) "name"
    2) "zcc"
    3) "age"
    4) "38"
    5) "weight"
    6) "50"

# 删除数据
hdel key fieldl [filed2]

    127.0.0.1:6379> hdel user name
    (integer) 1
    127.0.0.1:6379> hgetall user
    1) "age"
    2) "38"
    3) "weight"
    4) "50"

多条

# 添加/修改多个数据
hmset key field1 value1 field2 value2
    127.0.0.1:6379> hmset user name zhang age 18
    OK
    127.0.0.1:6379> hgetall user
    1) "age"
    2) "18"
    3) "weight"
    4) "50"
    5) "name"
    6) "zhang"
    
# 获取多个数据
hmget key field1 field2

# 获取hash表中字段的数量
hlen key

# 获取hash表种是否存在指定的字段
hexists key field 


hash 类型数据扩展操作

  • 获取hash表种所有的字段名或字段值

    hkeys key
    hvals key
    
    
  • 设置指定字段的数值数据增加指定范围的值

    hincrby key field increment
    hincrbyfloat key field increment
    

操作注意事项

  • hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象,如果数据未获取到对应的值为nil
  • 每个hash可以存储2^23 - 1 个键值对
  • hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性,但hash设计初衷不是为了存储大量对象而设计的,但是不可以滥用,更不可以将对象作列表使用
  • hgetall可以获取全部的数据,如果内部的字段较多的话,遍历整体
posted @ 2020-07-19 23:55  小子,你摊上事了  阅读(52)  评论(0编辑  收藏  举报