利用PHP使用Redis常见的使用场景有哪些
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章主要为大家展示了"利用PHP使用Redis常见的使用场景有哪些",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"利用PHP使用Redis常见的使用场景
千家信息网最后更新 2025年01月31日利用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安全错误
数据库的锁怎样保障安全
在售最强服务器cpu
fdc机房服务器
赛门铁克一体机备份数据库
网络技术专业就业率
土拨鼠数据库
服务器cdn加速
阿里云服务器系统选择
我的世界服务器被管理员拆房子
达梦数据库使用教程电子书下载
网络技术年终述职报告
数据库 博客园
你我共同守护网络安全团日活动
初中毕业学网络技术去哪学
商务局的网络技术岗位做什么
天戏网络技术有限公司
成都泛普软件开发公司
大学网络安全最新案例
w10服务器怎么样
广州质量网络技术开发服务价格
慈溪计算机软件开发项目
陕西铭尚宇网络技术有限公司
学校机房服务器系统安装教程
服务器管理口如何登陆
平台网络安全保障
出租房数据库怎么设计
网络安全宣传大使是什么职位
基于主机的网络安全检测
计算机网络技术通讯网络方向
信息激增数据库凸显
网络技术思路