php redis list 长度限制,php redis list

list add

// 1 list add

// lpush: lpush key value [ value1 value2 value3 ]

// rpush: rpush key value [ value1 value2 value3 ]

// linsert: linsert key before|after privot value

$k31 = 'imei:list:1';

$k32 = 'imei:list:2';

$k33 = 'imei:list:3';

$redis->ltrim($k31, -1, 0);//清空列表

$redis->ltrim($k32, -1, 0);//清空列表

$redis->ltrim($k33, -1, 0);//清空列表

$redis->rpush($k31, '1', '2', '3');

$redis->lpush($k32, '4', '5', '6');

$redis->lpush($k33, '4', '5', '6');

$redis->linsert($k33, 'before', '5', 'a');

$res1 = $redis->lrange($k31, 0, -1);// Array ( [0] => 1 [1] => 2 [2] => 3 )

$res2 = $redis->lrange($k32, 0, -1);// Array ( [0] => 6 [1] => 5 [2] => 4 )

$res3 = $redis->lrange($k33, 0, -1);// Array ( [0] => 6 [1] => a [2] => 5 [3] => 4 )

list 查找

// 1 list 查找

// 获取指定范围内元素列表 lrange: lrange key start end

// 获取列表指定列表下标的元素 lindex: lindex key index

// 获取列表的长度 llen: llen key

$k31 = 'imei:list:1';

$k32 = 'imei:list:2';

$k33 = 'imei:list:3';

$redis->ltrim($k31, -1, 0);//清空列表

$redis->ltrim($k32, -1, 0);//清空列表

$redis->ltrim($k33, -1, 0);//清空列表

$redis->rpush($k31, '1', '2', '3');

$redis->lpush($k32, '4', '5', '6');

$redis->lpush($k33, '4', '5', '6');

$res1 = $redis->lrange($k31, 0, -1);// Array ( [0] => 1 [1] => 2 [2] => 3 )

$res2 = $redis->lindex($k32, 2); // string(1) "4"

$res3 = $redis->llen($k33); // string(1) "3"

list 删除

// 3 list 删除

// 从列表左侧弹出元素 lpop: 返回弹出元素

// 从列表右侧弹出元素 rpop: 返回弹出元素

// 按照索引范围修剪列表 ltirm: ltirm key start end

// 删除指定元素 lrem: lrem count value 返回删除元素个数

// count>0 从左到右,删除最多count个元素

// count<0 从右到左,删除最多count绝对值个元素

// count=0 删除所有

$k31 = 'imei:list:1';

$k32 = 'imei:list:2';

$k33 = 'imei:list:3';

$k34 = 'imei:list:4';

$redis->ltrim($k31, -1, 0);//清空列表

$redis->ltrim($k32, -1, 0);//清空列表

$redis->ltrim($k33, -1, 0);//清空列表

$redis->ltrim($k34, -1, 0);//清空列表

$redis->rpush($k31, '1', '2', '3');

$redis->lpush($k32, '4', '5', '6');

$redis->rpush($k33, '1', '2', '2', '3', '3', '3', '4', '4', '4', '4', ' 5', '5', '5', '5', '5');

$redis->rpush($k34, '1', '2', '3', '4', '5');

$res1 = $redis->lpop($k31); // string(1) "1"

print_r($redis->lrange($k31, 0, -1));// Array ( [0] => 2 [1] => 3 )

$res2 = $redis->rpop($k32); // string(1) "4"

print_r($redis->lrange($k32, 0, -1));// Array ( [0] => 6 [1] => 5 )

$res3 = $redis->lrem($k33, 5, 4); // string(1) "4"

print_r($redis->lrange($k33, 0, -1));//Array ( [0] => 1 [1] => 2 [2] => 2 [3] => 3 [4] => 3 [5] => 3 [6] => 5 [7] => 5 [8] => 5 [9] => 5 [10] => 5 )

$res4 = $redis->lrem($k33, -2, 3); // string(1) "2"

print_r($redis->lrange($k33, 0, -1)); //Array ( [0] => 1 [1] => 2 [2] => 2 [3] => 3 [4] => 5 [5] => 5 [6] => 5 [7] => 5 [8] => 5 )

$res5 = $redis->lrem($k33, 0, 3); // string(1) "1"

print_r($redis->lrange($k33, 0, -1)); // Array ( [0] => 1 [1] => 2 [2] => 2 [3] => 5 [4] => 5 [5] => 5 [6] => 5 [7] => 5 )

$res6 = $redis->ltrim($k34, 0, 2); // bool(true)

print_r($redis->lrange($k34, 0, -1)); // Array ( [0] => 1 [1] => 2 [2] => 3 )

list 修改

// 4 list 修改

// 修改指定下标的元素 lset: lset key index newValue

$k31 = 'imei:list:1';

$redis->ltrim($k31, -1, 0);//清空列表

$redis->rpush($k31, '1', '2', '3');

$res1 = $redis->lset($k31, 1, 100); // bool(true)

print_r($redis->lrange($k31, 0, -1)); // Array ( [0] => 1 [1] => 100 [2] => 3 )

list 阻塞操作

// 4 list 阻塞操作

// 阻塞式弹出 blpop: blpop key [ key1 ... ] timeout

// 阻塞式弹出 brpop: brpop key [ key1 ... ] timeout

// note: blpop brpop分别是lpop rpop的阻塞版本 他们除了弹出方向不同 使用方法基本相同

// 说明:

// 1)列表都为空:如果timeout=3 那么客户端要等待3秒后返回,如果timeout=0, 那么客户端会一直阻塞下去

// 如果在timeout期间列表添加了数据,客户端会立即返回

$k31 = 'imei:list:1';

$k32 = 'imei:list:2';

$redis->ltrim($k31, -1, 0);//清空列表

$redis->ltrim($k32, -1, 0);//清空列表

$redis->rpush($k31, '1', '2', '3');

$redis->rpush($k32, '4', '5', '6');

$res1 = $redis->blpop($k31, $k32, 3);

print_r($res1); // Array ( [0] => imei:list:1 [1] => 1 )

print_r($redis->lrange($k31, 0, -1)); // Array ( [0] => 2 [1] => 3 )

print_r($redis->lrange($k32, 0, -1)); // Array ( [0] => 4 [1] => 5 [2] => 6 )

// 2)有一个列表不为空:客户端会立即返回

// 使用brpop时,如果是多个键,那么brpop会从左至右遍历键,一旦有一个键能弹出元素,客户端立即返回

// 如果是多个客户端对同一个键执行brpop, 那么先执行brpop命令的客户端可以获取得到弹出的值

$k31 = 'imei:list:1';

$redis->ltrim($k31, -1, 0);//清空列表

// client 1

$redis->blpop($k31, 0);

// client 2

$redis->blpop($k31, 0);

// client 3

$redis->blpop($k31, 0);

// client 4

$redis->rpush($k31, '1');

// client 1 会最获取到元素1 因为client 1最先执行brpop, 而client 2, client3继续阻塞

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值