在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 網頁設計教程 > 詳細頁面

如何使用Redis鎖處理高并發(fā)問題

如何使用Redis鎖處理高并發(fā)問題

更新時間:2025-12-05 文章作者:未知 信息來源:網絡 閱讀次數:

網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創(chuàng)造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立...
網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創(chuàng)造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立在超文本基礎之上的。超級文本標記語言之所以稱為超文本標記語言,是因為文本中包含了所謂“超級鏈接”點。
高并發(fā)問題是我們經常可以遇到的問題,那么該如何解決高并發(fā)這個問題呢?本篇文章介紹的內容就是利用Redis鎖解決高并發(fā)問題,一起來看看吧。

這里我們主要利用Redis的setnx的命令來處理高并發(fā)。

setnx 有兩個參數。第一個參數表示鍵。第二個參數表示值。如果當前鍵不存在,那么會插入當前鍵,將第二個參數做為值。返回 1。如果當前鍵存在,那么會返回0。

創(chuàng)建庫存表

CREATE TABLE `storage` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `number` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1

設置初始庫存為10

創(chuàng)建訂單表

CREATE TABLE `order` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `number` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1

測試不用鎖的時候

$pdo = new PDO('mysql:host=127.0.0.1;dbname=test', 'root', 'root');
$sql="select `number` from  storage where id=1 limit 1";
$res = $pdo->query($sql)->fetch();
$number = $res['number'];
if($number>0)
{
    $sql ="insert into `order`  VALUES (null,$number)";

    $order_id = $pdo->query($sql);
    if($order_id)
    {

        $sql="update storage set `number`=`number`-1 WHERE id=1";
        $pdo->query($sql);
    }
}

ab測試模擬并發(fā),發(fā)現(xiàn)庫存是正確的。

mysql> select * from storage;
+----+--------+
| id | number |
+----+--------+
|  1 |      0 |
+----+--------+
1 row in set (0.00 sec)

在來看訂單表

mysql> select * from `order`;
+----+--------+
| id | number |
+----+--------+
|  1 |     10 |
|  2 |     10 |
|  3 |      9 |
|  4 |      7 |
|  5 |      6 |
|  6 |      5 |
|  7 |      5 |
|  8 |      5 |
|  9 |      4 |
| 10 |      1 |
+----+--------+
10 rows in set (0.00 sec)

發(fā)現(xiàn)存在幾個訂單都是操作的同一個庫存數據,這樣就可能引起超賣的情況。

修改代碼加入redis鎖進行數據控制

<?php
/**
 * Created by PhpStorm.
 * User: daisc
 * Date: 2018/7/23
 * Time: 14:45
 */
class Lock
{
    private static $_instance ;
    private   $_redis;
    private function __construct()
    {
        $this->_redis =  new Redis();
        $this->_redis ->connect('127.0.0.1');
    }
    public static function getInstance()
    {
        if(self::$_instance instanceof self)
        {
            return self::$_instance;
        }
        return self::$_instance = new  self();
    }

    /**
     * @function 加鎖
     * @param $key 鎖名稱
     * @param $expTime 過期時間
      */
    public function set($key,$expTime)
    {
        //初步加鎖
        $isLock = $this->_redis->setnx($key,time()+$expTime);
        if($isLock)
        {
            return true;
        }
        else
        {
            //加鎖失敗的情況下。判斷鎖是否已經存在,如果鎖存在切已經過期,那么刪除鎖。進行重新加鎖
            $val = $this->_redis->get($key);
            if($val&&$val<time())
            {
                $this->del($key);
            }
            return  $this->_redis->setnx($key,time()+$expTime);
        }
    }


    /**
     * @param $key 解鎖
     */
    public function del($key)
    {
        $this->_redis->del($key);
    }

}



