laravel redis_thinkphp+redis实现秒杀,缓存等功能

秒杀是商城常见功能 php+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_redis
extension=php_igbinary.dll
extension=php_redis.dll

注意:extension=php_igbinary.dll一定要放在extension=php_redis.dll的前面,否则此扩展不会生效

5.重启Apache后,使用phpinfo查看扩展是否成功安装

v2-1db06125b5c83b5cc16b47756cb801d1_b.png

在config配置redis 我示例用的是thinkphp5.0

v2-f6bc6afb1fb2a06d27aed9298c86083b_b.png

然后在extend下新建module文件夹 创建Redis.php文件

<?php
/*** Created by PhpStorm.* User: lhl* Date: 2018/8/20* Time: 下午1:52*/namespace module;class Redis extends Redis
{public static function redis() {$con = new Redis();$con->connect(config('redis.host'), config('redis.port'), 5);return $con;}
}在thinkphp文件下的helper.php加入if (!function_exists('redis')) {/*** 获取容器对象实例* @return Container*/function redis(){return moduleRedis::redis();}
}然后就可以在控制器写redis缓存方法了  
//创建redis缓存
Cache::store('redis')->set(key, value);
//读取缓存
Cache::store('redis')->get(key);

秒杀的核心问题是在大并发的情况下不会超出库存的购买,这个就是处理的关键所以思路是第一步在秒杀类的先做一些基础的数据生成:
三张表做测试,分别是:商品表,日志表,订单表,

///秒杀入口

