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可以获取全部的数据,如果内部的字段较多的话,遍历整体