利用PHP使用Redis常见的使用场景有哪些
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要为大家展示了"利用PHP使用Redis常见的使用场景有哪些",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"利用PHP使用Redis常见的使用场景
千家信息网最后更新 2026年11月02日利用PHP使用Redis常见的使用场景有哪些
这篇文章主要为大家展示了"利用PHP使用Redis常见的使用场景有哪些",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"利用PHP使用Redis常见的使用场景有哪些"这篇文章吧。
简单字符串缓存实战
$redis->connect('127.0.0.1', 6379);$strCacheKey = 'Test_bihu'; //SET 应用 $arrCacheData = [ 'name' => 'job', 'sex' => '男', 'age' => '30' ];$redis->set($strCacheKey, json_encode($arrCacheData));$redis->expire($strCacheKey, 30); # 设置30秒后过期 $json_data = $redis->get($strCacheKey);$data = json_decode($json_data);print_r($data->age); //输出数据 //HSET 应用 $arrWebSite = [ 'google' => [ 'google.com', 'google.com.hk' ],];$redis->hSet($strCacheKey, 'google', json_encode($arrWebSite['google']));$json_data = $redis->hGet($strCacheKey, 'google');$data = json_decode($json_data);print_r($data); //输出数据简单队列实战
$redis->connect(, );$strQueueName = ; $redis->rpush($strQueueName, json_encode([ => , => ]));$redis->rpush($strQueueName, json_encode([ => , => ]));$redis->rpush($strQueueName, json_encode([ => , => ])); ; $strCount = $redis->lrange($strQueueName, , ); ;print_r($strCount); $redis->lpop($strQueueName); ; $strCount = $redis->lrange($strQueueName, , ); ;print_r($strCount);
简单发布订阅实战
//以下是 pub.php 文件的内容 cli下运行 ini_set('default_socket_timeout', -1);$redis->connect('127.0.0.1', 6379);$strChannel = 'Test_bihu_channel'; //发布 $redis->publish($strChannel, "来自{$strChannel}频道的推送"); echo "---- {$strChannel} ---- 频道消息推送成功~
";$redis->close();//以下是 sub.php 文件内容 cli下运行 ini_set('default_socket_timeout', -1);$redis->connect('127.0.0.1', 6379);$strChannel = 'Test_bihu_channel'; //订阅 echo "---- 订阅{$strChannel}这个频道,等待消息推送...----
";$redis->subscribe([$strChannel], 'callBackFun'); function callBackFun($redis, $channel, $msg) { print_r([ 'redis' => $redis, 'channel' => $channel, 'msg' => $msg ]);}简单计数器实战
$redis->connect('127.0.0.1', 6379);$strKey = 'Test_bihu_comments'; //设置初始值 $redis->set($strKey, 0);$redis->INCR($strKey); //+1 $redis->INCR($strKey); //+1 $redis->INCR($strKey); //+1 $strNowCount = $redis->get($strKey); echo "---- 当前数量为{$strNowCount}。 ---- ";排行榜实战
$redis->connect(, );$strKey = ; $redis->zadd($strKey, , json_encode([ => ]));$redis->zadd($strKey, , json_encode([ => ]));$redis->zadd($strKey, , json_encode([ => ]));$redis->zadd($strKey, , json_encode([ => ]));$redis->zadd($strKey, , json_encode([ => ]));$dataOne = $redis->ZREVRANGE($strKey, , , ); ;print_r($dataOne);$dataTwo = $redis->ZRANGE($strKey, , , ); ;print_r($dataTwo);
简单字符串悲观锁实战
解释:悲观锁(Pessimistic Lock), 顾名思义,就是很悲观。
每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁。
场景:如果项目中使用了缓存且对缓存设置了超时时间。
当并发量比较大的时候,如果没有锁机制,那么缓存过期的瞬间,
大量并发请求会穿透缓存直接查询数据库,造成雪崩效应。
/** * 获取锁 * @param String $key 锁标识 * @param Int $expire 锁过期时间 * @return Boolean */ public function lock($key = '', $expire = 5) { $is_lock = $this->_redis->setnx($key, time()+$expire); //不能获取锁 if(!$is_lock){ //判断锁是否过期 $lock_time = $this->_redis->get($key); //锁已过期,删除锁,重新获取 if (time() > $lock_time) { unlock($key); $is_lock = $this->_redis->setnx($key, time() + $expire); } } return $is_lock? true : false;} /** * 释放锁 * @param String $key 锁标识 * @return Boolean */ public function unlock($key = ''){ return $this->_redis->del($key);} // 定义锁标识 $key = 'Test_bihu_lock'; // 获取锁 $is_lock = lock($key, 10); if ($is_lock) { echo 'get lock success
'; echo 'do sth..
'; sleep(5); echo 'success
'; unlock($key);} else { //获取锁失败 echo 'request too frequently
';}简单事务的乐观锁实战
解释:乐观锁(Optimistic Lock), 顾名思义,就是很乐观。
每次去拿数据的时候都认为别人不会修改,所以不会上锁。
watch命令会监视给定的key,当exec时候如果监视的key从调用watch后发生过变化,则整个事务会失败。
也可以调用watch多次监视多个key。这样就可以对指定的key加乐观锁了。
注意watch的key是对整个连接有效的,事务也一样。
如果连接断开,监视和事务都会被自动清除。
当然了exec,discard,unwatch命令都会清除连接中的所有监视。
$strKey = 'Test_bihu_age';$redis->set($strKey,10);$age = $redis->get($strKey); echo "---- Current Age:{$age} ----
";$redis->watch($strKey); // 开启事务 $redis->multi(); //在这个时候新开了一个新会话执行 $redis->set($strKey,30); //新会话 echo "---- Current Age:{$age} ----
"; //30 $redis->set($strKey,20);$redis->exec();$age = $redis->get($strKey); echo "---- Current Age:{$age} ----
"; //30 //当exec时候如果监视的key从调用watch后发生过变化,则整个事务会失败以上是"利用PHP使用Redis常见的使用场景有哪些"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
实战
时候
事务
数据
监视
内容
缓存
场景
乐观
频道
常见
悲观
标识
篇文章
推送
订阅
顾名思义
命令
字符
字符串
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网最新的科技
互联网下的科技发展
互联网金融 金融科技
碳银互联网科技
互联网科技视频
广州凡科互联网科技
互联网科技大会
互联网科技宣传片
人人互联网科技是培训
金融科技和互联网金融
互联网为啥属于高科技
互联网软件和科技
科技互联网的核心竞争力
湖北辰鑫科技互联网
互联网金融运营模式中的金融科技
福仕德教育科技互联网
银川新华互联网科技学校原画
安徽零酒互联网科技有限公司
广西泛欧互联网科技有限公司
安徽九吞吴互联网科技有限公司
互联网科技海报
互联网金融科技平台
西安互联网科技公司
湖南洣水互联网科技有限公司扣款
全球顶尖互联网科技公司
郑州欣桑互联网科技有限公司
湖北辰鑫科技互联网
科技互联网企业在行动
六子台科技互联网展会
互联网 科技节活动 微视频大赛