


PHP method to implement automatic confirmation of delivery redis queue for e-commerce orders
This article mainly introduces the method of PHP to automatically confirm the receipt of e-commerce orders in the redis queue. Interested friends can refer to it. I hope it will be helpful to everyone.
1. Scenario
#For the e-commerce platform we built before, after receiving the goods, most of the users I will not proactively click to confirm the receipt of the goods, which leads to various complaints from the merchants when settling the payment. Therefore, based on the demand, I will make an order and automatically confirm the receipt x days after delivery. The so-called automatic confirmation of receipt of orders means executing an update statement at a specific time to change the status of the order.
2. Ideas
The most cumbersome method is to query qualified orders through Linux background scheduled tasks. Then update. Ideally, this approach would work if there are orders that need to be updated every minute. However, the platform is too small, and most of the seller's delivery time is intensive and will not be scattered every minute of the 24 hours. Then, for scheduled tasks, there are too many queries and it is not suitable. Here, you can first store the order information that will automatically confirm the receipt in other media, such as redis, memcache, rabbitmq, and then execute the script to obtain the order information from the previous media for judgment. This can greatly reduce the query pressure on the database.
Redis Queue Producer
In this regard, we choose to use Linux scheduled tasks at two o'clock in the morning every day to process the upcoming tasks. The order information to confirm the receipt is queried and then stored in redis. The queue we selected on redis is characterized by first-in-first-out. When querying the order, the previous data is sorted by the delivery time, so it is the first to be dequeued. must be the order closest to the specified automatic receipt time. The code is as follows
$successCount=0; $failCount=0; $screen_time = 3600*24*9;//设置筛选天数 $data = array(); $now_time = time(); //查询符合要求的数据 $sql="select id,send_time as deliver_time from `order` where is_send=1 and is_del=0 and is_cancel=0 and is_token=0 and send_time>0 and send_time + {$screen_time} < $now_time order by send_time asc"; $res = $con->query($sql); //当队列还有数据时将数据记录并清除 while($redis->LLEN('auto_recevice_order')){ $txt = '执行时间:'.date('Y-m-d H:i:s').',信息:'.$redis->RPOP('auto_recevice_order'); file_put_contents('./autoToken/fail_log.txt',$txt."\r\n".PHP_EOL,FILE_APPEND); $failCount++; } //重新填充数据进队列 while ($row = $res->fetch_assoc()) { $successCount++; $redis->LPUSH('auto_recevice_order',json_encode($row1)); } $con->close(); $success=date('Y-m-d H:i:s').':[推送成功]:本次成功推送数据:'.$successCount.'条;记录上次处理失败数据:'.$failCount."条\r\n"; file_put_contents('./success_log.txt',$success."\r\n".PHP_EOL,FILE_APPEND);
The consumer of the redis queue
The consumer of the queue did not pass To do scheduled tasks in Linux, use the screen php cli mode of Linux to execute the php script. Consumers only need to continuously read the order information from the queue, and then determine the delivery time in the order information. If the requirements for automatic receipt are met, Just execute the update statement. At the same time, if the delivery time has not been reached and the gap between the delivery time and the delivery time is relatively large, you can let the php script sleep for a certain number of times. This time number can be adjusted by yourself. The obtained orders that do not meet the time requirements need to be reset. Push it to the redis queue, and it is also the top of the queue. So that you can get it next time. The code is as follows:
$set_time = 3600*24*10;//设置几天后自动收货 while(true){ if($i%30==0){ usleep(10);//防止while 循环使CPU使用率过高 } if($redis->LLEN('auto_recevice_order')){ $data = json_decode($redis->RPOP('auto_recevice_order')); $id = (int)$data->id;//将数据转化为整形 $deliver_time = (int)$data->deliver_time;//将数据转化为整形 $res1 = $res2 =false; $now_time = time(); if(($deliver_time+$set_time)<$now_time){ $sql1 = "update `order` set `is_token`='1',`token_time` = $now_time where id=$id and is_send=1 and is_del=0 and is_cancel=0 and is_token=0 and send_time + {$set_time} < $now_time"; $res1 = $con->query($sql1);//更新数据 $rows = mysqli_affected_rows($con); if($rows){ $ip = $this->getIp(); $sql2 = "insert into `order_log`(`order_id`,`log_msg`,`log_ip`,`log_role`,`log_user`,`log_order_state`,`log_time`) VALUES($id,'系统自动收货','$ip','系统','服务器','收货',$now_time)";//写入订单日志 $res2 = $con->query($sql2);//添加日志数据 } } if($res1==false){//将没达到条件的数据重新插入队列中 $redis->RPUSH('auto_recevice_order',json_encode(array('id'=>$id,'deliver_time'=>$deliver_time))); } } $i++; }
To execute the php script here, you need to use the Linux screen or supervisor or nohup daemon. The specific usage can be found on Baidu. It is best to have necessary log records in the same script.
3. Thinking
As the business grows, there are multiple orders that need to be processed in the queue within the same second. When only one relevant order information can be retrieved from the queue at a time, the model of one producer and multiple consumers can be adopted. In this case, a lock mechanism can be used to ensure that a message can only reach one consumer. When redis data reaches a certain amount, the producer's execution frequency and corresponding conditions can be appropriately adjusted.
The above article about realizing automatic confirmation of e-commerce order redis queue in PHP is all the content shared by the editor. I hope it can give you a reference, and I also hope that everyone will support Script Home.
Related recommendations:
The e-commerce website automaticallyconfirms the receiptHow to achieve it
PHP method to obtain a 6-digit random number that does not exist in redis
PHP implementationredisMessage queue How to post on Weibo
The above is the detailed content of PHP method to implement automatic confirmation of delivery redis queue for e-commerce orders. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