$pdo = new PDO('mysql:host=127.0.0.1;dbname=test', 'root', 'root');
$lockObj = Lock::getInstance();
//判斷是能加鎖成功
if($lock = $lockObj->set('storage',10))
{
    $sql="select `number` from  storage where id=1 limit 1";
    $res = $pdo->query($sql)->fetch();
    $number = $res['number'];
    if($number>0)
    {
        $sql ="insert into `order`  VALUES (null,$number)";

        $order_id = $pdo->query($sql);
        if($order_id)
        {

            $sql="update storage set `number`=`number`-1 WHERE id=1";
            $pdo->query($sql);
        }
    }
    //解鎖
    $lockObj->del('storage');

}
else
{
    //加鎖不成功執(zhí)行其他操作。
}

再次進行ab測試,查看測試結果

mysql> select * from `order`;
+----+--------+
| id | number |
+----+--------+
|  1 |     10 |
|  2 |      9 |
|  3 |      8 |
|  4 |      7 |
|  5 |      6 |
|  6 |      5 |
|  7 |      4 |
|  8 |      3 |
|  9 |      2 |
| 10 |      1 |
+----+--------+
10 rows in set (0.00 sec)

發(fā)現(xiàn)訂單表沒有操作同一個庫存數據的情況。所以利用redis鎖是可以有效的處理高并發(fā)的。

這里在加鎖的時候其實是可以不需要判斷過期時間的,這里我們?yōu)榱吮苊庠斐伤梨i,所以加一個過期時間的判斷。當過期的時候主動刪除該鎖。

相關推薦:

php利用文件鎖來解決高并發(fā)問題

使用Redis來存儲PHP的session如何解決并發(fā)一致性的問題

以上就是如何利用Redis鎖解決高并發(fā)問題的詳細內容,更多請關注php中文網其它相關文章!


