0

0

Redis相关命令

不言

不言

发布时间:2018-04-18 10:47:23

|

1355人浏览过

|

来源于php中文网

原创

这篇文章介绍的内容是关于Redis相关命令 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法)

目录:

List(列表)
LPUSH LPUSHX RPUSH RPUSHX LPOP RPOP
BLPOP BRPOP LLEN LRANGE LREM LSET
LTRIM LINDEX LINSERT RPOPLPUSH BRPOPLUSH  

一、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 1var_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 3var_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 1var_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 3var_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 applevar_dump($redis -> lRange('favorite_fruit',0,-1));//  array (size=2)
//      0 => string 'banana' (length=6)
//      1 => string 'cherry' (length=6)

复制代码

6、RPOP

   Redis Rpop 命令用于移除并返回列表的最后一个元素。

语法:

redis 127.0.0.1:6379> RPOP KEY_NAME

返回值:列表的最后一个元素。 当列表不存在时,返回 nil 。

可用版本:>= 1.0.0

时间复杂度:O(1)

具体实例:


复制代码

<?php$redis = new redis();$redis -> connect('127.0.0.1',6379);$redis -> flushAll();$redis -> lPush('favorite_fruit','cherry');$redis -> lPush('favorite_fruit','banana');$redis -> lPush('favorite_fruit','apple');var_dump($redis -> rPop('favorite_fruit'));             // string cherryvar_dump($redis -> lRange('favorite_fruit',0,-1));//  array (size=2)
//      0 => string 'apple' (length=5)
//      1 => string 'banana' (length=6)

复制代码

7、BLPOP

   Redis Blpop 命令移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

     (1)当给定多个key参数时,按参数key的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。
   (2)超时参数timeout接受一个以秒为单位的数字作为值。超时参数设为0表示阻塞时间可以无限期延长

   (3)在MULTI/EXEC事务中的BLPOP,行为表现得就像LPOP一样,对空列表返回nil,对非空列表弹出列表元素,不进行任何阻塞操作。

语法:

redis 127.0.0.1:6379> BLPOP LIST1 LIST2 .. LISTN TIMEOUT

返回值:如果列表为空,返回一个 nil 。 否则,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。

可用版本:>= 2.0.0

时间复杂度:O(1)

具体实例:


复制代码

<?php$redis = new redis();$redis -> connect('127.0.0.1',6379);$redis -> flushAll();// This first case: 非阻塞行为,最少有一个非空列表$redis -> lPush('favorite_fruit','cherry');$redis -> lPush('favorite_fruit','banana');$redis -> lPush('favorite_fruit','apple');$redis -> lPush('pats','dog');$redis -> lPush('pats','cat');$redis -> lPush('pats','rabbit');var_dump($redis -> blPop('favorite_fruit',3));//  array (size=2)
//      0 => string 'favorite_fruit' (length=14)
//      1 => string 'apple' (length=5)$array_blpop = array('favorite_fruit','pats');var_dump($redis -> blPop($array_blpop,3));          // 优先弹出第一个非空列表的头元素
//  array (size=2)
//      0 => string 'favorite_fruit' (length=14)
//      1 => string 'banana' (length=6)var_dump($redis -> lRange('favorite_fruit',0,-1));//  array (size=1)
//      0 => string 'cherry' (length=6)

// This second case: 阻塞行为, 所有给定key都不存在或包含空列表var_dump($redis -> blPop('fake_key',2));    // 阻塞链接, 2s 之后超时结束,返回 array (size=0) empty

复制代码

8、BRPOP

   Redis Brpop 命令移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

     (1)当给定多个key参数时,按参数key的先后顺序依次检查各个列表,弹出第一个非空列表的尾部元素。
   (2)超时参数timeout接受一个以秒为单位的数字作为值。超时参数设为0表示阻塞时间可以无限期延长

   (3)在MULTI/EXEC事务中的BLPOP,行为表现得就像RPOP一样,对空列表返回nil,对非空列表弹出列表元素,不进行任何阻塞操作。

语法:

