1. 程式人生 > >php 實現 redis 佇列,等待有新訊息入列

php 實現 redis 佇列,等待有新訊息入列

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的先後順序依次檢查各個列表,彈出第一個非空列表的頭元素。