java怎么处理一条数据别人在用其人人不能操作?---在线等!
问题如题,一定要最简单的处理方法,不要去数据库查询的方法?
------解决方案--------------------说明白点;
------解决方案--------------------比如是编辑的时候吧:
一个人读出数据的时候,把该数据delete,把数据缓存到内存里供单独的用户处理。用户处理完后写入数据库,当然要解决如果用户终止的操作。如果用户取消或者关闭浏览器的情况等等。
好么你就选择到了数据的时候,通过数据库的行锁,把这条数据锁起来。这样可能更好一些。
------解决方案--------------------数据锁?
------解决方案--------------------乐观锁
------解决方案--------------------乐观锁或者悲观锁
------解决方案--------------------原来只是这个。
如果这样的话,给数据一个类似于表示数据版本号的字段,每次更新的时候带上版本号去,更新后版本号++,这样可以避免同时修改了
------解决方案--------------------LZ是要在什么层面上来锁?
select ... for update 这样可以锁检索出来的记录,直到update结束才释放索,这是数据库端的锁,当然,也可以用某个公共表作为锁
如果在应用程序端锁,可以采用synchronized的方式
------解决方案--------------------最简单的方法应该还是乐观锁。虽然不一定是最优雅的,但一定是简单可行的。
不动数据库,在内存中做标志的方法,都有一些纰漏,为了堵住纰漏,就更复杂了
------解决方案--------------------貌似问题已经解决了,打酱油路过
------解决方案--------------------乐观锁是比较适合的,重要的记录给个字段标志为版本号,两个人拿到的数据同一个版本号的话,谁先提交谁就加一下版本号,另个人提交的时候检查版本号还是不是读出来时候的版本号,是的话提交,不是的话报错拿新数据重新修改提交。
------解决方案--------------------select *, version from table t
提交的时候
update table set ... where id=:id and version=:version
------解决方案--------------------一般加锁来实现咯,
够牛叉的话就乐观+悲观一起用。。
------解决方案--------------------这个可以在数据库层面,加乐观锁或者悲观锁。
直接在底层就给lock住了。