php使用redis队列

入队

LPUSH ( 'bank_code_list', $data );
        echo $data . PHP_EOL;
    } catch ( Exception $e ) {
        echo $e->getMessage () . PHP_EOL;
    }
    usleep(1000000);
} 

出队

> /tmp/redis_pop_service.log 2>&1 &
 */
require_once 'vendor/autoload.php';

$redis = new Predis\Client ( 'tcp://127.0.0.1:6379' );

while ( True ) {
    try {
        echo $redis->LPOP ( 'bank_code_list' ) . PHP_EOL;
    } catch ( Exception $e ) {
        echo $e->getMessage () . PHP_EOL;
    }
    usleep ( 1000000 );
}

除了while(true)方式,普通的crontab执行脚本也是可以的,但是响应不够及时,如果涉及大量的网络交互计算场景,耗时过长可能存在上一个业务没有处理完,后一个业务直接开始的情况.根据自己的情况选择.

拓展:BRPOPLPUSH

脚本脚本监控,采用crontab执行:

#!/bin/bash
online_status=`ps -fe |grep 'redis_pop_service.php' |grep -v grep > /dev/null 2>&1`
if [ $$online_status -eq 0 ]
then
nohup /usr/bin/php redis_pop_service.php >> /tmp/redis_pop_service.log 2>&1 &
fi

crontab

crontab -e
*/1 * * * * /var/www/php_service_monitor.sh

注意

工作中按照需求的实际情况来进行处理

  • 容错重试
  • 日志记录
  • 系统通知
  • 多线程处理
  • 分布式
  • ....

你可能感兴趣的:(php使用redis队列)