Redis基础_2-②五种基本数据类型之hash

原先的存储在这里插入图片描述
将左边的主键合一,右边属性对应他们的值
在这里插入图片描述
新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息
需要的存储结构:一个存储空间保存多个键值对数据
hash类型:底层使用哈希表结构实现数据存储
在这里插入图片描述
hash存储结构优化

如果field数量较少,存储结构优化为类数组结构
如果field数量较多,存储结构使用HashMap结构

hash类型数据的基本操作

添加/修改数据

hset key field value

获取数据

hget key field
hgetall key

删除数据

hdel key field1 [field2]

在这里插入图片描述
添加/修改多个数据

hmset key field1 value1 field2 value2 ...

获取多个数据

hmget key field1 field2 

获取哈希表中的字段数量

hlen key

获取哈希表中是否存在指定的字段

hexists key field

在这里插入图片描述

hash类型数据扩展操作

获取哈希表中所有的字段名或字段值(字段值可重复)

hkeys key
hvals key

设置指定字段的数值数据增加指定范围的值

hincrby key field increment
hincrbyfloat key  field increment

在这里插入图片描述
在这里插入图片描述

hash类型数据操作的注意事项

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

hash类型应用场景1

业务场景
电商网站购物车设计与实现
在这里插入图片描述
在这里插入图片描述
解决方案:
以客户id作为key,每位客户创建一个hash存储结构存储对应的购物车信息
将商品编号作为field,购买数量作为value进行存储
添加商品:追加全新的field与value
浏览:遍历hash
更改数量:自增/自减,设置value值
删除商品:删除field
清空:删除key
在这里插入图片描述
在这里插入图片描述
使用此方案,当前设计是否加速了购物车的呈现:
当前仅仅是将数据存储到了redis中,并没有起到加速的作用,商品信息还需要二次查询数据库

每条购物车中的商品记录保存成两条field
field1专用于保存购买数量
	命名格式:商品id:nums
	保存数据:数值
field2专用于保存购物车中显示的信息,包含文字描述,图片地址,所属商家信息等
	命名格式:商品id:info
	保存数据:json

在这里插入图片描述
将field独立成一个hash
在这里插入图片描述
购物车此时又只保存数据,而当每个用户购买时,都加载一次商品的信息,后买的用户都要将信息加载一次,就会很麻烦
hsetnx key field value:

如果当前的key中对应的field有值,就什么都不做
如果没值,就将信息加进去

在这里插入图片描述
Tips4:

redis应用于购物车数据存储设计

hash类型应用场景2

业务场景

在这里插入图片描述
在这里插入图片描述
Tips5:

redis应用于抢购类,限购类,限量发放优惠卷、激活码等业务的数据存储设计

string存储对象(json)与hash存储对象:

string讲究整体性,一次性数据整体操作,一次性跟新/获取。读为主。 
hash可以分开,可以用field将属性隔离开。更新操作更为灵活。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值