• redis常见使用场景下PHP实现


    基于redis字符串string类型的简单缓存实现

    <?php
    //简单字符串缓存
    
    $redis = new Redis();
    $redis->connect('127.0.0.1',6379);
    
    //缓存数据
    $redis->set('cache_key',json_encode(['data'=>'这是缓存数据']));
    
    //获取缓存数据
    $data = $redis->get('cache_key');
    print_r(json_decode($data,true));

    基于redis列表list类型的简单队列实现

    <?php
    
    //利用列表list实现简单队列
    $redis = new Redis();
    $redis->connect('localhost',6379);
    
    //进队列
    $redis->rpush('queue_name',json_encode(['user_id'=>5]));
    $redis->rpush('queue_name',json_encode(['user_id'=>6]));
    $redis->rpush('queue_name',json_encode(['user_id'=>7]));
    
    echo "数据进队列完成
    ";
    
    //可查看队列
    $res = $redis->lrange('queue_name',0,1000);
    print_r($res);
    
    //出队列
    $redis->lpop('queue_name');
    
    //查看队列
    $res = $redis->lrange('queue_name',0,1000);
    print_r($res);

    基于redis事务的乐观锁实现

    <?php
    
    //实现乐观锁机制
    
    $redis = new Redis();
    $redis->connect('localhost',6379);
    
    //监视count的值
    $redis->watch('count');
    
    //开启事务
    $redis->multi();
    
    //操作count
    $redis->set('count',time());
    
    //--------------------------------
    //模拟并发下其他进程对count的操作
    //redis-cli 执行 $redis->set('count','is simulate');
    sleep(10);
    //--------------------------------
    
    //提交事务
    $res = $redis->exec();
    
    if($res){
        echo 'sucesss';
        return;
    }else{
        echo 'fail';
    }

    基于redis的发布订阅实现

    发布publish.php

    <?php
    //发布
    
    $redis = new Redis();
    $redis->connect('localhost',6379);
    
    $redis->publish('msg','来自xxx频道的消息推送');
    echo '消息推送成功';
    
    $redis->close();

    订阅subscribe.php

    <?php
    //订阅
    
    //ini_set('default_socket_timeout',-1);
    
    $redis = new Redis();
    $redis->pconnect('localhost',6379);
    
    //订阅
    echo "订阅频道等待消息推送
    ";
    
    $redis->subscribe(['msg'],'callfun'); //msg 是频道名
    
    //回调
    function callfun($redis,$channel,$msg){
        print_r(['redis'=>$redis,'channel'=>$channel,'msg'=>$msg]);
    }
     
  • 相关阅读:
    赠与今年的大学毕业生(胡适先生30年代的文章,仍不过时)
    统一管理磁盘上的开源代码
    生成sqlite导入库的做法
    提高二维矢量绘图效率之一般做法
    boost库命名规则的优点
    如何把腾讯微博挂到CSDN博客上
    fatal error C1902 Program database manager mismatch; please check your installation问题的解决
    智能指针变量做函数参数的一个值得注意的地方
    PC会消亡吗?
    软件制造问题的微软答案
  • 原文地址:https://www.cnblogs.com/lxwphp/p/7728150.html
Copyright © 2020-2023  润新知