精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2016-05-11
流程:有个发券的业务,券是提前导入到数据库 码库表 里面,每当有请求过来时,就取出一条数据 放到 发券记录表,然后改变券的状态。
背景:springmvc,mysql 硬件暂时没条件提升 代码:取券时加了 synchronized ,但是还是锁不住 public List<Integer> codeGetFromLibrary(String catId,int num){ //get code and update status synchronized(CodeSendService.class){ List<Integer> list = codeLibraryDao.getCodeId(catId,num); Date date = new Date(); for (int i = 0; i < list.size(); i++) { codeLibraryDao.updateStatusById("4",list.get(i),date); } return list; } 问题:当并发到一定程度时,就会出现两个请求取到同一个券数据,造成插入失败。 怎么样提高成功率和并发数? |
|
返回顶楼 | |
发表时间:2016-05-11
感受微风 写道 流程:有个发券的业务,券是提前导入到数据库 码库表 里面,每当有请求过来时,就取出一条数据 放到 发券记录表,然后改变券的状态。
背景:springmvc,mysql 硬件暂时没条件提升 代码:取券时加了 synchronized ,但是还是锁不住 public List<Integer> codeGetFromLibrary(String catId,int num){ //get code and update status synchronized(CodeSendService.class){ List<Integer> list = codeLibraryDao.getCodeId(catId,num); Date date = new Date(); for (int i = 0; i < list.size(); i++) { codeLibraryDao.updateStatusById("4",list.get(i),date); } return list; } 问题:当并发到一定程度时,就会出现两个请求取到同一个券数据,造成插入失败。 怎么样提高成功率和并发数? |
|
返回顶楼 | |
发表时间:2016-05-11
最后修改:2016-05-12
|
|
返回顶楼 | |
发表时间:2016-05-12
感受微风 写道 流程:有个发券的业务,券是提前导入到数据库 码库表 里面,每当有请求过来时,就取出一条数据 放到 发券记录表,然后改变券的状态。
背景:springmvc,mysql 硬件暂时没条件提升 代码:取券时加了 synchronized ,但是还是锁不住 public List<Integer> codeGetFromLibrary(String catId,int num){ //get code and update status synchronized(CodeSendService.class){ List<Integer> list = codeLibraryDao.getCodeId(catId,num); Date date = new Date(); for (int i = 0; i < list.size(); i++) { codeLibraryDao.updateStatusById("4",list.get(i),date); } return list; } 问题:当并发到一定程度时,就会出现两个请求取到同一个券数据,造成插入失败。 怎么样提高成功率和并发数? 你把完整的相关类都发给我,我看一下逻辑。 |
|
返回顶楼 | |
发表时间:2016-05-12
现在很多公司喜获考各种排序算法(快速排序,插入排序)。请问,这些排序算法对提升性能到底有多少,这些排序算法有没有一些实战的应用场景
|
|
返回顶楼 | |
发表时间:2016-05-12
麦克周 写道 感受微风 写道 流程:有个发券的业务,券是提前导入到数据库 码库表 里面,每当有请求过来时,就取出一条数据 放到 发券记录表,然后改变券的状态。
背景:springmvc,mysql 硬件暂时没条件提升 代码:取券时加了 synchronized ,但是还是锁不住 public List<Integer> codeGetFromLibrary(String catId,int num){ //get code and update status synchronized(CodeSendService.class){ List<Integer> list = codeLibraryDao.getCodeId(catId,num); Date date = new Date(); for (int i = 0; i < list.size(); i++) { codeLibraryDao.updateStatusById("4",list.get(i),date); } return list; } 问题:当并发到一定程度时,就会出现两个请求取到同一个券数据,造成插入失败。 怎么样提高成功率和并发数? 你把完整的相关类都发给我,我看一下逻辑。 相关类已通过站内短信发给你。 |
|
返回顶楼 | |
发表时间:2016-05-12
感受微风 写道 流程:有个发券的业务,券是提前导入到数据库 码库表 里面,每当有请求过来时,就取出一条数据 放到 发券记录表,然后改变券的状态。
背景:springmvc,mysql 硬件暂时没条件提升 代码:取券时加了 synchronized ,但是还是锁不住 public List<Integer> codeGetFromLibrary(String catId,int num){ //get code and update status synchronized(CodeSendService.class){ List<Integer> list = codeLibraryDao.getCodeId(catId,num); Date date = new Date(); for (int i = 0; i < list.size(); i++) { codeLibraryDao.updateStatusById("4",list.get(i),date); } return list; } 问题:当并发到一定程度时,就会出现两个请求取到同一个券数据,造成插入失败。 怎么样提高成功率和并发数? 你这个的场景,我是用guava的 Interners.newWeakInterner().intern(catId)做锁对象的。 你的事务边界是 codeGetFromLibrary()这个方法,还是codeLibraryDao.updateStatusById()? |
|
返回顶楼 | |
发表时间:2016-05-12
我是做web开发的,感觉现在的一些框架越来越完善,自己写的代码越来越少,想提升下自己。楼主有没有什么好的建议?比如大数据方向?
|
|
返回顶楼 | |
发表时间:2016-05-12
最后修改:2016-05-12
Saro 写道 感受微风 写道 流程:有个发券的业务,券是提前导入到数据库 码库表 里面,每当有请求过来时,就取出一条数据 放到 发券记录表,然后改变券的状态。
背景:springmvc,mysql 硬件暂时没条件提升 代码:取券时加了 synchronized ,但是还是锁不住 public List<Integer> codeGetFromLibrary(String catId,int num){ //get code and update status synchronized(CodeSendService.class){ List<Integer> list = codeLibraryDao.getCodeId(catId,num); Date date = new Date(); for (int i = 0; i < list.size(); i++) { codeLibraryDao.updateStatusById("4",list.get(i),date); } return list; } 问题:当并发到一定程度时,就会出现两个请求取到同一个券数据,造成插入失败。 怎么样提高成功率和并发数? 你这个的场景,我是用guava的 Interners.newWeakInterner().intern(catId)做锁对象的。 你的事务边界是 codeGetFromLibrary()这个方法,还是codeLibraryDao.updateStatusById()? codeGetFromLibrary()这个方法,比如num是5 先取出5个码 然后改变码的状态 取码时有状态条件 guava的 Interners.newWeakInterner().intern(catId) 这个锁对象 锁的住么 你们测试过没 |
|
返回顶楼 | |
发表时间:2016-05-12
感受微风 写道 流程:有个发券的业务,券是提前导入到数据库 码库表 里面,每当有请求过来时,就取出一条数据 放到 发券记录表,然后改变券的状态。
背景:springmvc,mysql 硬件暂时没条件提升 代码:取券时加了 synchronized ,但是还是锁不住 public List<Integer> codeGetFromLibrary(String catId,int num){ //get code and update status synchronized(CodeSendService.class){ List<Integer> list = codeLibraryDao.getCodeId(catId,num); Date date = new Date(); for (int i = 0; i < list.size(); i++) { codeLibraryDao.updateStatusById("4",list.get(i),date); } return list; } 问题:当并发到一定程度时,就会出现两个请求取到同一个券数据,造成插入失败。 怎么样提高成功率和并发数? 你这段代码如果不是集群环境下不会出现并发问题,但是加锁后却不断访问数据库,可想效率不怎么样。 |
|
返回顶楼 | |