thinkphp redis實現秒殺,快取等功能

2021-09-19 11:17:07 字數 1441 閱讀 4879

秒殺是**常見功能 php+redis是最常見的秒殺功能

1,安裝redis,根據自己的php版本安裝對應的redis擴充套件

首先檢視phpinfo();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檢視擴充套件是否成功安裝

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

然後在extend下新建module資料夾 建立redis.php檔案

namespace module;

class redis extends \redis

}在thinkphp檔案下的helper.php加入

if (!function_exists(『redis』))

}然後就可以在控制器寫redis快取方法了

//建立redis快取

\cache::store(『redis』)->set(key, value);

//讀取快取

\cache::store(『redis』)->get(key);

秒殺的核心問題是在大併發的情況下不會超出庫存的購買,這個就是處理的關鍵所以思路是第一步在秒殺類的先做一些基礎的資料生成:

三張表做測試,分別是:商品表,日誌表,訂單表,

//秒殺入口

public function insva()

$redis = $this->redis();//接入redis

$count = $redis->reducestock('goods_stock');//減少庫存,返回剩餘庫存

if($count ==0)else

$res = db('order')->insert(['order_sn'=>$order,'uid'=>$this->user_id,'goods_id'=>$id]);//插入訂單

$stock = db('goods')->where('id',$id)->setdec('count');//減少庫存

if($stock)else

}}// 將商品庫存存入佇列

public function redisinit()

}// 記錄日誌 狀態1成功 0失敗

function insertlog($status=1)

//生成唯一訂單

function build_order_no()

快速排序演算法實現(遞迴實現 棧實現)

基本思想 選擇乙個基準元素,比如選擇最後乙個元素,通過一趟掃瞄,將待排序列分成兩部分,一部分比基準元素小,一部分大於等於基準元素,此時基準元素在其排好序後的正確位置,又稱為軸位置,此位置的元素確定後不再參與排序,然後再用同樣的方法遞迴地排序劃分的兩部分。分析 快速排序是不穩定的排序。快速排序的時間複...

介面實現與配置實現

在實現系統功能的時候,通常會首先定義好功能的介面,在系統功能不斷被實現的過程中,慢慢的發現有些介面的實現很類似,這個時候通常會開始做一次抽象,形 成乙個共同的部分,慢慢的系統形成了乙個抽象的層次,而為了通用,通常是通過定義介面,形成乙個抽象類,抽象類中暴露出一些抽象方法供外部擴充套件實 現,逐步的積...

js分頁實現,前端實現。

主要是借鑑了網上乙個例子,自己重新加了樣式,新增了跳轉,修改了一些小地方,用於和大家一起分享,前端分頁的技巧,的資料是我已經寫好了,其實大家也可以前端渲染 然後再分頁,都是可以的。其實分頁最關鍵是這兩句 var startrow currentpage 1 pagesize 1 currentpag...