參考**
步驟
1 開啟redis服務 到redis目錄,shift + 右鍵,開啟命令列 .\redis-cli.exe -h 127.0.0.1 -p 6379
.\redis-server.exe redis.windows.conf
2 安裝redis擴充套件
3 連線
e:\phpstudy2018\phptutorial\apache\bin>ab -n 800 -c 800 執行
第1種 參照
<?php
use think\controller;
use think\session;
use think\db;
use think\request;
use think\cache\driver\redis;
// store商品表 order訂單表 log日誌表
// 把庫存數量放入了good_number裡,這個redis的名字,然後pop的時候,判斷這個redis的長度來判斷是否秒殺結束
class reedis extends controller
echo $redis->llen('goods_number');
}//模擬下單操作
//下單前判斷redis佇列庫存量
function order()
if( ($good_info['number'] - $number) <= 0)
//生成訂單
$order_sn=$this->build_order_no();
$data = array();
$data['order_sn'] = $order_sn;
$data['user_id'] = $user_id;
$data['goods_id'] = $goods_id;
$data['sku_id'] = $sku_id;
$data['number'] = $number;
$data['price'] = $price;
$order_rs = db::name('order')->insert($data);
//庫存減少
$wheres['sku_id'] = $sku_id;
$store_rs = db::name('store')->where($wheres)->setdec('number',$number);
if($store_rs)else
} //生成唯一訂單號
function build_order_no()
//記錄日誌
function insertlog($event,$type=0)
}
初始store 表
程式執行,呼叫的 order 方法
第2種
<?php
use think\controller;
use think\session;
use think\db;
use think\request;
use think\cache\driver\redis;
class reedis extends controller
else
} }
}
第3種
<?php
use think\controller;
use think\session;
use think\db;
use think\request;
use think\cache\driver\redis;
class reedis extends controller
else
$user_list = $redis->lrange($redis_name,0,20);
var_dump($user_list);//可以檢視list的內容
}else
$redis->close();}}
PHP 通過redis和mysql實現秒殺業務
db mysqldb getinstance info db fetchrow select from goods where goods id 1 判斷是否還有庫存 if info stock 0 減少庫存,num 只是乙個記錄修改資料的次數,可以判斷是否存在超賣現象 result db upda...
用redis實現秒殺
今日在研究秒殺系統,用資料庫的樂觀鎖可以實現,但是在高併發下可能並不好,所以就想到了快取系統redis,因為redis本身也有鎖機制,廢話不多說,直接上 請大神指點不足的地方。class a public class myrunnable implements runnable override p...
redis實現的秒殺系統
利用redis的樂觀鎖,實現秒殺系統的資料同步 基於watch實現 import redis conn redis.redis host 127.0.0.1 port 6379 conn.set count 1000 with conn.pipeline as pipe 先監視,自己的值沒有被修改過...