一、简介
- 新的存储需求,对一系列存储的数据进行编组 ,方便应用存储对象的信息
- 需要的存储结构,一个存储空间保存多个键值对数据
- hash类型:底层使用hash表结构实现数据存储
二、基本操作
- 单个数据操作
- 添加、修改数据
hset key field value
- 获取数据
hget key field
hgetall key
- 删除数据
hdel key field ....
- 多个数据操作
- 添加、修改多个数据
hmget key field1 value1 field2 value2 .....
- 获取多个数据
hmget key field1 fiedl1
- 获取哈希表中字段的位置
hlen key
- 获取哈希表中是否存在指定的字段
hexists key field
三、扩展操作
- 获取哈希表中所有字段名或字段值
hkeys key
hvals key
- 设置指定字段的数值数据增加指定范围的值
hincrby key field increment
hincrbyfloat key field increment
四、注意事项:
- hash类型下的value值只能存储字符串,不允许存储其他类型的数据,不存在嵌套的现象,如果数据未获取到对应的值为nil
- 每个hash可以存储 2^32-1个键值对
- hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性,但hash设计初衷不是为了存储大量对象而设计的,不可乱用,更不可将hash作为对象列表使用
- hgetall操作可以获取全部属性,如果内部field过多,遍历整体数据效率就会很低,有可能成为数据访问瓶颈
五、应用场景
- 业务场景 :电商网站的购物车实现
- 业务分析:
- 存储模型:增加,更改,修改,清空
- 购物车的临时变动: 商家数据的修改更新,用户提交数据
- 未登录用户的存储机制
方案一:
案例解决方案:
弊端:仅仅将数据存储到redis缓存中去,并没有起到加速的功能
方案二:使用json的存储方式
- 将每条购物车商品记录均保持成两条field
- field1 : 保持购买数量
- 商品id:数量(nums)
- field2:保持购物车显示的信息(文件描述等相关的信息)
- 商品id:描述信息(msg)
判断json数据的重复性
hsetnx key field value
- 业务场景:订单功能实现(Redis应用于抢购,限购列限量发放优惠劵,激活码等业务的数据存储设计)
- 以商家id作为key
- 将参与抢购的商品id作为field
- 将参与抢购的商品数量作为对应的value
- 抢购时使用降值的方式控制产品数量