• 请不要在回答技术问题时复制粘贴 AI 生成的内容
TypeErrorNone
V2EX  ›  程序员

大家看看这段抽奖代码有没有安全隐患

  •  
  •   TypeErrorNone · Nov 19, 2019 · 3828 views
    This topic created in 2379 days ago, the information mentioned may be changed or developed.

    自增的方式是 redis 的 incr 方法。 服务是集群,redis 是单机。

    image

    15 replies    2019-11-19 18:27:11 +08:00
    qq316107934
        1
    qq316107934  
       Nov 19, 2019
    第一次获取当前兑奖次数是不是多余了
    bk201
        2
    bk201  
       Nov 19, 2019
    这是什么语言的语法
    712e1959
        3
    712e1959  
       Nov 19, 2019 via Android
    @bk201 #2 go
    TypeErrorNone
        4
    TypeErrorNone  
    OP
       Nov 19, 2019
    @qq316107934 是多余,只为求个心安
    GeminiPro
        5
    GeminiPro  
       Nov 19, 2019
    没啥问题啊
    mengzhuo
        6
    mengzhuo  
       Nov 19, 2019
    大哥,这压根不是抽奖吧,只是检查库存而已?
    scukmh
        7
    scukmh  
       Nov 19, 2019
    不要用 this,人家都提示了、
    mamahaha
        8
    mamahaha  
       Nov 19, 2019
    这个:=只有 go 语言在用吧?
    Yooloo
        9
    Yooloo  
       Nov 19, 2019   ❤️ 1
    @mamahaha python 也用
    Yooloo
        10
    Yooloo  
       Nov 19, 2019
    @scukmh 同, 黄线都飙出来了
    picone
        11
    picone  
       Nov 19, 2019
    你这个是实现原子+1 吧,为啥不用 atomic
    zjsxwc
        12
    zjsxwc  
       Nov 19, 2019
    @picone 楼主说了多机集群
    andyhuzhill
        13
    andyhuzhill  
       Nov 19, 2019   ❤️ 1
    @mamahaha #8 Pascal VHDL 都有用
    Vegetable
        14
    Vegetable  
       Nov 19, 2019   ❤️ 1
    这个 this 看的我浑身难受...
    整体上这个思路我觉得不太对
    你这是一个检查方法?canDosth,但是你在内部通过 incr 操作了 redis,意思库存在这就给扣掉了,所以你的检查操作不是幂等的,这样的设计有些反直觉了。

    基于 incr 设计的方法,#1 楼说的对,你第一步检查是多余的,假如实现一个幂等的检查方法,这个方法在不做事务处理时必然是不安全的,而做了事务处理的话,检查方法又失去了意义。所以去掉第一步检查,这方法改为扣库存,通过扣库存是否成功来判断是否执行下一步就行了。

    so,方法名改一下,去掉第一个检查库存,如果有必要为后边的判断不通过的情况加上回滚
    trustbutverify
        15
    trustbutverify  
       Nov 19, 2019 via Android   ❤️ 1
    @mamahaha py3.8 开始用
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1174 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 17:46 · PVG 01:46 · LAX 10:46 · JFK 13:46
    ♥ Do have faith in what you're doing.