redis 127.0.0.1:6379> BRPOP LIST1 LIST2 .. LISTN TIMEOUT

返回值:假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。

可用版本:>= 2.0.0

时间复杂度:O(1)

具体实例:


复制代码

<?php$redis = new redis();$redis -> connect('127.0.0.1',6379);$redis -> flushAll();// This first case: 非阻塞行为,最少有一个非空列表$redis -> lPush('favorite_fruit','cherry');$redis -> lPush('favorite_fruit','banana');$redis -> lPush('favorite_fruit','apple');$redis -> lPush('pats','dog');$redis -> lPush('pats','cat');$redis -> lPush('pats','rabbit');var_dump($redis -> brPop('favorite_fruit',3));//  array (size=2)
//      0 => string 'favorite_fruit' (length=14)
//      1 => string 'cherry' (length=6)$array_brpop = array('favorite_fruit','pats');var_dump($redis -> brPop($array_brpop,3));          // 优先弹出第一个非空列表的头元素
//  array (size=2)
//      0 => string 'favorite_fruit' (length=14)
//      1 => string 'banana' (length=6)var_dump($redis -> lRange('favorite_fruit',0,-1));//  array (size=1)
//      0 => string 'apple' (length=5)

// This second case: 阻塞行为, 所有给定key都不存在或包含空列表var_dump($redis -> brPop('fake_key',2));    // 阻塞链接, 2s 之后超时结束,返回 array (size=0) empty

复制代码

9、LLEN

  Redis Llen 命令用于返回列表的长度。 如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误。

语法:

redis 127.0.0.1:6379> LLEN KEY_NAME

返回值:列表的长度。

可用版本:>= 1.0.0

时间复杂度:O(1)

具体实例:


复制代码

<?php$redis = new redis();$redis -> connect('127.0.0.1',6379);$redis -> flushAll();$redis -> lPush('favorite_fruit','cherry');$redis -> lPush('favorite_fruit','banana');$redis -> lPush('favorite_fruit','apple');var_dump($redis -> lLen('favorite_fruit'));     // int 3var_dump($redis -> lLen('fake_key'));           // 列表不存在,返回 int 0

复制代码

10、LRANGE

  Redis Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

  (1)超出范围的下标值不会引起错误。

  (2)如果start下标比列表的最大下标end(LLEN list减去1)还要大,或者start stopLRANGE返回一个空列表。

  (3)如果stop下标比end下标还要大,Redis将stop的值设置为end

语法:

redis 127.0.0.1:6379> LRANGE KEY_NAME START END

返回值:一个列表,包含指定区间内的元素。

可用版本:>= 1.0.0

时间复杂度:O(S+N),S为偏移量startN为指定区间内元素的数量。

具体实例:


复制代码

<?php$redis = new redis();$redis -> connect('127.0.0.1',6379);$redis -> flushAll();$redis -> lPush('favorite_fruit','cherry');$redis -> lPush('favorite_fruit','banana');$redis -> lPush('favorite_fruit','apple');$redis -> lPush('favorite_fruit','peach');$redis -> lPush('favorite_fruit','pineapple');$redis -> lPush('favorite_fruit','grape');var_dump($redis -> lRange('favorite_fruit',1,3));//   array (size=3)
//      0 => string 'pineapple' (length=9)
//      1 => string 'peach' (length=5)
//      2 => string 'apple' (length=5)var_dump($redis -> lRange('favorite_fruit',6,2));     // 当 start > end 时,返回空数组, array (size=0) emptyvar_dump($redis -> lRange('favorite_fruit',0,100));   // 当 end 大于列表长度时,按 end 值计算
//  array (size=6)
//      0 => string 'grape' (length=5)
//      1 => string 'pineapple' (length=9)
//      2 => string 'peach' (length=5)
//      3 => string 'apple' (length=5)
//      4 => string 'banana' (length=6)//      5 => string 'cherry' (length=6)

复制代码

11、LREM

  Redis Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。

  COUNT 的值可以是以下几种:

  • count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。

  • count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。

  • count = 0 : 移除表中所有与 VALUE 相等的值。

