php 實現 redis 佇列,等待有新訊息入列
阿新 • • 發佈:2019-01-03
1. 訊息入列程式碼, t1.php:
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); while(1){ try{ $value = "value_".time(); $redis->LPUSH('key1', $value); echo $value."\n"; sleep(rand(1, 3)); }catch(Exception $e){ echo $e->getMessage(). "\n"; exit; } }
2. 訊息出列程式碼:
$redis = new Redis(); $redis->pconnect('127.0.0.1', 6379); while(1){ try{ $value = $redis->BLPOP('key1', 20); if(!empty($value)){ var_export( $value )."\n"; } }catch(Exception $e){ echo $e->getMessage(). "\n"; exit; } }
3. redis用到的函式講解
1. connect 連結redis服務 2. pconnect不會主動關閉的連結 3. LPUSH LPUSH key value [value ...] 將一個或多個值value插入到列表key的表頭。 如果有多個value值,那麼各個value值按從左到右的順序依次插入到表頭:比如對一個空列表(mylist)執行LPUSH mylist a b c,則結果列表為c b a,等同於執行執行命令LPUSH mylist a、LPUSH mylist b、LPUSH mylist c。 如果key不存在,一個空列表會被建立並執行LPUSH操作。 當key存在但不是列表型別時,返回一個錯誤。 時間複雜度: O(1) 返回值: 執行LPUSH命令後,列表的長度。 註解:在Redis 2.4版本以前的LPUSH命令,都只接受單個value值。 4.BLPOP BLPOP key [key ...] timeout BLPOP是列表的阻塞式(blocking)彈出原語。 它是LPOP命令的阻塞版本,當給定列表內沒有任何元素可供彈出的時候,連線將被BLPOP命令阻塞,直到等待超時或發現可彈出元素為止。 當給定多個key引數時,按引數key的先後順序依次檢查各個列表,彈出第一個非空列表的頭元素。