swoole2010期 第二次课课堂笔记2 redis list 应用案例

plum 发布于 2021-01-07 17:45
阅读 54
收藏 0
分类:数据库

//链接Redis

$redis = new Redis();

$redis->connect("127.0.0.1", 6379);

 //基础操作

if (0) {

//进入队列 从右边进入

$redis->rpush("books", "php", "java", "python");

//进入队列 从左边进入

// $redis->lpush("books", "php", "java", "python");

//获取长度

// $redis->llen("books");

//左边出

// $redis->lpop("books");

//右边出

// $redis->rpop("books");

//指定10秒内返回,假如10秒没有可返回的数据,就返回nil

$redis->blpop("books", 10);

//在某一个元素前/后添加一个元素

$redis->linsert("books", "before", "java", "c++");

//通过索引获取一个元素

dd($redis->lindex("books", 2), 'lindex');

//通过索引获取list区间内多个元素

dd($redis->lrange("books", 0, -1), 'lrange');

//保留下标索引 1-3 的元素,其他去掉

dd($redis->ltrim("books", 1, 3), 'ltrim');

dd($redis->lrange("books", 0, 2), 'lrange');

}

/*

 *  消息队列

 *  //进入队列 从右边进入 右边出

 * */

if(1){

    //专门接收数据存入list 中

   $redis->rpush("books", "php", "java", "python");


    //专门获取数据处理

//    $text = $redis->blpop("books", 10);

    $text = $redis->lpop("books" );

    $len = $redis->lLen("books");

    dd($len,'length');

    if($text){

        dd($text,"to do some thing");

    }

    //to do some thing

}

/*

 * list 应用场景

 * page 分页查询

 * */

if(0){

    //根据一定的排序获取主键ID

    //存入list中  1,2,3,4,5,6,7,8,9

    $ids_arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];

    foreach ($ids_arr as $id){

        $redis->rpush("article_page_ids", $id);

    }

    //每页三个

    $size = 3;

    //第一页: 0,2

    //第二页: 3,5

    //第三页: 6,8

    //分页计算排序 ($page-1) * size ,($page) * size -1

    $ids = [];

    $len = $redis->lLen("article_page_ids");

    dd($len,'length');

    for ( $page = 1;$page<= ceil($len/$size);$page++ ){

        //返回分页数据的ID集合

        $ids = $redis->lrange("article_page_ids", ($page-1) * $size ,($page) * $size -1);

        // 根据主键查询数据 自定义字符串/数字来实现排序

        $sql[$page] = "select * from aritcle where id in(".implode(',',$ids).") order by field(id,".implode(',',$ids).")";

    }

    dd($sql,'sql');

}