一、简介

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

二、基本操作

  • 单个数据操作
  1. 添加、修改数据
hset key field value
  1. 获取数据
hget key field
hgetall key
  1. 删除数据
hdel key field ....

RedissonClient Hash 累加 redis hash field数量_redis

  • 多个数据操作
  1. 添加、修改多个数据
hmget key field1 value1 field2 value2 .....
  1. 获取多个数据
hmget key field1 fiedl1
  1. 获取哈希表中字段的位置
hlen key
  1. 获取哈希表中是否存在指定的字段
hexists key field

RedissonClient Hash 累加 redis hash field数量_hg_02

三、扩展操作

  • 获取哈希表中所有字段名或字段值
hkeys key 
hvals key

RedissonClient Hash 累加 redis hash field数量_数据_03

  • 设置指定字段的数值数据增加指定范围的值
hincrby key field increment
hincrbyfloat key field increment

RedissonClient Hash 累加 redis hash field数量_数据_04


RedissonClient Hash 累加 redis hash field数量_字段_05

四、注意事项:

  • hash类型下的value值只能存储字符串,不允许存储其他类型的数据,不存在嵌套的现象,如果数据未获取到对应的值为nil
  • 每个hash可以存储 2^32-1个键值对
  • hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性,但hash设计初衷不是为了存储大量对象而设计的,不可乱用,更不可将hash作为对象列表使用
  • hgetall操作可以获取全部属性,如果内部field过多,遍历整体数据效率就会很低,有可能成为数据访问瓶颈

五、应用场景

  • 业务场景 :电商网站的购物车实现

RedissonClient Hash 累加 redis hash field数量_字段_06

  • 业务分析:
  • 存储模型:增加,更改,修改,清空
  • 购物车的临时变动: 商家数据的修改更新,用户提交数据
  • 未登录用户的存储机制

方案一:

案例解决方案:








RedissonClient Hash 累加 redis hash field数量_数据_07


弊端:仅仅将数据存储到redis缓存中去,并没有起到加速的功能

方案二:使用json的存储方式

  • 将每条购物车商品记录均保持成两条field
  • field1 : 保持购买数量
  • 商品id:数量(nums)
  • field2:保持购物车显示的信息(文件描述等相关的信息)
  • 商品id:描述信息(msg)

判断json数据的重复性

hsetnx key field value

RedissonClient Hash 累加 redis hash field数量_数据_08


RedissonClient Hash 累加 redis hash field数量_数据_09

  • 业务场景:订单功能实现(Redis应用于抢购,限购列限量发放优惠劵,激活码等业务的数据存储设计)
  • 以商家id作为key
  • 将参与抢购的商品id作为field
  • 将参与抢购的商品数量作为对应的value
  • 抢购时使用降值的方式控制产品数量

RedissonClient Hash 累加 redis hash field数量_hg_10


RedissonClient Hash 累加 redis hash field数量_数据_11