高并发状态下修改数据库的操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高并发状态下修改数据库的操作相关的知识,希望对你有一定的参考价值。
在高并发状态下,尤其数据在频繁修改的状态下,很可能出现脏数据,也有可能造成脏读,不可重复读等问题,那么怎么解决这种问题呢,其实解决方式有很多中,我们探讨出来的结果是,在频繁修改的表里面添加一个时间戳或者随机数的字段,例如,timestamp。
原理是当每一次修改数据的时候都要把之前的时间戳修改成当前的时间戳,并且之前的时间戳要作为where条件,如果之前的时间戳和参数里面的时间戳不一致,则修改失败,在重新查询进行反复操作,上代码:
try { if (count>5) { return ""; } Serialize serialize = serializeManager.queryByType(serviceType); if (serialize!=null) { Serialize serializeUpdate = new Serialize(); serializeUpdate.setId(serialize.getId()); serializeUpdate.setRandomCode(serialize.getRandomCode()); serializeUpdate.setRandomCodeNew(UUID.randomUUID().toString()); serializeUpdate.setSerializeStart(serialize.getSerializeStart()+1); boolean flag = serializeManager.updateByRandom(serializeUpdate); if (flag) { return serialize.getSerializeCode()+(serialize.getSerializeStart()+1); }else { count++; return getCode(serviceType,count); } }else { return ""; } } catch (Exception e) { e.printStackTrace(); return ""; }
流程:1.首先查询出来当前信息,
2.根据之前的随机码并作为修改时候的条件
3.修改新生成的随机码,如果修改失败,则递归调用一次本方法。直到成功。
本文出自 “精忠报国” 博客,请务必保留此出处http://xinsir.blog.51cto.com/5038915/1864866
以上是关于高并发状态下修改数据库的操作的主要内容,如果未能解决你的问题,请参考以下文章
Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题