thinkphp中怎么利用redis实现秒杀缓存功能
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,thinkphp中怎么利用redis实现秒杀缓存功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1,安装redis,根
千家信息网最后更新 2025年02月07日thinkphp中怎么利用redis实现秒杀缓存功能
thinkphp中怎么利用redis实现秒杀缓存功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
1,安装redis,根据自己的php版本安装对应的redis扩展
首先查看phpinfo();php环境信息
2,下载redis
https://windows.php.net/downloads/pecl/snaps/redis/https://windows.php.net/downloads/pecl/releases/igbinary/
一定要确认下载版本是否和php对应
3.解压缩后,将php_redis.dll和php_redis.pdb拷贝至php的ext目录下
4.修改php.ini,(PS:此php.ini文件是在Apache目录)在该文件中加入:
; php_redisextension=php_igbinary.dllextension=php_redis.dll
注意:extension=php_igbinary.dll一定要放在extension=php_redis.dll的前面,否则此扩展不会生效
5.重启Apache后,使用phpinfo查看扩展是否成功安装
在config配置redis 我示例用的是thinkphp5.0
然后在extend下新建module文件夹 创建Redis.php文件
connect(config('redis.host'), config('redis.port'), 5); return $con; }}在thinkphp文件下的helper.php加入if (!function_exists('redis')) { /** * 获取容器对象实例 * @return Container */ function redis() { return \module\Redis::redis(); }}然后就可以在控制器写redis缓存方法了 //创建redis缓存\Cache::store('redis')->set(key, value);//读取缓存\Cache::store('redis')->get(key);
秒杀的核心问题是在大并发的情况下不会超出库存的购买,这个就是处理的关键所以思路是第一步在秒杀类的先做一些基础的数据生成:
三张表做测试,分别是:商品表,日志表,订单表,
///秒杀入口
public function insva(){ $id = input('id');//获取商品id if(!$id){ return $this->insertlog(0);//记录失败日志 } $redis = $this->redis();//接入redis $count = $redis->reduceStock('goods_stock');//减少库存,返回剩余库存 if($count ==0){ $this->insertlog(0);//记录秒杀失败日志 return false; }else{ $order = $this->build_order_no();//随机生成订单号 $status = 1; $data = db('goods')->where('id',$id)->find(); if (!$data){ return $this->insertlog(0);//商品不存在 } $res = db('order')->insert(['order_sn'=>$order,'uid'=>$this->user_id,'goods_id'=>$id]);//插入订单 $stock = db('goods')->where('id',$id)->setDec('count');//减少库存 if($stock){ $this->insertlog();//记录成功日志 }else{ $this->insertlog(0);//记录秒杀失败日志 } } } // 将商品库存存入队列 public function redisinit(){ $store=50; // 库存50 $redis=$this->redis(); //接入redis $redis->del('goods_store'); // 删除库存列表 $res=$redis->llen('goods_store'); //返回库存长度,这里已经是0 $count=$store-$res; for($i=0;$i<$count;$i++){ $redis->lpush('goods_store',1); //列表推进50个,模拟50个商品库存 } } //生成唯一订单 function build_order_no(){ return date('ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8); } // 记录日志 状态1成功 0失败 function insertlog($status=1){ return Db::name("ab_log")->insertGetId(["count"=>1,"status"=>$status,"addtime"=>date('Y-m-d H:i:s')]); }
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
库存
日志
商品
文件
缓存
订单
成功
生成
是在
版本
目录
帮助
接入
功能
清楚
关键
内容
基础
实例
容器
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
oracle数据库的好处
实施网络安全战略规划
西方核心网络技术
吉林加工软件开发包括哪些
目录数据库类型
小学国旗下讲话网络安全
高频彩缩水软件开发网
bmp 数据库图片
广州系统软件开发正规平台
网络安全模式都进不去怎么办
上海分布式服务器排名
软件开发学校双休
mysql数据库单表性能
车上服务器囊
电信网络安全主题班会
洛阳灵睿网络技术有限公司待遇
网络安全高手联系方式
旅业系统数据库连接无效
16g内存16核的服务器
存货监管软件开发定制
某市网络安全工作计划
oracle数据库的好处
温州通信网络技术服务
复制数据库表到另一数据库
软件开发性能的测试研究
车上服务器囊
西宁社区团购软件开发价格
comodo网络安全套装
网络安全事故处罚通知
求职网java软件开发