网易首页 > 网易号 > 正文 申请入驻

7种最常见的Redis使用——PHP实战

0
分享至

Redis是使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的

一个开源的

API。

大家可以加入我们的交流学习君羊416344370。而本文主要介绍利用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('127.0.0.1', 6379); $strQueueName = 'Test_bihu_queue'; //进队列 $redis->rpush($strQueueName, json_encode(['uid' => 1,'name' => 'Job'])); $redis->rpush($strQueueName, json_encode(['uid' => 2,'name' => 'Tom'])); $redis->rpush($strQueueName, json_encode(['uid' => 3,'name' => 'John'])); echo "---- 进队列成功 ---- <br /><br />"; //查看队列 $strCount = $redis->lrange($strQueueName, 0, -1); echo "当前队列数据为: <br />"; print_r($strCount); //出队列 $redis->lpop($strQueueName); echo "<br /><br /> ---- 出队列成功 ---- <br /><br />"; //查看队列 $strCount = $redis->lrange($strQueueName, 0, -1); echo "当前队列数据为: <br />"; 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} ---- 频道消息推送成功~ <br/>"; $redis->close();//以下是 sub.php 文件内容 cli下运行 ini_set('default_socket_timeout', -1); $redis->connect('127.0.0.1', 6379); $strChannel = 'Test_bihu_channel'; //订阅 echo "---- 订阅{$strChannel}这个频道,等待消息推送...---- <br/><br/>"; $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('127.0.0.1', 6379); $strKey = 'Test_bihu_score'; //存储数据 $redis->zadd($strKey, '50', json_encode(['name' => 'Tom'])); $redis->zadd($strKey, '70', json_encode(['name' => 'John'])); $redis->zadd($strKey, '90', json_encode(['name' => 'Jerry'])); $redis->zadd($strKey, '30', json_encode(['name' => 'Job'])); $redis->zadd($strKey, '100', json_encode(['name' => 'LiMing'])); $dataOne = $redis->ZREVRANGE($strKey, 0, -1, true); echo "---- {$strKey}由大到小的排序 ---- <br /><br />"; print_r($dataOne); $dataTwo = $redis->ZRANGE($strKey, 0, -1, true); echo "<br /><br />---- {$strKey}由小到大的排序 ---- <br /><br />"; 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<br>'; echo 'do sth..<br>'; sleep(5); echo 'success<br>'; unlock($key); } else { //获取锁失败 echo 'request too frequently<br>'; }

简单事务的乐观锁实战

解释:乐观锁(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} ---- <br/><br/>"; $redis->watch($strKey); // 开启事务 $redis->multi(); //在这个时候新开了一个新会话执行 $redis->set($strKey,30); //新会话 echo "---- Current Age:{$age} ---- <br/><br/>"; //30 $redis->set($strKey,20); $redis->exec(); $age = $redis->get($strKey); echo "---- Current Age:{$age} ---- <br/><br/>"; //30 //当exec时候如果监视的key从调用watch后发生过变化,则整个事务会失败

交流学习君羊416344370。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
姆巴佩合同曝光!与皇马签约5年,年薪1500万,获80%肖像权

姆巴佩合同曝光!与皇马签约5年,年薪1500万,获80%肖像权

奥拜尔
2024-04-26 17:47:18
广东最强突破球员?沃特斯骑电动车被交警活捉 画面喜感

广东最强突破球员?沃特斯骑电动车被交警活捉 画面喜感

胖子喷球
2024-04-26 21:27:42
果然没谈拢,布林肯访华,大批外资撤离中国,美国反帮了普京大忙

果然没谈拢,布林肯访华,大批外资撤离中国,美国反帮了普京大忙

朝晖前哨
2024-04-26 09:59:31
王毅划下红线后,布林肯口风变了,离开中国前,见到中国领导人

王毅划下红线后,布林肯口风变了,离开中国前,见到中国领导人

有凤Talk
2024-04-26 18:32:38
众生相!湖人0-3陷入绝境,赛后詹姆斯直接离场,主场观众狂嘘

众生相!湖人0-3陷入绝境,赛后詹姆斯直接离场,主场观众狂嘘

天涯沦落人
2024-04-26 12:45:18
纪云浩当兵照被扒出,帽子引热议,果然不简单,父亲身份曝光

