# Redis 入门到精通(一)数据类型(2)

Redis 入门到精通(一)数据类型(2)

一、redis 数据类型–hash 类型介绍与基本操作

1、hash 类型

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

5-hash存储空间.png

2、hash 存储结构优化

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

3、hash 类型数据的基本操作

# 1)添加/修改数据
hset key field value

# 获取数据
hget key field
hgetall key

# 删除数据
hdel key fieldl [field2]

# 范例:
127.0.0.1:6379> hset zsf name zhangsanfeng
(integer) 1
127.0.0.1:6379> hset zsf age 101
(integer) 1
127.0.0.1:6379> hset zsf weight 80
(integer) 1

127.0.0.1:6379> hget zsf age
"101"
127.0.0.1:6379> hgetall zsf
1) "name"
2) "zhangsanfeng"
3) "age"
4) "101"
5) "weight"
6) "80"
127.0.0.1:6379>


# 2)添加/修改多个数据
hmset key fieldl valuel field2 value2

# 获取多个数据
hmget key fieldl field2...

# 获取哈希表中字段的数量
hlen key

# 获取哈希表中是否存在指定的字段
hexists key field

# 范例:
127.0.0.1:6379> hmget zsf name age
1) "zhangsanfeng"
2) "101"
127.0.0.1:6379> hmset zsf name lixiaolong age 38
OK
127.0.0.1:6379> hgetall zsf
1) "name"
2) "lixiaolong"
3) "age"
4) "38"
5) "weight"
6) "80"
127.0.0.1:6379>

127.0.0.1:6379> hlen zsf
(integer) 3
127.0.0.1:6379> hexists zsf age
(integer) 1
127.0.0.1:6379> hexists zsf hight
(integer) 0
127.0.0.1:6379>

二、redis 数据类型–hash 扩展操作与使用注意事项

1、hash 类型数据扩展操作

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

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

# 范例: 
127.0.0.1:6379> hkeys zsf
1) "name"
2) "age"
3) "weight"

127.0.0.1:6379> hvals zsf
1) "lixiaolong"
2) "38"
3) "80"

127.0.0.1:6379> hset zsf weight 38
(integer) 0

127.0.0.1:6379> hvals zsf
1) "lixiaolong"
2) "38"
3) "38"

127.0.0.1:6379> hincrby zsf age 2
(integer) 40
127.0.0.1:6379>

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

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

三、redis 数据类型–hash 实现购物车

1、hash 类型应用场景:业务场景–电商网站购物车设计与实现

1)业务分析

  • 仅分析购物车的 redis 存储模型添加、浏览、更改数量、删除、清空。
  • 购物车于数据库间持久化同步(不讨论)。
  • 购物车于订单间关系(不讨论 )。
    提交购物车:读取数据生成订单。
    商家临时价格调整:隶属于订单级别。
  • 未登录用户购物车信息存储(不讨论)。
    cookie 存储。

6-redis电商网站购物车设计与实现.png

2)解决方案

  • 以客户 id 作为 key,每位客户创建一个 hash 存储结构存储对应的购物车信息。
  • 将商品编号作为 field,购买数量作为 value 进行存储。
  • 添加商品:追加全新的 field 与 value。
  • 浏览:遍历 hash。
  • 更改数量:自增/自减,设置 value 值。
  • 删除商品:删除 field。
  • 清空:删除 key。
  • 此处仅讨论购物车中的模型设计。
  • 购物车与数据库间持久化同步、购物车与订单间关系、未登录用户购物车信息存储不进行讨论。

2、redis 实际模拟操作:

# 如:用户01,购买商品g01, 100个,购买商品g02,200个
127.0.0.1:637
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

段子手-168

你的鼓励将是我你的创作最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值