我们尝试在java客户端jedis-2.1.0.jar的帮助下在Redis中插入值。我们的应用程序中有两个模块。一个人全天使用get
电话,每秒约2000个请求。其他模块每天开始时(每天凌晨4点到11点)加载数据(大约1亿)。
我们已经为我们的数据计算添加了日志。我们的日志显示与输入计数的完全匹配,但是当我们通过redis-cli检查时,我们得到的数量较少。差异范围约为250,000至250万。我们的机器有大约120G内存。下面是我们尝试将数据加载到Redis的代码的一部分。
Pipeline pipeline = jedis.pipelined();
int recordCount = 1;
while ((dataCurrentLine = dataFileBuffer.readLine()) != null)
{
pipeline.multi();
if (lineIndex == 1)
{
String[] tmpArr = dataCurrentLine.split(Constants.HYPHEN);
recordCount = Integer.parseInt(tmpArr[1]);
LOGGER.info("TotalRecords: " + recordCount);
}
else if (lineIndex < recordCount)
{
String[] dataArr = getRedisStorageData(dataCurrentLine);
String msisdn = dataArr[0];
String dataStr = dataArr[1];
if (Utils.isNullOrEmpty(dataStr) == false)
{
if (LOGGER.isInfoEnabled())
{
if (addedMsisdns.contains(Long.parseLong(msisdn)))
LOGGER.info("Duplicate MSISDN: " + msisdn + "|File: " + fileName);
}
addedMsisdns.add(Long.parseLong(msisdn));
pipeline.set(msisdn, dataStr);
}
else
{
deletedMsisdns.add(Long.parseLong(msisdn));
pipeline.del(msisdn);
}
}
if (lineIndex % 100 == 0)
{
pipeline.exec();
// printTmpStatus(1);
}
lineIndex++;
}
pipeline.exec();
pipeline.sync();
// printTmpStatus(0);
tmpList.add(fileName);
}
我们的Redis版本是
redis_version:2.8.6
请告诉我们如何解决这个问题,因为很难检查每个条目。