纪云浩当兵照被扒出,帽子引热议,果然不简单,父亲身份曝光

180°视角
2024-04-24 22:24:34
港媒:汇丰终止与香港家族办公室的合作

港媒:汇丰终止与香港家族办公室的合作

WEALTH财富管理
2024-04-26 14:01:28
美国FCC要求中国三大电信运营商60天后停止宽带服务

美国FCC要求中国三大电信运营商60天后停止宽带服务

北美商业电讯
2024-04-26 15:59:23
时隔135天首发!赵睿18+4+5复出最强表现 三分三连击引主帅欢呼

时隔135天首发!赵睿18+4+5复出最强表现 三分三连击引主帅欢呼

醉卧浮生
2024-04-26 21:38:25
贾跃亭,真他娘是个人才

贾跃亭,真他娘是个人才

大猫财经Pro
2024-04-26 16:54:35
段宇飞被查,广东卫健系统连续三任主官落马

段宇飞被查,广东卫健系统连续三任主官落马

鲁中晨报
2024-04-26 19:17:03
越南国会主席王庭惠辞职,“四驾马车”37天内再损一员

越南国会主席王庭惠辞职,“四驾马车”37天内再损一员

澎湃新闻
2024-04-26 20:56:28
噩耗!34岁网红珍珍去世,每天直播健身瘦45斤,知情人曝原因!

噩耗!34岁网红珍珍去世,每天直播健身瘦45斤,知情人曝原因!

花花lo先森
2024-04-26 10:51:04
下月访华,普京亲口说出这一计划,连送给中国领导人的礼物都想好了

下月访华,普京亲口说出这一计划,连送给中国领导人的礼物都想好了

上观新闻
2024-04-26 20:10:54
万达集团创始人王健林宣布退出公司并将全部股权转让给中国儒意

万达集团创始人王健林宣布退出公司并将全部股权转让给中国儒意

鹏飞深文
2024-04-22 12:19:28
一觉醒来,美国下一任总统已无悬念?63岁奥巴马出山,果然不简单

一觉醒来,美国下一任总统已无悬念?63岁奥巴马出山,果然不简单

乡野小珥
2024-04-26 17:53:09
没想到,曝王楠老公郭斌被限制消费,网友:难怪两天开2000公里

没想到,曝王楠老公郭斌被限制消费,网友:难怪两天开2000公里

尘语者
2024-04-26 15:21:16
越扒越深!干部阻拦春耕,纪云浩上边领导被挖出,曝更大的瓜

越扒越深!干部阻拦春耕,纪云浩上边领导被挖出,曝更大的瓜

180°视角
2024-04-26 15:41:15
60岁大爷每天用猪油炒菜,4年后体检,医生惊呼:你到底在吃些啥

60岁大爷每天用猪油炒菜,4年后体检,医生惊呼:你到底在吃些啥

荷兰豆爱健康
2024-04-26 17:08:12
痛心!43岁抗癌网红“东东”去世,死因是胃癌,曾是一名帅气医生

痛心!43岁抗癌网红“东东”去世,死因是胃癌,曾是一名帅气医生

180°视角
2024-04-26 18:10:21
2024-04-26 23:32:49
学编程C语言以及
学编程C语言以及
C语言学习等分享
74文章数 1445关注度
往期回顾 全部

科技要闻

车展观察|德系日系绝不能放弃中国市场

头条要闻

命案嫌疑人获不起诉 5年后新证据出现一审被判无期

头条要闻

命案嫌疑人获不起诉 5年后新证据出现一审被判无期

体育要闻

库里当选最佳关键球员 10项数据联盟第一

娱乐要闻

金靖回应不官宣恋情结婚的原因

财经要闻

贾跃亭,真他娘是个人才

汽车要闻

2024北京车展 比亚迪的自驱力让对手紧追猛赶

态度原创

手机
艺术
家居
亲子
公开课

手机要闻

高通骁龙X精英版最大功率接近100W 是苹果M3 Pro的两倍多

艺术要闻

画廊周北京迎来第八年, “漂留” 主题聚集 30 余家艺术机构与 40 场展览

家居要闻

光影之间 空间暖意打造生活律动

亲子要闻

儿童哮喘症状的五大特点微博健康说#健闻登顶计划# 儿科医生黄剑峰

公开课

睡前进食会让你发胖吗?

无障碍浏览 进入关怀版