利用PHP使用Redis常见的使用场景有哪些
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要为大家展示了"利用PHP使用Redis常见的使用场景有哪些",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"利用PHP使用Redis常见的使用场景
千家信息网最后更新 2025年12月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安全错误
数据库的锁怎样保障安全
discuz 数据库地址
如何进入阿尔法法律数据库
工程连接不上oracle数据库
企业建立客户数据库
上海大学传输网络技术
实用小工具软件开发
内蒙古氯雷应用软件开发
网络安全法规定有下列行为
汉王考勤 数据库
数据库技术与应用实验二实验报告
太原蓝思达网络技术
sql 数据库复制技术
淮南物业管理软件开发定制
广州工业翼网络技术有限公司
移动软件开发简史
网络安全花边
郑州联宇网络技术
服务器一周重启一次好吗
学历云教育软件开发
服务器大致由什么组成
虎牙贱圣玩过的方舟服务器id
服务器安全狗防护验证页面
暗黑破坏神2如何连接服务器
软件开发女转会计
关于网络安全的英语词汇
照片管理系统数据库版
灾害数据库
ipad能数据库开发
秘密实验室诗星雨服务器插件
石林参考软件开发价格走势