语法:

redis 127.0.0.1:6379> LREM KEY_NAME COUNT VALUE

返回值:被移除元素的数量。 列表不存在时返回 0 。

可用版本:>= 1.0.0

时间复杂度:O(N),N为列表的长度。

具体实例:


复制代码

<?php$redis = new redis();$redis -> connect('127.0.0.1',6379);$redis -> flushAll();$redis -> lPush('favorite_fruit','cherry');$redis -> lPush('favorite_fruit','apple');$redis -> lPush('favorite_fruit','apple');$redis -> lPush('favorite_fruit','peach');$redis -> lPush('favorite_fruit','apple');$redis -> lPush('favorite_fruit','grape');var_dump($redis -> lRem('favorite_fruit','apple',2));   // int 2    // 从开头向结尾方向移除 2 个var_dump($redis -> lRange('favorite_fruit',0,-1));//array (size=4)
//  0 => string 'grape' (length=5)
//  1 => string 'peach' (length=5)
//  2 => string 'apple' (length=5)
//  3 => string 'cherry' (length=6)var_dump($redis -> lRem('favorite_fruit','apple',-1));   // int1    // 从结尾向开头方向移除 1 个var_dump($redis -> lRange('favorite_fruit',0,-1));//array (size=3)
//  0 => string 'grape' (length=5)
//  1 => string 'peach' (length=5)
//  2 => string 'cherry' (length=6)var_dump($redis -> lRem('favorite_fruit','peach',0));   // int 1    // 移除所有的 valuevar_dump($redis -> lRange('favorite_fruit',0,-1));//array (size=2)
//  0 => string 'grape' (length=5)
//  1 => string 'cherry' (length=6)

复制代码

12、LSET

  Redis Lset 通过索引来设置元素的值。当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。

语法:

redis 127.0.0.1:6379> LSET KEY_NAME INDEX VALUE

返回值:操作成功返回 ok ,否则返回错误信息。

可用版本:>= 1.0.0

时间复杂度:对头元素或尾元素进行LSET操作,复杂度为O(1)。其他情况下,为O(N),N为列表的长度。

具体实例:


复制代码

<?php$redis = new redis();$redis -> connect('127.0.0.1',6379);$redis -> flushAll();$redis -> lPush('favorite_fruit','cherry');$redis -> lPush('favorite_fruit','apple');$redis -> lPush('favorite_fruit','peach');$redis -> lPush('favorite_fruit','grape');var_dump($redis -> lSet('favorite_fruit','1','pineapple'));   // 将第一个元素替换为 pineapplevar_dump($redis -> lRange('favorite_fruit',0,-1));//  array (size=4)
//      0 => string 'grape' (length=5)
//      1 => string 'pineapple' (length=9)
//      2 => string 'apple' (length=5)
//      3 => string 'cherry' (length=6)var_dump($redis -> lSet('favorite_fruit','100','pitaya'));   // boolean false , 对索引超过范围进行设置,设置不成功var_dump($redis -> lSet('fake_key',1,'mango'));              // boolean false , 对不存在的 key 进行设置,设置不成功

复制代码

13、LTRIM

  Redis Ltrim 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。(下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推)。

  (1)超出范围的下标值不会引起错误。

  (2)如果start下标比列表的最大下标end(LLEN list减去1)还要大,或者start stopLTRIM返回一个空列表(因为LTRIM已经将整个列表清空)。

  (3)如果stop下标比end下标还要大,Redis将stop的值设置为end

语法:

redis 127.0.0.1:6379> LTRIM KEY_NAME START STOP

返回值:命令执行成功时,返回 ok 

可用版本:>= 1.0.0

时间复杂度:O(N),N为被移除的元素的数量。

具体实例:


复制代码