網站建設是一個廣義的術語,涵蓋了許多不同的技能和學科中所使用的生產和維護的網站。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 欧美性猛交内射兽交老熟妇| 99草草国产熟女视频在线| 午夜肉伦伦影院| 青青草综合视频| 亚洲综合激情五月| 午夜不卡福利视频| 国产成人在线综合| 国产精品无码乱伦| 无码人妻aⅴ一区二区三区日本| 午夜久久福利视频| www.亚洲自拍| 手机福利在线视频| 日本中文字幕在线不卡| 麻豆视频传媒入口| 久久av高潮av| 妺妺窝人体色www在线小说| 无码无遮挡又大又爽又黄的视频| 国产在线青青草| av片中文字幕| 国产探花在线观看视频| 免费看污污视频| 少妇高潮喷水久久久久久久久久| 国内外成人激情视频| jizz大全欧美jizzcom| 免费一区二区三区在线观看| 欧美 日韩 国产 在线观看| 久久www视频| 黄色动漫在线免费看| 污污动漫在线观看| 日本黄网站色大片免费观看| av网站手机在线观看| 五月婷婷深爱五月| 日韩中文字幕在线不卡| 国产亚洲综合视频| 熟女熟妇伦久久影院毛片一区二区| 久操手机在线视频| 免费看污污网站| 日韩亚洲欧美视频| 欧美日韩在线免费播放| 亚洲 欧洲 日韩| 色综合av综合无码综合网站| 91制片厂免费观看| 国产二区视频在线播放| 国产卡一卡二在线| 羞羞的视频在线| 亚洲人精品午夜射精日韩| 国产精品嫩草影视| 亚洲色欲综合一区二区三区| 国产91视频一区| 日本中文字幕精品—区二区| 91av资源网| 999一区二区三区| 欧美亚洲视频一区| 国产色视频在线播放| 日批视频在线免费看| 久久www视频| 穿情趣内衣被c到高潮视频| 欧美一级黄色影院| 玩弄japan白嫩少妇hd| 日本人妻伦在线中文字幕| 亚洲欧美日本一区二区三区| 精品视频无码一区二区三区| 国产精品一线二线三线| 日韩激情视频一区二区| 少妇久久久久久被弄到高潮| 日本精品免费视频| 偷拍盗摄高潮叫床对白清晰| 最新免费av网址| 日韩成人av免费| av不卡在线免费观看| 香蕉视频色在线观看| www.久久com| 中文字幕在线中文| 国产午夜精品视频一区二区三区| 色乱码一区二区三区熟女| www.污污视频| 九九九久久久久久久| 国内精品国产三级国产aⅴ久| 加勒比av中文字幕| 午夜探花在线观看| 日本一本中文字幕| 日本www在线播放| 国产三级三级三级看三级| 亚洲欧美视频二区| 1314成人网| 日韩小视频在线播放| 777米奇影视第四色| 91国产精品视频在线观看| 亚洲国产欧美91| 黄色一级片国产| av免费在线播放网站| 无尽裸体动漫2d在线观看| 天天综合成人网| 免费人成自慰网站| 少妇网站在线观看| 男女爱爱视频网站| 无码精品a∨在线观看中文| 欧美三级理论片| 国产二区视频在线| 中文字幕天天干| r级无码视频在线观看| 中文字幕网av| a级免费在线观看| www.色欧美| 国产乱子伦农村叉叉叉| 91欧美一区二区三区| 少妇高潮喷水在线观看| 国产精品嫩草影院8vv8| 免费看黄在线看| 天天成人综合网| 久久久久久三级| 极品美女扒开粉嫩小泬| 伊人国产在线视频| 蜜桃传媒一区二区三区| 成年人黄色在线观看| 日本肉体xxxx裸体xxx免费| 丁香六月激情婷婷| 国产精品一区在线免费观看| 欧美日韩大尺度| 国产青青在线视频| 欧美一区二区三区综合| 三级视频中文字幕| 别急慢慢来1978如如2| 久久久免费视频网站| 久久www视频| 青少年xxxxx性开放hg| 蜜桃福利午夜精品一区| 五月天av在线播放| 日本超碰在线观看| 性生交免费视频| 日本xxxxxxx免费视频| av动漫在线看| 免费成人在线视频网站| 国产黄页在线观看| www.av毛片| www插插插无码视频网站| 亚洲黄色网址在线观看| 污免费在线观看| 四虎影院一区二区| 屁屁影院ccyy国产第一页| 男人天堂成人网| 欧美在线观看视频免费| 免费看日b视频| 黄网站色视频免费观看| 妞干网视频在线观看| 成人免费播放器| 国产三级日本三级在线播放| 天天爱天天操天天干| 日韩va在线观看| 草草草视频在线观看| 日韩a∨精品日韩在线观看| 各处沟厕大尺度偷拍女厕嘘嘘| 日日摸日日碰夜夜爽av| 国产精品v日韩精品v在线观看| 亚洲精品手机在线观看| 欧美 日韩 国产 在线观看| 国产在线视频在线| 日韩av在线播放不卡| 青青青在线播放| 亚洲综合伊人久久| 日本一道在线观看| 欧洲av无码放荡人妇网站| 久国产精品视频| heyzo亚洲| 91性高潮久久久久久久| 久久手机在线视频| 一道本在线免费视频| 国产91视频一区| 在线免费观看av的网站| 8x8ⅹ国产精品一区二区二区| 国产精品wwwww| 久久最新免费视频| 91在线视频观看免费| 青草网在线观看| 三区视频在线观看| www.四虎成人| 成人在线免费高清视频| www.色偷偷.com| 人妻av中文系列| 樱空桃在线播放| 成人亚洲精品777777大片| 黄色成人在线看| 国产a级黄色大片| 热久久久久久久久| 免费男同深夜夜行网站| 国精产品一区一区三区视频| 成年人网站av| 中文字幕第38页| 日本成人中文字幕在线| 国模无码视频一区二区三区| 亚洲免费视频播放| 五月天婷婷影视| 国模私拍视频在线观看| 日日碰狠狠丁香久燥| 中文字幕无码精品亚洲35| 亚洲理论电影在线观看| 午夜久久久久久久久久久| eeuss中文| 糖心vlog在线免费观看| 成人性做爰片免费视频|