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]);
}

猜你喜欢

转载自blog.csdn.net/wei349914638/article/details/80737023