美文网首页
php redis list

php redis list

作者: 周pan | 来源:发表于2019-07-23 14:46 被阅读0次

    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继续阻塞
    
    

    相关文章

      网友评论

          本文标题:php redis list

          本文链接:https://www.haomeiwen.com/subject/nldolctx.html