最近在改系统bug的时候遇到了一个多人操作的问题,当一个系统有多个人在使用的时候,难免会存在几个人在某个相同的时间段,去修改同一条业务数据。例如:A和B同时去修改一个 value=1的值,他们在修改的时候,业务上都是基于value=1的时候去处理的,当value不等于1时,A和B所做出修改的值也发生相应的变化。那么这样就会导致一个问题,如果接口里面没有去判断value的是否已经被修改过了,那么当A把value修改为2,这时候B再去修改value的时候,还是以value=1的业务方式去处理,这样会导致用户产生脏数据或者是业务上的bug。所以解决这个问题的思路其实和CAS(Compare and swap)等价替换一样,可以设立一个版本号,版本号可以是时间或者是其他的类型,在查询数据的时候将这个版本号返回给前端,然后在修改保存的时候,后端逻辑再去判断这个版本号是否已经被修改过了,如果和前端传过来的值是一致的,那说明数据被没有修改过,如果不一样说明数据被修改过,报错提示给前端,提示用户刷新页面,重新加载数据,其实目的是加载最新的版本号。当然这种方式也不是万能的,适合用于系统用户在页面操作,并发量不高的前提下执行。