簡體   English   中英

Mysql PHP Cron用於更新用戶統計信息

[英]Mysql PHP Cron for updating user stats

我正在嘗試構建一個將每24小時運行一次的php cron作業,並在mysql數據庫中更新了用戶靜態信息。 我遇到的問題是我不確定如何確保同一用戶值不會循環更新,這意味着其他用戶均不會更新。 我試圖用while循環來做,但是進展不順利。

所以基本上它應該像這樣
1. cron啟動->
2.更新mysql數據庫中每個用戶的統計信息->
3. cron結束

MySQL解決方案:

您需要MySQL event按時間運行。

我建議您根據情況編寫update語句,並將相同的過程鏈接到要在每天開始時運行的事件調度程序。

您可以按照以下步驟進行操作:

范例

delimiter //
drop event if exists event_scheduling_sample;

create event if not exists event_scheduling_sample
--  on schedule every 86400 second starts 00:00:00
--  at timestamp( adddate( current_date, 1 ),'00:00:00' )
--  on schedule every 1 day 
    --   starts current_timestamp 
    --   ends current_timestamp + interval '5' day
--  on schedule every 1 day 
    --   starts current_timestamp 
    --   ends timestamp( current_date,'23:59:59' )

  on schedule every 1 day 
     starts timestamp( current_date + 1, '00:00:00' )

  comment 'event scheduling sample'
  do
    call db_name.procedure_name_that_updates_the_user_records();
;
//
delimiter ;

參考MySQL:CREATE EVENT語法

事件計划程序的默認狀態為DISABLED。
您需要通過以下任何語句來啟用它。

SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@global.event_scheduler = 1;

當事件調度程序為ON時,事件調度程序線程作為守護進程在SHOW PROCESSLIST的輸出中列出,其狀態表示如下:

mysql> SHOW PROCESSLIST\G
*************************** 1. row ***************************
     Id: 1
   User: root
   Host: localhost
     db: NULL
Command: Query
   Time: 0
  State: NULL
   Info: show processlist
*************************** 2. row ***************************
     Id: 2
   User: event_scheduler
   Host: localhost
     db: NULL
Command: Daemon
   Time: 3
  State: Waiting for next activation
   Info: NULL
2 rows in set (0.00 sec)

將事件計划程序設置為“打開”后,您將看到它正在工作。

參考MySQL事件調度程序配置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM