多并发下数据保存的问题

原创 2015年11月21日 10:47:23

昨天在做项目时,做了一个接口,接收数据并保存到数据库中,接收到的数据也会向memchched中保存,所以数据实际是以key和value的形式来传属的,而数据库中保存这些数据的时候,也会去判断是否有相同的key和存在,如果存在了,就会修改请求次数,而不回新增数据。

但是这样会有一个问题,当多并发访问接口时,就有可能导致会同时发送过来相同的数据,但这是同时在多个线程处理这些相同的数据,就会在数据的保存上出现错误。如何解决这个错误呢?

我是用了队列的方式,将所有的请求数据放到一个队列中,然后用一个线程去执行这个队列,顺序的把队列中的数据拿出来然后处理,这样就不回出现多个线程同时处理相同的数据的情况了,这种处理方式适合的那种多并发,然后数据之间还会有相互关联的情况。

public class QueueUtil {
	private static Logger logger = Logger.getLogger(QueueUtil.class);
	// 静态成员
	private static final BlockingQueue<Blacklist> FILEQUEUE_FLOW = new ArrayBlockingQueue<Blacklist>(
			10000);// 请求保存数据信息
	
	/**
	 * 将请求保存数据放到队列中,一个一个保存
	 * @param blacklist
	 * @return
	 */
	public static boolean blacklistQueue(Blacklist blacklist) {
		boolean flag = true;
		if (!FILEQUEUE_FLOW.offer(blacklist)) {
			logger.info("[ERROR.FILEQUEUE_FLOW fail!] " + blacklist);
			flag = false;
		}
		return flag;
	}
	
	public static Blacklist pollFlow() {
		if(FILEQUEUE_FLOW.isEmpty()){
			return null;
		}
		return FILEQUEUE_FLOW.poll();
	}
}
public class BlicklistThread extends Thread {
	private static Logger logger = Logger.getLogger(BlicklistThread.class);
	private BlacklistDao dao;
	
	public BlicklistThread( BlacklistDao dao){
		this.dao = dao;
	}
	@Override
	public void run(){
		while(true){
			//读取队列
			try{		
				//循环读取队列中的值并保存
				Blacklist blacklist = QueueUtil.pollFlow();
				while(blacklist != null ){
					dao.saveOrUpdateBlacklist(blacklist);
					blacklist = QueueUtil.pollFlow();
				}
				sleep(500);
			} catch (Exception e) {
				logger.error(e);
			}	
		}
	}
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

关于listview或者recyclerview里面的edittext数据保存问题

public class InfoListAdapter extends BaseRecyclerAdapter { private Context context; private ...
  • U__F_O
  • U__F_O
  • 2017年08月05日 20:17
  • 70

数据并发问题

  • 2008年02月04日 23:41
  • 765KB
  • 下载

EAS WAF1新增单据保存时提示没有数据权限的问题分析。

EAS WAF1开发了一张对外费用付款申请单,与GUI共用同一APP,GUI保存没有问题,但WEB客户端保存提示:您没有组织:XXXX股份有限公司 的 对外费用付款申请编辑 数据权限!,去掉权限则we...
  • wiser
  • wiser
  • 2013年12月01日 17:31
  • 1756

Hibernate4 将 Entity 保存不到数据库 但可以查询数据问题解决

applicationContext.xml

Android开发-数据存储SharedPreferences工具类、Set<String>保存问题、源码分析

介绍SharedPreferences作为Android提供给我们方便简单的存储数据的类。它内部的实现实际上是xml格式的文件存储数据,同时为了提升读写性能同时实现了内存缓存机制。关键源码在andro...

关于NSUserDefaults保存数据的问题总结

大家都知道,NSUserDefaults适合存储轻量级的本地数据,并且在不删除程序的情况下是永久保存的。 NSUserDefaults支持的数据格式有:NSNumber(Integer、Float、D...

在两个模态框中保存数据并实现文件上传问题

问题: 用户接受任务时候,会相应的弹出第一个模态框,在此模态框中展示了用户所需要填写的信息,其中最后一个是添加步骤的链接,用户点击这个链接,将会弹出第二个模态框,在第二个模态框中会让用户填写一个表格,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多并发下数据保存的问题
举报原因:
原因补充:

(最多只允许输入30个字)