1. 程式人生 > >redis 在 php 中的應用(List篇)

redis 在 php 中的應用(List篇)

color .com 博客 長度 多個 列表 conn ref ron

本文為我閱讀了 redis參考手冊 之後結合 博友的博客 編寫,註意 php_redis 和 redis-cli 的區別(主要是返回值類型和參數用法)

目錄:

一、List(列表)

1、LPUSH

Redis Lpush 命令將一個或多個值插入到列表頭部。 如果 key 不存在,一個空列表會被創建並執行 LPUSH 操作。 當 key 存在但不是列表類型時,返回一個錯誤。(在Redis 2.4版本以前的 LPUSH 命令,都只接受單個 value 值。)

語法:

redis 127.0.0.1:6379> LPUSH KEY_NAME VALUE1.. VALUEN

返回值: 執行 LPUSH 命令後,列表的長度。

可用版本: >= 1.0.0

時間復雜度:O(1)

具體實例:

<?php
$redis = new redis();
$redis -> connect(‘127.0.0.1‘,6379);
$redis -> flushAll();

var_dump($redis -> lPush(‘favorite_fruit‘,‘cherry‘));     // key 不存在,創建一個新的列表, 返回 int 1
var_dump($redis -> lPush(‘favorite_fruit‘,‘banana‘));     // key 存在。但是 list 類型, 返回 int 2
$redis -> set(‘pats‘,‘dog‘); var_dump($redis -> lPush(‘pats‘,‘cat‘)); // key 存在。但不是是 list 類型, 返回 boolean false

2、LPUSHX

Redis Lpushx 將一個或多個值插入到已存在的列表頭部,列表不存在時操作無效。

語法:

redis 127.0.0.1:6379> LPUSHX KEY_NAME VALUE1.. VALUEN

返回值: LPUSHX 命令執行之後,列表的長度。

可用版本: >= 2.2.0

時間復雜度:O(1)

具體實例:

<?php
$redis = new redis(); $redis -> connect(‘127.0.0.1‘,6379); $redis -> flushAll(); var_dump($redis -> rPush(‘favorite_fruit‘,‘cherry‘)); var_dump($redis -> rPush(‘favorite_fruit‘,‘banana‘)); var_dump($redis -> lPushx(‘favorite_fruit‘,‘apple‘)); // 返回 int 3 var_dump($redis -> lRange(‘favorite_fruit‘,0,-1)); // array (size=3) // 0 => string ‘apple‘ (length=5) // 1 => string ‘cherry‘ (length=6) // 2 => string ‘banana‘ (length=6) var_dump($redis -> lPushx(‘fake_key‘,‘invalid_val‘)); // 列表不存在時操作無效返回 int (0)

3、RPUSH

  Redis Rpush 命令用於將一個或多個值插入到列表的尾部(最右邊)。如果列表不存在,一個空列表會被創建並執行 RPUSH 操作。 當列表存在但不是列表類型時,返回一個錯誤。(註意:在 Redis 2.4 版本以前的 RPUSH 命令,都只接受單個 value 值)。

語法:

redis 127.0.0.1:6379> RPUSH KEY_NAME VALUE1..VALUEN

返回值: 執行 RPUSH 操作後,列表的長度。

可用版本: >= 1.0.0

時間復雜度:O(1)

具體實例:

<?php
$redis = new redis();
$redis -> connect(‘127.0.0.1‘,6379);
$redis -> flushAll();

var_dump($redis -> rPush(‘favorite_fruit‘,‘cherry‘));     // key 不存在,創建一個新的列表, 返回 int 1
var_dump($redis -> rPush(‘favorite_fruit‘,‘banana‘));     // key 存在。但是 list 類型, 返回 int 2

$redis -> set(‘pats‘,‘dog‘);
var_dump($redis -> rPush(‘pats‘,‘cat‘));     // key 存在。但不是是 list 類型, 返回 boolean false

4、RPUSHX

  Redis Rpushx 命令用於將一個或多個值插入到已存在的列表尾部(最右邊)。如果列表不存在,操作無效。

語法:

redis 127.0.0.1:6379> RPUSHX KEY_NAME VALUE1..VALUEN

返回值:執行 Rpushx 操作後,列表的長度。

可用版本: >= 2.2.0

時間復雜度:O(1)

具體實例:

<?php
$redis = new redis();
$redis -> connect(‘127.0.0.1‘,6379);
$redis -> flushAll();

var_dump($redis -> lPush(‘favorite_fruit‘,‘cherry‘));
var_dump($redis -> lPush(‘favorite_fruit‘,‘banana‘));
var_dump($redis -> rPushx(‘favorite_fruit‘,‘apple‘));     //  返回 int 3
var_dump($redis -> lRange(‘favorite_fruit‘,0,-1));
//  array (size=3)
//      0 => string ‘banana‘ (length=6)
//      1 => string ‘cherry‘ (length=6)
//      2 => string ‘apple‘ (length=5)

var_dump($redis -> rPushx(‘fake_key‘,‘invalid_val‘));     //  列表不存在時操作無效返回 int (0)

5、LPOP

   Redis Lpop 命令用於移除並返回列表的第一個元素。

語法:

redis 127.0.0.1:6379> LPOP KEY_NAME

返回值:列表的第一個元素。 當列表 key 不存在時,返回 nil 。

可用版本:>= 1.0.0

時間復雜度:O(1)

具體實例:

<?php
$redis = new redis();
$redis -> connect(‘127.0.0.1‘,6379);
$redis -> flushAll();

var_dump($redis -> lPush(‘favorite_fruit‘,‘cherry‘));
var_dump($redis -> lPush(‘favorite_fruit‘,‘banana‘));
var_dump($redis -> lPush(‘favorite_fruit‘,‘apple‘));
var_dump($redis -> lPop(‘favorite_fruit‘));             // string apple
var_dump($redis -> lRange(‘favorite_fruit‘,0,-1));
//  array (size=2)
//      0 => string ‘banana‘ (length=6)
//      1 => string ‘cherry‘ (length=6)

redis 在 php 中的應用(List篇)