目录

​一.hash数据类型​

​二.hash类型数据的基本操作​

​三.hash类型的电商网站购物车应用场景​

​         1.业务场景​

​         2.业务分析:​

​3.存在问题​

​         4. hsetnx key field value​

​ 四.hash实现抢购的业务场景​

​        1.业务场景​

​        2.模型设计​


 

一.hash数据类型

     1.存储的困惑

                      对象类数据的存储如果具有较频繁的更新需求,如果用String类型操作会比较笨重

                      相比于存储json字符串hash表更容易更改

 

                    

redis 学习笔记(三) hash数据类型_数据

                   

redis 学习笔记(三) hash数据类型_字段_02

 

     2.hash类型

                      新的储存需求:对一系列储存数据进行编组,方便管理 典型的应用是:存储对象信息

                      需要的存储结构:一个存储空间保存多个键值对数据

                      redis存储空间     

                     

redis 学习笔记(三) hash数据类型_数据_03

        

     3.hash 存储结构的优化

较少,存储结构优化为数组结构

较多,存储结构优化使用hashmap结构

   二.hash类型数据的相关操作

            (一)hash类型数据的基础操作

             1.添加/修改数据

   hset key  field  value

                 

redis 学习笔记(三) hash数据类型_数据_04

             2.获取数据

                 hget key field 

                 

redis 学习笔记(三) hash数据类型_字段_05

 

                 hgetall key

                 

redis 学习笔记(三) hash数据类型_数据_06

redis 学习笔记(三) hash数据类型_redis_07

           3.删除数据

                 hdel key field1 [field2]

                

redis 学习笔记(三) hash数据类型_字段_08

           4.批量增加/修改数据

                hmset key field1 value1  field2 value2

                 

redis 学习笔记(三) hash数据类型_redis_09

redis 学习笔记(三) hash数据类型_字段_10

          5.获取多个数据

                 hmget  key field1 field2

                 

redis 学习笔记(三) hash数据类型_redis_11

           

           6.获取哈希表中的字段数量

                   hlen  key

                   

redis 学习笔记(三) hash数据类型_redis_12

            (二)hash类型数据扩展操作

              1.获取哈希表种所有的字段名或者字段值

                    hkeys key

                    

redis 学习笔记(三) hash数据类型_字段_13

                     hvals  key

                    

redis 学习笔记(三) hash数据类型_字段_14

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

                          hincrby      key    field  increment

                   

redis 学习笔记(三) hash数据类型_redis_15

                          hincrbyfloat  key  field  increment

                   

redis 学习笔记(三) hash数据类型_redis_16

                            指定字段数值增加或减少

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

value只能存储字符串,不能存储其他数据类型,不存在嵌套类型,如果数据未获取到,对应的值为nil

只是存储字符串,不要想着能够嵌套再放进去一个哈希表进去

                                    (2)数据未取到对应值为nil

2^32  -1个键值对

贴近对象的数据类型,并且可以灵活的添加删除对象的属性,但hash设计的初衷不是为了储存大量对象

                          切不可滥用,更不可将hash作为对象列表使用

hgetall操作可以获得全部 属性,如果内部field过多,遍历整体效率过低,可能成为数据瓶颈

 

三.hash类型的电商网站购物车应用场景

          1.业务场景

                  电商网站购物车的设计与实现

                 

redis 学习笔记(三) hash数据类型_数据_17

                  取值:hget

                  增加:hincrby

                  添加:hset

                  全选:hget

                  删除:hdel

                  总量:hlen

         2.业务分析:

               1.仅分析购物车的redis存储模型

                             添加,浏览,更改,删除,清空

                解决方案:

                          1.以客户id作为key,每位客户创建一个hash存储结构存储对应的购物车信息

                          2.将商品编号作为field,购买数量作为value进行存储

                          3.添加商品:追加新的field和value

                          4.浏览:遍历hash

                          5.更改数量:自增自减设置value值

                          6.删除商品:删除field

                          7.情况:删除key

         3.存在问题:

                  当前仅仅是将数据存储到了redis中,并没有起到加速作用,商品信息还需要再一次查询数据库

                    1.每条购物车中的商品记录保存成两条field

                    2.field 1专门用于保存购买数量 命名格式:商品id:nums 

                    3.field 2 专用于保存购物车中显示的信息,包含文字描述,图片地址,所属商家的信息

                          命名格式: 商品id :info

                          保存数据 json

                  根据商品id 在redis中建立关联关系

 

         4. hsetnx key field value

哈希表中不存在的的字段赋值

               如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。

               如果字段已经存在于哈希表中,操作无效。

                如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令

                

redis 学习笔记(三) hash数据类型_字段_18

             

              

 四.hash实现抢购的业务场景

        1.业务场景

            双十一活动,销售手机充值卡的商家,对移动联通,电信的30元,50元,100元商品推出抢购活动,每种商品抢购上线1000张

        2.模型设计

            

redis 学习笔记(三) hash数据类型_字段_19

        1.以商家id为key

        2.将参与抢购的商品id作为field

        3.将参与抢购的商品数量作为对应的value

        4.抢购时通过降值的方式控制产品数量

        实际业务中还存在超卖等问题,这里不做特别讨论

       原则上 :redis 只是作为数据存储,不要将redis 加入业务逻辑层会导致不合理

       比如判断key是否存在

        

tips 5 :

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

String存储对象

hash存储对象

json格式

key value形式

讲究整体性一读取为主,修改需要全部取出

隔离性好,更新操作比较好

             面对hash模型.将一系列数据包装成一个群组,对外通过一个key

             hash 中也可以存储json格式,可以做成表的概念,主要考虑业务模式