zoukankan      html  css  js  c++  java
  • Redis的Hash类型

     Redis hash 命令

    下表列出了 redis hash 基本的相关命令:

    序号命令及描述
    1 HDEL key field1 [field2] 
    删除一个或多个哈希表字段
    2 HEXISTS key field 
    查看哈希表 key 中,指定的字段是否存在。
    3 HGET key field 
    获取存储在哈希表中指定字段的值。
    4 HGETALL key 
    获取在哈希表中指定 key 的所有字段和值
    5 HINCRBY key field increment 
    为哈希表 key 中的指定字段的整数值加上增量 increment 。
    6 HINCRBYFLOAT key field increment 
    为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
    7 HKEYS key 
    获取所有哈希表中的字段
    8 HLEN key 
    获取哈希表中字段的数量
    9 HMGET key field1 [field2] 
    获取所有给定字段的值
    10 HMSET key field1 value1 [field2 value2 ] 
    同时将多个 field-value (域-值)对设置到哈希表 key 中。
    11 HSET key field value 
    将哈希表 key 中的字段 field 的值设为 value 。
    12 HSETNX key field value 
    只有在字段 field 不存在时,设置哈希表字段的值。
    13 HVALS key 
    获取哈希表中所有值
    14 HSCAN key cursor [MATCH pattern] [COUNT count] 
    迭代哈希表中的键值对。

     示例如下:

    127.0.0.1:6379> HSET user name zhangsan
    (integer) 1
    127.0.0.1:6379> HGETALL user
    1) "name"
    2) "zhangsan"
    127.0.0.1:6379> hest user age 38
    (error) ERR unknown command `hest`, with args beginning with: `user`, `age`, `38`,
    127.0.0.1:6379> hset user age 38
    (integer) 1
    127.0.0.1:6379> HGETALL user
    1) "name"
    2) "zhangsan"
    3) "age"
    4) "38"
    127.0.0.1:6379> HGET user name
    "zhangsan"
    127.0.0.1:6379> hmget name age
    1) (nil)
    127.0.0.1:6379> hmget user name age
    1) "zhangsan"
    2) "38"
    127.0.0.1:6379> HLEN user
    (integer) 2
    127.0.0.1:6379> HEXISTS user name
    (integer) 1
    127.0.0.1:6379> HKEYS user
    1) "name"
    2) "age"
    127.0.0.1:6379> HVALS user
    1) "zhangsan"
    2) "38"
    127.0.0.1:6379> HINCRBY user age 2
    (integer) 40
    127.0.0.1:6379> HVALS user
    1) "zhangsan"
    2) "40"
    127.0.0.1:6379>

     hash 类型应用场景 :

     简单演示:

    127.0.0.1:6379> hset u1 g01 100 g02 200
    (integer) 2
    127.0.0.1:6379> HGETALL u1
    1) "g01"
    2) "100"
    3) "g02"
    4) "200"
    127.0.0.1:6379> HMSET u2 g01 100 g02 100
    OK
    127.0.0.1:6379> HGETALL u2
    1) "g01"
    2) "100"
    3) "g02"
    4) "100"
    127.0.0.1:6379> hset u1 g03 5
    (integer) 1
    127.0.0.1:6379> HGETALL u1
    1) "g01"
    2) "100"
    3) "g02"
    4) "200"
    5) "g03"
    6) "5"
    127.0.0.1:6379> hdel u1 g01
    (integer) 1
    127.0.0.1:6379> HGETALL u1
    1) "g02"
    2) "200"
    3) "g03"
    4) "5"
    127.0.0.1:6379> HINCRBY g02 100
    (error) ERR wrong number of arguments for 'hincrby' command
    127.0.0.1:6379> HINCRBY u1 g02 100
    (integer) 300
    127.0.0.1:6379> HGETALL u1
    1) "g02"
    2) "300"
    3) "g03"
    4) "5"
    127.0.0.1:6379> HMSET u3 g01:nums 100 g01:info {.....}
    OK
    127.0.0.1:6379> HGETALL u3
    1) "g01:nums"
    2) "100"
    3) "g01:info"
    4) "{.....}"
    127.0.0.1:6379> HMSET u3 g02:nums 200 g02:info {.....}
    OK
    127.0.0.1:6379> HGETALL u3
    1) "g01:nums"
    2) "100"
    3) "g01:info"
    4) "{.....}"
    5) "g02:nums"
    6) "200"
    7) "g02:info"
    8) "{.....}"
    127.0.0.1:6379>

    解决方案
    以客户id作为key,每位客户创建一个hash存储结构存储对应的购物车信息
    将商品编号作为field,购买数量作为value进行存储
    添加商品:追加全新的field与value
    浏览:遍历hash
    更改数量:自增/自减,设置value值
    删除商品:删除field
    清空:删除key

    当购物车保存商家信息的时候,可以把商家信息保存成一个Hash,把标记存到购物车的Hash种就可以了

    业务场景
    双11活动日,销售手机充值卡的商家对移动、联通、电信的30元、 50元、 100元商品推出抢购活动,每种商
    品抢购上限1000张

    127.0.0.1:6379> hmset p01 c30 1000 c50  1000
    OK
    127.0.0.1:6379> HINCRBY p01 c30 -20
    (integer) 980
    127.0.0.1:6379> HGETALL p01
    1) "c30"
    2) "980"
    3) "c50"
    4) "1000"
    127.0.0.1:6379>

    解决方案
    以商家id作为key
    将参与抢购的商品id作为field
    将参与抢购的商品数量作为对应的value
    抢购时使用降值的方式控制产品数量

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

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

  • 相关阅读:
    斗鱼扩展--localStorage备份与导出(九)
    斗鱼扩展--管理移除房间(八)
    斗鱼扩展--让你看到更多内容(七)
    Ubuntu18.04 安装水星1300M无线网卡
    Course1_Week1_ProgrammingHomeWork
    找出3个数中不为-1的最小数
    马拉车算法
    偏差-方差分解
    决策树如何防止过拟合
    可视化数据集两个类别变量的关系
  • 原文地址:https://www.cnblogs.com/dalianpai/p/12482849.html
Copyright © 2011-2022 走看看