<?php$redis = new redis();$redis -> connect('127.0.0.1',6379);$redis -> flushAll();$redis -> lPush('favorite_fruit','cherry');$redis -> lPush('favorite_fruit','apple');$redis -> lPush('favorite_fruit','peach');$redis -> lPush('favorite_fruit','grape');var_dump($redis -> lTrim('favorite_fruit',1,-1));var_dump($redis -> lRange('favorite_fruit',0,-1));//  array (size=3)
//      0 => string 'peach' (length=5)
//      1 => string 'apple' (length=5)
//      2 => string 'cherry' (length=6)var_dump($redis -> lTrim('favorite_fruit',1,10));   // end > list 的长度,那就将 stop 值设为 endvar_dump($redis -> lRange('favorite_fruit',0,-1));//  array (size=2)
//      0 => string 'apple' (length=5)
//      1 => string 'cherry' (length=6)var_dump($redis -> lTrim('favorite_fruit',7,1));        // start > end 或 start > stop , 清空整个 listvar_dump($redis -> lRange('favorite_fruit',0,-1));     // 返回 array (size=0) empty

复制代码

14、LINDEX

  Redis Lindex 命令用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

语法:

redis 127.0.0.1:6379> LINDEX KEY_NAME INDEX_POSITION

返回值:列表中下标为指定索引值的元素。 如果指定索引值不在列表的区间范围内,返回 nil 。

可用版本:>= 1.0.0

时间复杂度:O(N),N为到达下标index过程中经过的元素数量对列表的头元素和尾元素执行LINDEX命令,复杂度为O(1)。

具体实例:


复制代码

<?php$redis = new redis();$redis -> connect('127.0.0.1',6379);$redis -> flushAll();$redis -> lPush('favorite_fruit','cherry');$redis -> lPush('favorite_fruit','apple');$redis -> lPush('favorite_fruit','peach');$redis -> lPush('favorite_fruit','grape');var_dump($redis -> lIndex('favorite_fruit',2));     // string 'apple'var_dump($redis -> lRange('favorite_fruit',0,-1));  // 原 list 表不变
//  array (size=4)
//      0 => string 'grape' (length=5)
//      1 => string 'peach' (length=5)
//      2 => string 'apple' (length=5)
//      3 => string 'cherry' (length=6)

复制代码

15、LINSERT

  Redis Linsert 命令用于在列表的元素前或者后插入元素。 当指定元素不存在于列表中时,不执行任何操作。 当列表不存在时,被视为空列表,不执行任何操作。 如果 key 不是列表类型,返回一个错误。

语法:

redis 127.0.0.1:6379> LINSERT KEY_NAME BEFORE EXISTING_VALUE NEW_VALUE

返回值:如果命令执行成功,返回插入操作完成之后,列表的长度。 如果没有找到指定元素 ,返回 -1 。 如果 key 不存在或为空列表,返回 0 。

可用版本:>= 1.0.0

时间复杂度:O(N),为寻找pivot过程中经过的元素数量。

具体实例:


复制代码

<?php$redis = new redis();$redis -> connect('127.0.0.1',6379);$redis -> flushAll();$redis -> lPush('favorite_fruit','cherry');$redis -> lPush('favorite_fruit','apple');$redis -> lPush('favorite_fruit','peach');$redis -> lPush('favorite_fruit','grape');// The first case : 成功插入,返回列表长度var_dump($redis -> lInsert('favorite_fruit','before','apple','Mango'));     // int 5var_dump($redis -> lRange('favorite_fruit',0,-1));//array (size=5)
//  0 => string 'grape' (length=5)
//  1 => string 'peach' (length=5)
//  2 => string 'Mango' (length=5)
//  3 => string 'apple' (length=5)
//  4 => string 'cherry' (length=6)

// The seconde case : 没有找到指定元素 ,返回 -1var_dump($redis -> lInsert('favorite_fruit','before','not_exists','pitaya'));     // int -1var_dump($redis -> lRange('favorite_fruit',0,-1));      // 原 list 不变
//array (size=5)
//  0 => string 'grape' (length=5)
//  1 => string 'peach' (length=5)
//  2 => string 'Mango' (length=5)
//  3 => string 'apple' (length=5)
//  4 => string 'cherry' (length=6)

// The third case : 没有找到指定元素 ,返回 0var_dump($redis -> lInsert('fake_key','before','apple','watermelon'));     // int 0

