之前没接触过redis,能否详细给我解释下如何使用?百度了没找到典型例子啊
后台运行:
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
while(1) {
//这里写你的业务逻辑代码.
//注意!每次循环都要显式关闭Redis和MySQL连接.
//同时要注意对可能的连接失败,操作失败进行处理.
//另外记得用unset释放掉不再使用的变量,避免内存泄漏.
sleep(60); //每隔60秒把Redis的数据插入到MySQL中.
}
补充:
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
<?php
$argv = getopt('a:b:');
print_r($argv);
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
以前我在stackoverflow上也问过这个问题,好多答案都是说redis用list存,然后设置一个每分钟跑的cron任务去读这个list,为什么不用while (true)
是因为长时间执行的php进程可能会造成内存泄漏。
不过现在我已经在尝试使用rabbitmq来实现队列了,效果也很不错哟。
3 回答4k 阅读✓ 已解决
2 回答3.1k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
4 回答1.7k 阅读
2 回答1.2k 阅读✓ 已解决
用php-worker模式啊。大致应该如此