<?php
$id = 1;
$pdo=new PDO("mysql:host=127.0.0.1;dbname=test","root","root");
$pdo->exec("UPDATE `ms_goods` SET `nums`=`nums`-1 WHERE id=$id ");
echo "miao sha success";
// 队列 链表 list :array
// array:先进后出
// list: 先进先出
?>
 <?php
// 库存复数 : 并发量足够大
$r=new Redis(); $r->connect("127.0.0.1",6379); $res=$r->rpop("mslist"); //right 右:出队 ---> if(!$res){
echo "out of print";
}else{
$id = 1;
$pdo=new PDO("mysql:host=127.0.0.1;dbname=test","root","root");
$pdo->exec("UPDATE `ms_goods` SET `nums`=`nums`-1 WHERE id=$id ");
echo "miao sha success";
} // 队列 链表 list :array
// array:先进后出
// list: 先进先出
?>
 <?php
$id = 1; // 活动id
$pdo=new PDO("mysql:host=127.0.0.1;dbname=test","root","root");
$num = $pdo->query("SELECT * FROM `ms_goods` WHERE id = $id ")->fetch();
$nums = $num['nums']; //库存 // 库存复数 : 并发量足够大
$r=new Redis(); $r->connect("127.0.0.1",6379); for($i=1;$i<=$nums;$i++){
$r->lpush("mslist","$i"); //left 左:入队 ---->
} echo "[nums:{$nums}] list: miaosha start ...";
?>
 <?php
$id = 1;
$pdo=new PDO("mysql:host=127.0.0.1;dbname=test","root","root");
$res=$pdo->query("SELECT * FROM `ms_goods` where id = $id")->fetch(PDO::FETCH_ASSOC);
?> <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>秒杀功能</title>
</head>
<body> <center>
<h1>抢购活动,热卖,促销</h1>
<div style="width:320px;height:160px;border:1px solid #ccc;">
<img src="tel_5.jpg" />
</div>
<p>库存:<?php echo $res['nums']; ?></p>
<button id="msbtn">秒杀</button>
</center> </body>
</html> <script type="text/javascript">
document.getElementById('msbtn').onclick=function(){
window.location.href = 'doms.php';
}
</script>

使用Redis實現秒殺功能的更多相关文章

  1. ASP.NET MVC 4.0 学习2-留言板實現

    新增專案實現留言板功能,瞭解MVC的運行機制 1,新增專案   2,添加數據庫文件message.mdf   Ctrl+W,L 打開資料庫連接,添加存放留言的Atricle表 添加字段,後點擊&quo ...

  2. Neo4j中實現自定義中文全文索引

    資料庫檢索效率時,一般首要優化途徑是從索引入手,然後根據需求再考慮更復雜的負載均衡.讀寫分離和分散式水平/垂直分庫/表等手段:索引通過資訊冗餘來提高檢索效率,其以空間換時間並會降低資料寫入的效率,因此 ...

  3. Jquery scrollTop animate 實現動態滾動到頁面頂部

    這個方法之前都是用的錨點實現的,但是效果僵硬,動感不足! 之後參考了一些網站,發現都是用的js,於是自己想到用jquery 來做一個插件也來實現以下這個小功能. $.fn.backTop = func ...

  4. Redis服务搭建与基础功能示例

    一.Redis简介 Redis是一个非关系型远程内存数据库,它也是一个Key-value模型的数据库.Redis支持5种数据类型(string.list.set.sorted set.hash),可以 ...

  5. 简单实现Redis缓存中的排序功能

    1.在实现缓存排序功能之前,必须先明白这一功能的合理性.不妨思考一下,既然可以在数据库中排序,为什么还要把排序功能放在缓存中实现呢?这里简单总结了两个原因:首先,排序会增加数据库的负载,难以支撑高并发 ...

  6. linux下c++實現簡單的生產者消費者隊列模式

    引言 生產者消費者是一個經典的模式 利用生產者,消費者和緩衝區降低了生產者和消費者之間的的耦合度 便於對生產者和消費者的修改 下面記錄的是一個經典的單一生產者多消費者的模式 設計思路 以隊列做為緩衝區 ...

  7. 【springboot】【redis】springboot+redis实现发布订阅功能,实现redis的消息队列的功能

    springboot+redis实现发布订阅功能,实现redis的消息队列的功能 参考:https://www.cnblogs.com/cx987514451/p/9529611.html 思考一个问 ...

  8. redis(四)--简单实现Redis缓存中的排序功能

    在实现缓存排序功能之前,必须先明白这一功能的合理性.不妨思考一下,既然可以在数据库中排序,为什么还要把排序功能放在缓存中实现呢?这里简单总结了两个原因:首先,排序会增加数据库的负载,难以支撑高并发的应 ...

  9. redis 实现发布订阅的功能

    redis 除了作为缓存的功能外还可以用作消息中间件的功能,这片博客主要是介绍一下 redis 整合spring 实现消息的发布和订阅功能: 1:redis依赖,依赖两个包,redis 包, spri ...

随机推荐

  1. jQuery属性操作之类样式操作

    类样式的操作:指对DOM属性className进行添加.移除操作.比如addClass().removeClass().toggleClass(). 1. addClass() 1.1 概述 $(se ...

  2. 记一次Cloudera中页面监控失效问题

    因为做了cdh的迁移,启动后所有服务都是正常执行,不影响操作,但是尴尬的是,页面上的图表监控不见了 这种情况的根本原因就是: Host Monitor和Service Monitor服务失效! 解决: ...

  3. Git与Repo 的使用

    一.Linux常用命令 pwd           用于显示工作目录,执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称. chmod      用来变更文件或目录的权限. >      ...

  4. Linux 下运行 class 文件

    1. 基本命令 java  -cp  searchDir  classFile -cp  searchDir : 指定从该目录搜索 class 文件 classFile :类路径(不包含 .class ...

  5. TCP连接建立 之 同时打开

    假设两台设备双方均发送syn给对端,在发送syn之后状态处于SYN_SENT状态,此时双方均收到对端的发来的syn,则立即进入SYN_RECV状态,并且都向对端回复syn+ack,在收到syn+ack ...

  6. 阿里云服务器yum源更新问题

    阿里云官网也给出了yum卸载重装以及修改源为阿里云内网的文档.步骤这里就不说了,可点击下面的链接进行参考 https://help.aliyun.com/knowledge_detail/670864 ...

  7. 基于XML的AOP配置(2)-环绕通知

    配置方式: <aop:config> <aop:pointcut expression="execution(* com.itheima.service.impl.*.*( ...

  8. 【软件工程】Alpha冲刺(1/6)

    链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 了解了反馈机制的实现原理 确定好算法的框架 对接口的规范化进行学习 展示Git ...

  9. PM2工作原理

    PM2工作原理 要理解pm2就要理解god和santan的关系,god和santan的关系就相当于盖娅和黑底斯在pm2中的01世界中,每一行代码每一个字节都安静的工作god就是Daemon进程 守护进 ...

  10. vue 登录路由判断

    router.beforeEach((to, from, next) => { // alert(sessionStorage.getItem('accessToken')) // consol ...