V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
TypeErrorNone
V2EX  ›  程序员

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

  •  
  •   TypeErrorNone · 2019-11-19 10:54:02 +08:00 · 3370 次点击
    这是一个创建于 1836 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    image

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

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

    so,方法名改一下,去掉第一个检查库存,如果有必要为后边的判断不通过的情况加上回滚
    trustbutverify
        15
    trustbutverify  
       2019-11-19 18:27:11 +08:00 via Android   ❤️ 1
    @mamahaha py3.8 开始用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5159 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:42 · PVG 17:42 · LAX 01:42 · JFK 04:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.