page contents

swoole2010期 第二次课课堂笔记1 redis string 应用案例

plum 发布于 2021-01-07 17:39
阅读 1168
收藏 1
分类:数据库

//链接Redis

$redis = new Redis();

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

//基础操作

if(0){   

     //清空库

    $redis->flushAll(); // 删除所有数据库

    $redis->flushDB(); //删除当前数据库

    $redis->set("name", "kongling");  //保存 K-V 键值对字符串   

    dd($redis->get("name"), "get key:name");  //获取 key:name 的value值  

    // $redis->Mget('name');   //批量读取keys    

    $redis->type("name");  //判断key 的类型 

    $redis->set("name", "sixstar");    //修改 value 值 /直接覆盖

    //修改/替换 value 部分 值

    $redis->setRange("name", 3, "fire"); //把 sixstar 修改为 sixfire

    dd($redis->get("name"), '把 sixstar 修改为 sixfire');

  

    $redis->getrange("name", 0, 5);   //截取字符串长度


    //判断key 是否存在,如果存在不修改,如果不存在新增  赋值判断原值是否存在,存在不赋值,返回0;不存在才赋值,返回1;命令setnx

    $redis->setnx("name", "hello world");

    //设置key 生存时间

    $redis->set("zoon", "dog");

    $redis->expire("zoon", 20); //单位 秒

    $redis->setex("botany", 50, "flower"); //单位 秒

    $redis->psetex("botany", 50000, "fruits"); //单位 毫秒

    //获取key 的生存时间

    $redis->ttl("zoon"); //单位 秒

    $redis->pttl("botany"); //单位 毫秒

    //mset 同时设置多个kv键值对

    $arr = [

        "dog_name" => "小花",

        "cat_name" => "小毛",

        "fish_name" => "小飞",

    ];

    $redis->mset($arr);

    $redis->msetnx($arr); // msetnx 为原子性,判断如果有一个存在,全部都不设置


    //给 key 尾部追加字符串

    $redis->append("name", "is veally good");


    // 获取原有value值的同时写入新的value值

    $redis->getset("name", "veally goods");


    // redis数据加法计算命令incr,incrby,数据加法运算,incr为+1内置运算,incrby为+n自设n运算

    $redis->incr("count");

    $redis->incrby("num", 10);


    //redis数据减法计算命令decr,decrby, 数据减法运算,decr为-1内置运算,decrby为减n自设n运算

    // $redis->set("count", 10);

    dd($redis->decr("count"), 'decr("count")');

    $redis->decrby("num", 5);


    //获取string长度的命令strlen

    $redis->strlen("name");


    //删除key

    $redis->del("name");

   

}

/*

 * string 应用场景

 * session 分布式集群服务器 登录同步

 * 配置服务器的 PHP 的session 存储到 Redis中去

 * 具体操作 :略

 * */


/*

 * string 应用场景

 * Inc incrBy decr decrBy 计数器

 * */

if(0){

    $redis->incr("count"); //每次自动加一

    $redis->incrBy("num",3);//每次自动加 自定义数值


    $redis->decr("count"); //每次自动减一

    $redis->decrBy("num",3);//每次自动减 自定义数值

}

/*

 * 请求拦截

 * 短信发送

 * 5分钟内最多发送5次

 * */

if(1){

//    $redis->flushAll();

    $phone = "130****1418";

    $key = "phone:".$phone;

    $redis->exists($key) ? $redis->incr($key) : $redis->setex($key,30,1)  ;

   /* if(!$redis->exists($key)  ){

        $redis->setex($key,30,1);

        dd($redis->get($key),"count ");

    }else{

        dd("count incr ");

        $redis->incr($key);

    }*/

    $count = $redis->get($key);

    if($count>5){

        exit("对不起,您发送次数太过频繁,请稍后再发送");

    }

    //to do send Phone Msg

    dd($count,"to do send Phone Msg");

}