通过jedis在Redis中丢失数据

时间:2014-11-06 13:18:19

标签: java redis jedis

我们尝试在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

请告诉我们如何解决这个问题,因为很难检查每个条目。

0 个答案:

没有答案