public function insva(){$id = input('id');//获取商品idif(!$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')]);}

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要戳这里PHP进阶架构师>>>实战视频、大厂面试文档免费获取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

freemarker ftl模板_效率提升百分之四十,AS模板也太好用了吧

点击蓝字 轻松关注CV 工程师你好&#xff0c;以下内容会让你感觉到不适&#xff0c;慎入&#xff01;在平时的开发工作中&#xff0c;我们经常将一个地方的代码&#xff0c;复制粘贴到另外一个地方&#xff0c;俗称搬砖&#xff0c;搬砖搬多了&#xff0c;作为一个资深的挨踢民…

python for循环连续输入五个成绩判断等级_Python基础(1)——输入输出/循环/条件判断/基本数据类型...

一、编程语言 1、 编译型语言&#xff1a;先编译&#xff0c;再执行 &#xff08;先编译成二进制&#xff09; 举例&#xff1a;英文书翻译成中文再看 C、C、C# 2、解释型语言&#xff1a;一边执行一边编译 举例&#xff1a;英文书找个翻译&#xff0c;它翻译一行你听一行 php、…

笔记本计算机无法开机怎么办,笔记本开机没反应,教您笔记本电脑开不了机怎么处理...

笔记本电脑使用的时间长了&#xff0c;都是会出现一些小故障&#xff0c;大毛病什么的&#xff0c;比如说像开机后&#xff0c;电源指示灯亮&#xff0c;但是电脑的显示器屏就是没有反应。这个问题让用户慌了神&#xff0c;为此&#xff0c;那笔记本电脑开不了机怎么解决&#…

离群点检测方法_干货 :时间序列异常检测

异常检测(Anomaly detection)是目前时序数据分析最成熟的应用之一,定义是从正常的时间序列中识别不正常的事件或行为的过程。有效的异常检测被广泛用于现实世界的很多领域,例如量化交易,网络安全检测、自动驾驶汽车和大型工业设备的日常维护。以在轨航天器为例,由于航天器昂…

centos6安装mysql并远程连接_MySQL5.7数据库安装与远程连接

系统&#xff1a;Redhat Linux 7.7MySQL版本&#xff1a;5.71. MySQL下载o 登录网站&#xff1a;https://dev.mysql.com/downloads/mysql/o 选择合适版本与系统Select version&#xff1a;5.7.31Select operating system&#xff1a;Red Hat Enterprise LinuxSelect OS Version…

python小代码_Python爬虫入门有意思的小长代码

一段有意思的代码&#xff0c;有兴趣的可以研究研究。 需求 用户收到短信如&#xff1a;购买了电影票或者火车票机票之类的事件。然后app读取短信&#xff0c;解析短信&#xff0c;获取时间地点&#xff0c;然后后台自动建立一个备忘录&#xff0c;在事件开始前1小时提醒用户。…

小学生 计算机编程 教程,面向小学生的C ++有趣编程(第一卷)配置教学资源课件完整版...

难度适中&#xff0c;易学易教的“面向小学生的C 趣味编程”教科书是小学信息学教学的重要组成部分.选择80多个接近小学生学习生活的例子&#xff0c;结合小学生的认知规律&#xff0c;激发孩子的兴趣&#xff0c;关注程序&#xff0c;适当削弱语法.使用流程图来阐明思想&#…

python怎么用for循环找出最大值_如何获取Python简单for循环索引

如何获取Python简单for循环索引 这篇文章主要介绍了如何获取Python简单for循环索引,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Python的for循环相比其他语言而言更加简单&#xff0c;比如经常会有如下这样类…

2018年江苏省计算机小高考,江苏2018年小高考成绩查询系统网站入口:江苏省教育考试院...

【导语】无忧考网从江苏省教育考试院获悉&#xff0c;江苏2018年小高考成绩查询系统网站入口将于4月9日上午正式开通&#xff01;江苏省教育考试院关于发布江苏省2018年普通高中学业水平测试必修科目考试成绩的通告江苏省2018年普通高中学业水平测试必修科目考试成绩拟定于4月9…

列注释_【EXCEL检查问题】:如何快速检查并删除EXCEL中隐藏的工作表、行、列等信息...

前注&#xff1a;本案例是以EXCEL2016为示范软件&#xff0c;各版本的部分功能和路径可能不同在EXCEL使用过程中&#xff0c;你是否遇到过某一列的公式怎么修改都报错的情况&#xff1f;你是否遇到过一个只有区区几行数据的表格&#xff0c;却占用了好几百KB甚至好几M的空间呢&…

python输入的字符串转换为对应的数字类型_Python合集之Python运算符(四)

在上一节的合集中&#xff0c;我们了解了Python运算符中的位运算符的相关知识&#xff0c;本节我们将进一步了解一下Python运算符中运算符的优先级级基础的输入输出语法的相关知识。1. 运算符优先级Python运算符的运算规则是&#xff1a;优先级高的运算先执行&#xff0c;优先级…

服务器选购seo优化规则,需要做SEO的网站,购买服务器请注意六点

企业为了能在市场中争抢到一席之地都在对网站做各种优化&#xff0c;期望通过互联网&#xff0c;在最大程度上提高知名度&#xff0c;吸引客户。企业搭建网站一般都会考虑网站上线之后的优化问题&#xff0c;而服务器对于网站SEO的优化有很大的影响。网站想要做好SEO优化&#…

linux unix域socket_python3从零学习-5.8.1、socket—底层网络接口

源代码: Lib/socket.py这个模块提供了访问BSD*套接字*的接口。在所有现代Unix系统、Windows、macOS和其他一些平台上可用。这个Python接口是用Python的面向对象风格对Unix系统调用和套接字库接口的直译&#xff1a;函数 socket() 返回一个 套接字对象 &#xff0c;其方法是对各…

freetype字体位图转距离场_那些火遍ins的字体小技巧,不看你就亏了

转载自版式设计很简单(ID&#xff1a;format_design)今天分享一个台湾设计师施博瀚的学习教程&#xff0c;看了以后&#xff0c;你会惊呼&#xff0c;原来这个是用AI做出来的&#xff1f;Ps.软件截图跟我们有所差别&#xff0c;以文字说明为主。www.instagram.com/bohanshih快速…

已知三角形三点坐标求角度_细心研磨椭圆焦点三角形,这肯定是最全的解释。...

点击上方蓝字关注我因为月考赶上运动会&#xff0c;继国庆之后&#xff0c;感觉又放了一个小长假。原本身体是很愿意的&#xff0c;可是&#xff0c;刚讲的解析几何突然被中断了&#xff0c;思想上还真是有点矛盾。因为&#xff0c;想了想两天后该讲些什么&#xff0c;脑中却一…

社会计算机比赛,哈尔滨工业大学社会计算与信息检索研究中心 – 理解语言,认知社会 » IR-Lab参加计算机学院“光熙杯”篮球赛...

IR-Lab参加计算机学院“光熙杯”篮球赛2014年04月18日迎首战师生一心&#xff0c;IR队旗开得胜 5月11日是“光熙杯”篮球赛的第二个比赛日&#xff0c;IR队迎来了小组赛的首场比赛&#xff0c;对阵空间计算队。比赛开始阶段&#xff0c;双方均略显紧张&#xff0c;然而随着比赛…

12v小型电机型号大全_电机型号参数大全

电动机型号是便于使用、设计、制造等部门进行业务联系和简化技术文件中产品名称、规格、型式等叙述而引用的一种代号。下面为大家介绍电动机型号含义等信息。一、电动机型号组成及含义由电机类型代号、电机特点代号、设计序号和励磁方式代号等四个小节顺序组成。1、类型代号是表…

easycode不推荐使用_为什么?mysql不推荐使用uuid或者雪花id作为主键?

前言&#xff1a;在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处&#xff1f;本篇博客我们就来分析这个问题,探讨一下内部的…

netpref 使用_使用PerfView监测.NET程序性能(转发)

原文&#xff1a;前言&#xff1a;在日常项目开发中&#xff0c;我们时不时会遇到程序【占用了很高CPU的】情况&#xff0c;可能是程序里某些未经优化的代码或者Bug&#xff0c;或者是程序运行压力太大。无论是什么原因&#xff0c;我们总希望能看到到底是【哪个方法占用了如此…

ubuntu 虚拟机 串口 socket_上篇 | 虚拟机Ubuntu向开发板AMR传送文件

让技术支撑梦想点击上方蓝字可以关注我们哦首先把Ubuntu向开发板发送文件的流程做一下笔记&#xff0c;下一篇笔记就记录开发板如何接受文件....上一篇笔记&#xff1a;Makefile文件的编写规则及实例有很多小伙伴看不懂术语&#xff0c;所以这次小浩用口语方式表达这次笔记&…