1
BOYPT 2014-02-14 16:55:21 +08:00
显然不是安全的,应该get查询的时候就判断了数值。
|
3
BOYPT 2014-02-14 17:05:20 +08:00 1
@brickgao 当然有问题啊,.get()完了之后数值就在程序内存了,无法保证数据库里面的total还是你查到那个。
这种情况要么你把这个逻辑做到sql的查询里面,要么改下你的算法,用个原子内存数值来做判断。 |
5
loading 2014-02-14 17:23:43 +08:00 via iPhone
sql里写 sum(xx)+1 不就好了,
你还浪费一次查询… |
6
hepochen 2014-02-14 17:29:20 +08:00
除非你自己处理全局锁(跨各个进程、线程)的,不然就不应该把原子操作放在程序中处理;这个太复杂了。
放在数据库中操作,让它们自己处理吧。 |
7
dorentus 2014-02-14 17:30:30 +08:00
话说,不知道你的实际需求是什么
其实很多时候,去掉 if total < 100 这个判断,每次都累加 然后再你需要用到 total 的时候,再做这个判断,比如 display (total if total < 100 else total)这样貌似也是可行的吧…… |
8
brickgao OP |
9
yaroot 2014-02-14 22:33:15 +08:00
|
11
pubby 2014-02-15 23:23:54 +08:00 via Android
如果业务更复杂点的原子操作,可以用mysql的GET_LOCK() RELEASE_LOCK()简单实现上锁,只要保证大家都连同一台mysql服务器就可以跨机器“集群锁”了
|