php Rides 存入list类型,然后拿2000条,后去除Rides2000条
1、数据存入 Rides
/*------------------------data数据存入rides数据库-----------------------------*/
function _setByTj4($data)
{
global $redis4;
if (!$redis4) {
$redis4 = new Redis();
$redis4->connect('127.0.0.1');
// 选择数据库,例如数据库3
$redis4->select(4);
}
$jsonString = json_encode($data, true);
$redis4->rPush('sqlQueue', $jsonString);
}
2、读取并删除Rides对应读取内容
// 连接到 Redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->select(4);
// 从头部删除并返回指定数量的元素
function popLeftElements($listName, $count)
{
global $redis;
// 获取列表的前 count 个元素
$elements = $redis->lRange($listName, 0, $count - 1);
// 删除这些元素
$redis->lTrim($listName, $count, -1);
return $elements;
}
// 删除并返回前2000个元素
$removedElements = popLeftElements('sqlQueue', 2000);
$result = array_map(function ($json) {
return json_decode($json, true); // 将 JSON 字符串转换为数组
}, $removedElements);
// 构建批量插入SQL语句
$sql = "INSERT INTO access_records (member_id,ip,url,headers,source,addTime,wxopenid) VALUES ";
$valuesArr = [];
foreach ($result as $row) {
$member_id = $row['member_id'] ? $row['member_id'] : 0;
$ip = $row['ip'] ? $row['ip'] : '';
$url = $row['url'] ? $row['url'] : '';
$headers = $row['headers'] ? $row['headers'] : '';
$source = $row['source'] ? $row['source'] : '';
$addTime = $row['addTime'];
$wxopenid = $row['wxopenid'] ? $row['wxopenid'] : '';
$valuesArr[] = "('{$member_id}', '{$ip}', '{$url}', '{$headers}', '{$source}', '{$addTime}', '{$wxopenid}')";
}
$sql .= implode(", ", $valuesArr);
_query($sql);
echo '执行成功' . count($result) . '条';