zoukankan      html  css  js  c++  java
  • redis-hash类型

    一:hash类型的使用事项

     hset  user(key) name (field)zhang(value)

    hget user name

    hgetall user 获取所有field和value

    hkeys user  获取所有field

    hvals user 获取所有的value

    hincrby user age 10 给指定字段增加指定值

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

    hdel user name 删除field

    hexists user name 判断field是否存在

    二:hash类型的使用场景

    (1)购物车模型

     hmset 5f618dda4b33be7671c04294 1001 5 5f618dda4b33be7671c04294 1002 3

    问题:此时用户id可以从session里面取,商品id怎么取值呢,因此还是要去查询一次数据库,获取商品的id,图片等其他信息,无疑多了一次查库操作,因此我们的存储形式需要进行改变。

    重点:一个用户id里面可以存储,

    商品id:nums value

    商品id:info json字符串(存储更多的信息)

    hash 用value存储json字符串

    hash 的 field 通过 物体的统一标识符 :物体的属性组合,可以多个field来表示一个物体的所有信息

    那么问题又来了,给id为wang的用户也增加一个001商品的信息,结果如下,001:info冗余,1000个购物车都收藏了这个商品,那么冗余1000个信息

    问题:每一次用户进去根据用户的id和商品id取一次商品的info,进行展示,效率太低。因此这个信息可以单独提出来,单独保存。001:info ,保存为一个独立的hash

    set 001 uri xxx.jpg product_arda xxxxxx

    需要显示商品详情的信息从公共的hash取值即可。

    此时zhang用户要给购物车此商品数量变成200个,hset zhang 001:nums 200 即可

    hsetnx zhang 001:nums 400 如果zhang里面有001:nums字段的话,不做任何操作,没有的话就设置,也就是同id的商品,在购物车里面添加就不做任何操作,不在购物车里面就可以添加。

    (2)抢购

     card为商家id card03为商品id 1000为商品数量

    抢购到card30,就减1,Incrby -1,到数量为0的时候,进行判断,返回商品售罄,真正业务中是要用事务的。

  • 相关阅读:
    编译Android系统源码和内核源码
    Ubuntu中的解压缩文件的方式
    将秒数转换为基于00:00的时间
    git sshkeygen Fingerprint cannot be generated解决方法
    git bash下的选择、复制、粘贴
    mac 配置jdk maven
    自定义标签
    垃圾收集器和收集算法
    多线程并发中的同步
    现在有T1、T2、T3三个线程,怎样保证T2在T1执行完后执行,T3在T2执行完后执行?使用Join
  • 原文地址:https://www.cnblogs.com/meloncodezhang/p/13682112.html
Copyright © 2011-2022 走看看