zoukankan      html  css  js  c++  java
  • 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 "数据进队列完成\n";
    
    //可查看队列
    $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 "订阅频道等待消息推送\n";
    
    $redis->subscribe(['msg'],'callfun'); //msg 是频道名
    
    //回调
    function callfun($redis,$channel,$msg){
        print_r(['redis'=>$redis,'channel'=>$channel,'msg'=>$msg]);
    }
     
  • 相关阅读:
    [2010山东ACM省赛] Balloons(搜索)
    [2010山东ACM省赛] Greatest Number(数的组合+二分搜索)
    [ACM] hdu 1213 How Many Tables(并查集)
    C Shuffle Cards
    快速读入输出模板
    J Distance to Work
    E Sort String
    H Diff-prime Pairs
    A PACM Team
    区间 (interval)
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15454924.html
Copyright © 2011-2022 走看看