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

2019-11-19 10:54:02 +08:00
 TypeErrorNone

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

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

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

so,方法名改一下,去掉第一个检查库存,如果有必要为后边的判断不通过的情况加上回滚
trustbutverify
2019-11-19 18:27:11 +08:00
@mamahaha py3.8 开始用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/620942

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX