以ubuntu爲例:php
一、安裝redishtml
$ sudo apt-get install redis-server
安裝完成後可使用如下命令查看redis服務是否啓動laravel
$ ps aux | grep redis
若是沒有,則輸入redis
$ sudo service redis-server start
啓動後,使用express
$ redis-cli
進入redis命令行,能夠用如下命令行測試存儲apache
$ set test "hello word" $ get test
二、配置redisubuntu
配置遠程登陸,默認redis是不容許遠程登陸的,須要咱們配置,windows
==但若是應用服務器和redis安裝在同個服務器中,則不須要作這一步。==api
#編輯redis配置文件 $ sudo vi /etc/redis/redis.conf #註釋掉下面這一行。 # bind 127.0.0.1
配置密碼登陸緩存
#編輯redis配置文件 $ sudo vi /etc/redis/redis.conf #找到下面這一行並去除註釋 # requirepass foobared #未修改以前 #修改以後,123456是設置的redis密碼 requirepass 123456
三、重啓redis
$ sudo service redis-server restart # 或者能夠手動殺掉進程,再開啓 $ sudo killall redis-server $ sudo redis-server /etc/redis/redis.conf
能夠在別的客戶端中測試鏈接(客戶端已經配置好redis)
# -h接redis服務器地址,-p端口號,-a密碼 $ redis-cli -h 192.168.1.188 -p 6379 -a 123456
注意:若是redis使用頻率不高,只是該項目使用,能夠不用安裝php的redis擴展,直接在對應的laravel項目安裝predis擴展包(從開發編碼實現那步開始)
==因爲測試時咱們以本身的電腦當應用服務器,以windows爲例:==
(1)redis的php擴展下載地址:
http://windows.php.net/downlo...
根據本身的php版本和系統版本,下載對應的擴展包,解壓
文件「php_redis-2.2.5-5.5-ts-vc11-x64.zip」是php5.5版本的。
(2)將解壓文件中的php_redis.dll放到php的擴展目錄ext下。
(3)在apache的php.ini配置文件下加上extension=php_redis.dll
(4)重啓apache。
查看phpinfo是否有redis的擴展,若是有,則說明php-redis安裝成功。
==以ubuntu爲例==
$ sudo apt-get install php5-redis
重啓apache
$ sudo /etc/init.d/apache2 restart
查看phpinfo是否有redis的擴展,若是有,則說明php5-redis安裝成功。
(1)須要安裝predis擴展包
$ composer require "predis/predis:~1.0"
php artisan config:cache
(2)配置文件中.env中須要增長隊列驅動的配置
QUEUE_DRIVER=redis REDIS_HOST=192.168.1.188
(3)config/database.php配置redis的鏈接參數
'redis' => [ 'cluster' => false, 'default' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), 'port' => 6379, 'database' => 0, 'password' => env('REDIS_PASSWORD', '123456') ], ],
(4)在appJobs中建立任務類,當隊列處理該任務時執行的handle方法。
這裏以咱們實際代碼爲例:
<?php namespace App\Jobs; use App\Jobs\Job; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Bus\SelfHandling; use Illuminate\Contracts\Queue\ShouldQueue; use App\Classes\LogisticApi\LogisticSdk\alibaba\AlibabaClient; use Illuminate\Support\Facades\Redis; /** * 阿里巴巴無憂物流建立線上發貨createWarehouseOrder後, * 國際物流單號不是實時返回,須要間隔1-2分鐘調用查詢接口進行查詢 * 此任務主要進行阿里getOnlineLogisticsInfo接口的查詢 */ class AligetOnlineLogisticsInfo extends Job implements SelfHandling, ShouldQueue { use InteractsWithQueue, SerializesModels; /** * 訂單ID * @var string */ protected $order_id; /** * api 帳號信息 * @var array */ protected $api_account; /** * Create a new job instance. * * @param string $order_id 訂單ID * @param string $seller_id * * @return void */ public function __construct($order_id, $api_account){ $this->order_id = $order_id; $this->api_account = $api_account; } /** * Execute the job. * 獲取getOnlineLogisticsInfo物流信息 * * @return void */ public function handle(){ $alibaba_client = new AlibabaClient($this->api_account); $response = $alibaba_client->getOnlineLogisticsInfo(['orderId' => $this->order_id]); print_r($response); //TODO 抓取失敗後的處理,後續根據業務需求來處理 } }
(5)推送任務到隊列。
使用了DispatchesJobs trait。該trait提供了一些容許你方便推送任務到隊列的方法,例如dispatch方法。能夠爲任務指定隊列,也能夠延遲任務。
以咱們實際業務爲例:
namespace App\Classes\LogisticApi; use App\Classes\LogisticApi\LogisticTrackingAbstract; use App\Classes\LogisticApi\LogisticSdk\alibaba\AlibabaClient; use App\Models\Erp_aliexpress_order_master; use App\Models\Erp_aliexpress_order_slave; use App\Models\Erp_logistics_setting; use App\Models\Erp_aliexpress_token; use Illuminate\Foundation\Bus\DispatchesJobs; use App\Jobs\AligetOnlineLogisticsInfo; /** * ocs物流對接 */ class logisticTrackingWuyou extends LogisticTrackingAbstract { use DispatchesJobs; /** * */ public function __construct(){ } /** * 獲取tracking數據 * * @param array $api_data 訂單數據,能夠是訂單號之類的 * @param array $api_param 接口參數數據 * @param string $save_path 保存運單圖片的路徑 * * @return array tracking */ public function getTracking(array $api_data, array $api_param, $save_path){ //獲得訂單信息 $order = $this->getOrder($api_data['order_id']); //獲得對應的訂單帳號信息 $api_account = $this->getApiAccountInfo($order['seller_id']); $alibaba_client = new AlibabaClient($api_account); $params = $this->setCreateWarehouseOrderApiParams($order, $alibaba_client); if(isset($seller_address->error_code)){ return $params; } $response = $alibaba_client->createWarehouseOrder($params); //成功了,推送隊列任務獲取getOnlineLogisticsInfo國際物流, //國際物流返回不是實時返回,須要等待1-2分鐘 if(true == $response->success){ //推入getOnlineLogisticsInfo隊列並延遲120秒執行 $job = (new AligetOnlineLogisticsInfo($api_data['order_id'], $api_account))->delay(120); $this->dispatch($job); } return $response; } }
==注意,因爲咱們沒有正式的業務情景測試,因此使用單元測試,在測試以前,須要配置好單元測試的隊列驅動,在phpunit.xml中,注意
如下QUEUE_DRIVER,須要將其改成redis,或者刪掉。==
<env name="QUEUE_DRIVER" value="sync"/>
(1)應用服務器監聽
若是以前有 php artisan config:cache 緩存配置,最好先把配置緩存清除:php artisan config:clear。
測試過程當中,可使用 ==php artisan queue:listen==進行監聽。
線上可使用 ==php artisan queue:work --daemon==
詳細的監聽方式能夠查看:http://laravelacademy.org/pos...
(2)redis服務器監聽
redis-cli鏈接redis後,可使用==monitor==查看隊列狀況。
具體能夠參考: