php與redis 實現秒殺過程

2021-09-29 09:18:53 字數 2437 閱讀 3509

參考**

步驟

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 先監視,自己的值沒有被修改過...