一、hash 类型
1.新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息
2.需要的存储结构:一个存储空间保存多个键值对数据
3.hash类型:底层使用哈希表结构实现数据存储
注:hash存储结构优化 : a.如果field数量较少,存储结构优化为类数组结构
b.如果field数量较多,存储结构使用HashMap结构
hash的存储空间在field和value包含的区域
二、hash类型数据的基本操作
1.添加/修改数据:
hset key field value
2.获取数据
a. hget key field
b. hgetall key
3.删除数据
hdel key field1 [field2]
4.添加/修改多个数据
hmset key field1 value1 field2 value2 …
5.获取多个数据
hmget key field1 field2 …
6.获取哈希表中字段的数量
hlen key
7.获取哈希表中是否存在指定的字段
hexists key field
三、hash 类型数据扩展操作
1.获取哈希表中所有的字段名或字段值
hkeys key
hvals key
2.设置指定字段的数值数据增加指定范围的值
a. hincrby key field increment
b. hincrbyfloat key field increment
四、hash 类型数据操作的注意事项
1.hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到, 对应的值为(nil)
2.每个 hash 可以存储 2^32 - 1 个键值对
3.hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存 储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用
4.hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问瓶颈
五、hash类型数据应用
模拟电商购物车数据实现:
将用户的id作为key,商品的id作为field,商品的数量为value(简易实现,不考虑过多外在因素)
商品数量设值:hset
增加:hincrby
取值:hget
全选:hgetall
总量:hlen
删除:hdel
实现用户001和用户002的购物车(a,b,c为商品)存储:
加速操作:
hsetnx key field value 如果filed存在则不操作,反之进行添加操作
六、string存储对象(json)与hash存储对象
1.如果对于数据缓存的读取更多,更新操作不频繁的情况下(或者每次更新都更新json数据中的大多数key),选择string类型存储。
2.如果对于数据缓存的更新更多,只想更新json数据中的少数的键值信息,则选择hash类型存储。