hash类型
新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对像信息
需要的存储结构:一个存储空间保存多个键值对数据
hash 类型数据的基本操作
添加/修改数据
hset key field value
获取数据
hget key field
hgetall key
删除数据
hdel key field1 [field2]
127.0.0.1:6379> hset user name zhangsan
(integer) 1
127.0.0.1:6379> hset user age 18
(integer) 1
127.0.0.1:6379> hset user weight 80
(integer) 1
127.0.0.1:6379> hgetall user
1) "name"
2) "zhangsan"
3) "age"
4) "18"
5) "weight"
6) "80"
127.0.0.1:6379> hget user name
"zhangsan"
127.0.0.1:6379> hdel user weight
(integer) 1
127.0.0.1:6379> hgetall user
1) "name"
2) "zhangsan"
3) "age"
4) "18"
127.0.0.1:6379> hmget user name age
1) "zhangsan"
2) "18"
127.0.0.1:6379> hmset user name zhangsanfeng weight 68
OK
127.0.0.1:6379> hgetall user
1) "name"
2) "zhangsanfeng"
3) "age"
4) "18"
5) "weight"
6) "68"
127.0.0.1:6379> hlen user
(integer) 3
127.0.0.1:6379> hexists user age
(integer) 1
127.0.0.1:6379>
hash 类型数据扩展操作
获取哈希表中所有的字段名或字段值
hkeys key
hvals key
127.0.0.1:6379> hgetall user
1) "name"
2) "zhangsanfeng"
3) "age"
4) "18"
5) "weight"
6) "68"
127.0.0.1:6379> hkeys user
1) "name"
2) "age"
3) "weight"
127.0.0.1:6379> hvals user
1) "zhangsanfeng"
2) "18"
3) "68"
127.0.0.1:6379> hset user2 name zs
(integer) 1
127.0.0.1:6379> hkeys user2
1) "name"
设置指定字段的数值数据增加指定范围的值
hincrby key field increment
hincrbyfloat key field increment
127.0.0.1:6379> hincrby user age 1
(integer) 19
127.0.0.1:6379>
hash 类型数据操作的注意事项
hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到,对应的值为(nil)
每个 hash 可以存储 232 - 1 个键值对
hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用
hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问瓶颈
尽量还是用哪个拿哪个
hash 类型应用场景
String和hash存储的对比
hash更新比较快
String以json格式存储比较全面