saveDB(); } private function saveDB() { dLog('command_logs')->info('~~~~~~~~~~~~~~~~~~~~~~~~~~开始统计redis临时保存的阅读记录~~~~~~~~~~~~~~~~~~~~~~~~~~'); $executeStart = microtime(true); // 获取数据 $data = $this->getRecord(); if (!$data) { return false; } // 组装数据 $records = $bookRecords = []; foreach ($data as $item) { foreach ($item as $v) { $record = json_decode($v, true); if (!is_array($record) || empty($record)) { continue; } // record_records表数据 $table1 = $record['uid'] % 2048; $records[$table1][] = $record; // book_record_records表数据 $table2 = $record['bid'] % 2048; $bookRecords[$table2][] = $record; } } // 保存到record_records表 if ($records) { foreach ($records as $key => $v) { $table = sprintf('record_records%s', $key); DB::connection('read_record_mysql')->table($table)->insert($v); } } // 保存到book_record_records表 if ($bookRecords) { foreach ($bookRecords as $key => $v) { $table = sprintf('book_record_records%s', $key); DB::connection('read_record_mysql')->table($table)->insert($v); } } $executeEnd = microtime(true); dLog('command_logs')->info('脚本运行时间: ', ['execute_time'=>round(($executeEnd - $executeStart), 6).'s']); dLog('command_logs')->info('~~~~~~~~~~~~~~~~~~~~~~~~~~结束统计redis临时保存的阅读记录~~~~~~~~~~~~~~~~~~~~~~~~~~'); } private function getRecord() { $length = Redis::Llen('read_record_stats'); if (!$length) return []; $count = ceil($length / 200); $result = []; for ($i = 0; $i < $count; $i++) { $start = $i * 200; $end = $start + 199; $result[] = Redis::Lrange('read_record_stats', $start, $end); } Redis::del('read_record_stats'); return $result; } }