資料先寫進redis用隊列,然後定時任務來寫 mysql,如何??

來源:互聯網
上載者:User
之前沒接觸過redis,能否詳細給我解釋下如何使用?百度了沒找到典型例子啊

回複內容:

之前沒接觸過redis,能否詳細給我解釋下如何使用?百度了沒找到典型例子啊

用php-worker模式啊。大致應該如此

$cache_data = $redis->get_all();$redis->flush_all();$sqlArr = [];for($item in $cache_data){    array_push($sqlArr,sql_gen($item));}execute_sqls($sqlArr);sleep($sleep_time);

後台運行:

chmod a+x /png/php_daemon #給指令碼加上執行許可權nohup /png/php_daemon >/png/php_daemon.log 2>&1 &

或者添加到/etc/rc.local,讓其開機自啟動運行:

/png/php_daemon >/png/php_daemon.log

php_daemon內容:

#!/png/php/7.0.0/bin/php

補充:
PHP提供有2個預定義變數用於PHP指令碼接收命令列參數:
http://php.net/manual/zh/reserved.variables.php
$argc 傳遞給指令碼的參數個數
$argv[] 傳遞給指令碼的參數數組

getopt可以用於擷取命令列參數選項,返回一個參數名和值的關聯陣列.
http://php.net/manual/zh/function.getopt.php
單獨的字元(不接受值)
後面跟隨冒號的字元(此選項需要值)
後面跟隨兩個冒號的字元(此選項的值可選)

#!/png/php/5.4.39NTS/bin/php
chmod +x cli.php./cli.php -a1024 -b2048 或者 php cli.php -a1024 -b2048

輸出:

Array( [a] => 1024 [b] => 2048)

注釋掉 $argv = getopt("a:b:") 輸出:

Array( [0] => ./cli.php [1] => -a1024 [2] => -b2048)

寫個daemon不停的讀redis就行了。

1.程式啟動
2.讀取新資料(按照timestamp排序擷取最舊的)
3.沒有資料,sleep 1秒
3.有資料,操作mysql,更新最後一次檢查的時間戳記timestamp

你不知道redis有訊息佇列功能麼,讓其它線程用blpop這種阻塞讀取的模式從隊列裡讀訊息就可以了

用這個:https://github.com/Footstones/Plumber

可以考慮兩種方式:
(1)list作為緩衝,借用producer/consumer模式
(2)Pub/Sub,訂閱訊息,寫MySQL

以前我在stackoverflow上也問過這個問題,好多答案都是說redis用list存,然後設定一個每分鐘跑的cron任務去讀這個list,為什麼不用while (true)是因為長時間執行的php進程可能會造成記憶體流失。

不過現在我已經在嘗試使用rabbitmq來實現隊列了,效果也很不錯喲。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.