复制代码

16、RPOPLPUSH

  Redis Rpoplpush 命令用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。

语法:

redis 127.0.0.1:6379> RPOPLPUSH SOURCE_KEY_NAME DESTINATION_KEY_NAME

返回值:被弹出的元素。

可用版本:>= 1.0.0

时间复杂度:O(1)

具体实例:


复制代码

<?php$redis = new redis();$redis -> connect('127.0.0.1',6379);$redis -> flushAll();$redis -> lPush('favorite_fruit','cherry');$redis -> lPush('favorite_fruit','apple');$redis -> lPush('favorite_fruit','peach');$redis -> lPush('favorite_fruit','grape');// The first case : 若 source 和 desitination 相同,则尾旋转操作var_dump($redis -> rpoplpush('favorite_fruit','favorite_fruit'));   // cherryvar_dump($redis -> lRange('favorite_fruit',0,-1));//array (size=4)
//  0 => string 'cherry' (length=6)
//  1 => string 'grape' (length=5)
//  2 => string 'peach' (length=5)
//  3 => string 'apple' (length=5)

// The second case : 移动操作var_dump($redis -> rpoplpush('favorite_fruit','other_list'));   // applevar_dump($redis -> lRange('favorite_fruit',0,-1));//array (size=3)
//  0 => string 'cherry' (length=6)
//  1 => string 'grape' (length=5)
//  2 => string 'peach' (length=5)var_dump($redis -> lRange('other_list',0,-1));//array (size=1)
//  0 => string 'apple' (length=5)

复制代码

17、BRPOPLPUSH

  Redis Brpoplpush 命令从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

  (1)当给定列表source不为空时,BRPOPLPUSH的表现和RPOPLPUSH一样。

  (2)当列表source为空时,BRPOPLPUSH命令将阻塞连接,直到等待超时,或有另一个客户端对source执行LPUSH或RPUSH命令为止。

  (3)超时参数timeout接受一个以秒为单位的数字作为值。超时参数设为0表示阻塞时间可以无限期延长

语法:

redis 127.0.0.1:6379> BRPOPLPUSH LIST1 ANOTHER_LIST TIMEOUT

返回值:假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值,第二个元素是等待时长。

可用版本:>= 2.0.0

时间复杂度:O(1)

具体实例:


复制代码

<?php$redis = new redis();$redis -> connect('127.0.0.1',6379);$redis -> flushAll();$redis -> lPush('favorite_fruit','cherry');$redis -> lPush('favorite_fruit','apple');$redis -> lPush('favorite_fruit','peach');$redis -> lPush('favorite_fruit','grape');// The first case : 若 source 和 desitination 相同,则尾旋转操作var_dump($redis -> brpoplpush('favorite_fruit','favorite_fruit',2));   // cherry ,并没有返回 timevar_dump($redis -> lRange('favorite_fruit',0,-1));//array (size=4)
//  0 => string 'cherry' (length=6)
//  1 => string 'grape' (length=5)
//  2 => string 'peach' (length=5)
//  3 => string 'apple' (length=5)

// The second case : 移动操作var_dump($redis -> brpoplpush('favorite_fruit','other_list',2));   // apple ,并没有返回 timevar_dump($redis -> lRange('favorite_fruit',0,-1));//array (size=3)
//  0 => string 'cherry' (length=6)
//  1 => string 'grape' (length=5)
//  2 => string 'peach' (length=5)var_dump($redis -> lRange('other_list',0,-1));//array (size=1)
//  0 => string 'apple' (length=5)var_dump($redis -> brpoplpush('fake_key','desination_key',2));  // 等待 2s 后返回 false  ,并没有返回 time

相关推荐:

Cursor
Cursor

一个新的IDE,使用AI来帮助您重构、理解、调试和编写代码。

下载

php redis 操作手册

Windows下为PHP安装redis扩展

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

46

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

178

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

51

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

92

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

102

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

227

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

532

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

171

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.4万人学习

Redis+MySQL数据库面试教程
Redis+MySQL数据库面试教程

共72课时 | 7.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号