婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > 如何利用Redis鎖解決高并發(fā)問題詳解

如何利用Redis鎖解決高并發(fā)問題詳解

熱門標(biāo)簽:高碑店市地圖標(biāo)注app 400電話辦理的口碑 一個(gè)地圖標(biāo)注多少錢 b2b外呼系統(tǒng) 臺(tái)灣電銷 南京手機(jī)外呼系統(tǒng)廠家 廊坊外呼系統(tǒng)在哪買 地圖標(biāo)注工廠入駐 四川穩(wěn)定外呼系統(tǒng)軟件

redis技術(shù)的使用:

redis真的是一個(gè)很好的技術(shù),它可以很好的在一定程度上解決網(wǎng)站一瞬間的并發(fā)量,例如商品搶購(gòu)秒殺等活動(dòng)。。。

redis之所以能解決高并發(fā)的原因是它可以直接訪問內(nèi)存,而以往我們用的是數(shù)據(jù)庫(kù)(硬盤),提高了訪問效率,解決了數(shù)據(jù)庫(kù)服務(wù)器壓力。

為什么redis的地位越來(lái)越高,我們?yōu)楹尾贿x擇memcache,這是因?yàn)閙emcache只能存儲(chǔ)字符串,而redis存儲(chǔ)類型很豐富(例如有字符串、LIST、SET等),memcache每個(gè)值最大只能存儲(chǔ)1M,存儲(chǔ)資源非常有限,十分消耗內(nèi)存資源,而redis可以存儲(chǔ)1G,最重要的是memcache它不如redis安全,當(dāng)服務(wù)器發(fā)生故障或者意外關(guān)機(jī)等情況時(shí),redsi會(huì)把內(nèi)存中的數(shù)據(jù)備份到硬盤中,而memcache所存儲(chǔ)的東西全部丟失;這也說(shuō)明了memcache不適合做數(shù)據(jù)庫(kù)來(lái)用,可以用來(lái)做緩存。

引言

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

setnx 有兩個(gè)參數(shù)。第一個(gè)參數(shù)表示鍵。第二個(gè)參數(shù)表示值。如果當(dāng)前鍵不存在,那么會(huì)插入當(dāng)前鍵,將第二個(gè)參數(shù)做為值。返回 1。如果當(dāng)前鍵存在,那么會(huì)返回0。

創(chuàng)建庫(kù)存表

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

設(shè)置初始庫(kù)存為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

測(cè)試不用鎖的時(shí)候

$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測(cè)試模擬并發(fā),發(fā)現(xiàn)庫(kù)存是正確的。

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

在來(lái)看訂單表

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)存在幾個(gè)訂單都是操作的同一個(gè)庫(kù)存數(shù)據(jù),這樣就可能引起超賣的情況。

修改代碼加入redis鎖進(jìn)行數(shù)據(jù)控制

?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 過期時(shí)間
 */
 public function set($key,$expTime)
 {
 //初步加鎖
 $isLock = $this->_redis->setnx($key,time()+$expTime);
 if($isLock)
 {
  return true;
 }
 else
 {
  //加鎖失敗的情況下。判斷鎖是否已經(jīng)存在,如果鎖存在切已經(jīng)過期,那么刪除鎖。進(jìn)行重新加鎖
  $val = $this->_redis->get($key);
  if($val$valtime())
  {
  $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í)行其他操作。
}

再次進(jìn)行ab測(cè)試,查看測(cè)試結(jié)果

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)訂單表沒有操作同一個(gè)庫(kù)存數(shù)據(jù)的情況。所以利用redis鎖是可以有效的處理高并發(fā)的。

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • 詳解利用redis + lua解決搶紅包高并發(fā)的問題
  • Nginx+Lua+Redis構(gòu)建高并發(fā)Web應(yīng)用
  • Redis實(shí)現(xiàn)高并發(fā)計(jì)數(shù)器
  • Redis瞬時(shí)高并發(fā)秒殺方案總結(jié)
  • PHP實(shí)現(xiàn)Redis單據(jù)鎖以及防止并發(fā)重復(fù)寫入
  • jedispool連redis高并發(fā)卡死的問題
  • 使用lua+redis解決發(fā)多張券的并發(fā)問題

標(biāo)簽:伊春 定州 畢節(jié) 甘南 南寧 拉薩 河源 泰州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《如何利用Redis鎖解決高并發(fā)問題詳解》,本文關(guān)鍵詞  如何,利用,Redis,鎖,解決,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《如何利用Redis鎖解決高并發(fā)問題詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于如何利用Redis鎖解決高并發(fā)問題詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    午夜欧美电影在线观看| 成人av在线播放网址| 欧美视频中文一区二区三区在线观看| 视频一区二区三区在线| 国产欧美日韩激情| 91精品婷婷国产综合久久性色| 成人黄色小视频| 老司机午夜精品| 亚洲影视在线播放| 中文成人av在线| 精品免费99久久| 欧美日韩国产一区二区三区地区| 成av人片一区二区| 韩国欧美国产一区| 日韩高清不卡一区二区三区| 一区二区视频在线看| 国产精品天天摸av网| 日韩精品一区二区三区视频播放| 欧美日韩亚洲丝袜制服| 成人av中文字幕| 成人高清视频在线| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产成人精品亚洲日本在线桃色| 婷婷激情综合网| 一区二区三区日韩欧美精品 | 久久丝袜美腿综合| 91精品国产综合久久蜜臀| 欧美亚洲图片小说| 色素色在线综合| 色域天天综合网| 91小宝寻花一区二区三区| www.成人网.com| aaa亚洲精品一二三区| 不卡av电影在线播放| 成人午夜免费av| 成人av在线播放网址| aa级大片欧美| 91蝌蚪国产九色| 欧洲精品一区二区三区在线观看| 色综合天天综合狠狠| 91在线精品一区二区三区| 91视频在线观看免费| 91国内精品野花午夜精品| 91成人网在线| 欧美男女性生活在线直播观看| 欧美日韩成人高清| 91精品国产免费久久综合| 欧美日韩成人一区二区| 日韩三级伦理片妻子的秘密按摩| 精品国产乱码久久久久久老虎| 久久午夜国产精品| 中文一区二区完整视频在线观看| 中文字幕一区在线| 一区二区三区在线观看国产| 亚洲国产日韩a在线播放| 午夜影院久久久| 奇米色777欧美一区二区| 久久99蜜桃精品| 高清久久久久久| 色悠悠亚洲一区二区| 欧美日韩一区精品| 日韩欧美一级二级| 欧美激情一区二区在线| 亚洲免费成人av| 日韩精品视频网站| 国产一区二区三区精品视频| 成人动漫视频在线| 欧美日韩国产综合草草| xfplay精品久久| 中文字幕在线不卡一区| 午夜精品在线看| 国产一区二区伦理片| 91日韩一区二区三区| 91精品国产全国免费观看| 欧美激情一二三区| 亚洲一线二线三线久久久| 日韩不卡一区二区| 成人中文字幕合集| 欧美日韩小视频| 国产欧美一区二区三区鸳鸯浴| 亚洲欧美乱综合| 毛片av一区二区三区| 99久久精品国产精品久久| 欧美精品18+| 国产精品久久看| 图片区小说区区亚洲影院| 国产精品一区二区果冻传媒| 欧美在线不卡一区| 久久久不卡网国产精品一区| 亚洲国产欧美日韩另类综合| 国产激情视频一区二区在线观看| 欧美午夜免费电影| 中文av一区二区| 久久er精品视频| 欧美日韩美少妇| 国产精品入口麻豆原神| 青青青爽久久午夜综合久久午夜| 99国产精品久久久久| 欧美本精品男人aⅴ天堂| 亚洲午夜精品久久久久久久久| 国产99久久久久| 日韩欧美国产系列| 亚洲图片欧美一区| 成人av在线看| 国产夜色精品一区二区av| 日韩精品一区第一页| 一本久道久久综合中文字幕| 久久网站热最新地址| 日本视频免费一区| 欧美体内she精视频| √…a在线天堂一区| 国产一本一道久久香蕉| 日韩你懂的在线播放| 亚洲国产精品麻豆| 色综合中文字幕国产 | 在线视频一区二区三区| 精品久久久久久综合日本欧美 | 欧美日韩五月天| 综合分类小说区另类春色亚洲小说欧美| 青椒成人免费视频| 欧美色手机在线观看| 椎名由奈av一区二区三区| 粉嫩av亚洲一区二区图片| 久久综合九色综合97婷婷女人 | 欧美亚洲国产一区二区三区va| 国产精品少妇自拍| 国产麻豆精品在线| 亚洲精品一区二区三区影院| 青青草成人在线观看| 欧美一区二区三区男人的天堂| 亚洲一区二区三区四区五区黄 | 偷拍与自拍一区| 欧美三级午夜理伦三级中视频| 亚洲日本电影在线| 99国产精品久久久| 亚洲三级在线看| 97久久人人超碰| 亚洲欧洲美洲综合色网| 不卡的电视剧免费网站有什么| 国产精品国产馆在线真实露脸| 成人理论电影网| 亚洲天堂久久久久久久| 91麻豆成人久久精品二区三区| 亚洲激情自拍视频| 欧洲日韩一区二区三区| 亚洲福利国产精品| 欧美日韩国产综合视频在线观看 | 久久99久久99| 久久久影视传媒| 成人免费视频免费观看| 成人免费在线视频观看| 一本久久综合亚洲鲁鲁五月天| 亚洲专区一二三| 欧美日本视频在线| 蜜桃av一区二区| 久久久亚洲欧洲日产国码αv| 国产69精品久久久久777| 国产精品视频麻豆| 在线中文字幕一区| 日韩成人免费电影| 久久精品视频免费| 99re视频这里只有精品| 亚洲与欧洲av电影| 日韩一区二区三区视频在线| 韩日欧美一区二区三区| 国产精品久久午夜夜伦鲁鲁| 欧美中文字幕不卡| 蜜桃精品在线观看| 国产精品激情偷乱一区二区∴| 日本韩国欧美国产| 日本欧美肥老太交大片| 日本一区二区久久| 欧美视频三区在线播放| 精品一区二区国语对白| 中文字幕亚洲精品在线观看| 欧美在线free| 狠狠网亚洲精品| 亚洲少妇30p| 日韩亚洲欧美高清| 成人综合激情网| 日韩福利电影在线| 亚洲国产精品国自产拍av| 色噜噜狠狠成人中文综合| 男女性色大片免费观看一区二区| 国产性做久久久久久| 欧美性感一类影片在线播放| 国产毛片一区二区| 亚洲在线视频免费观看| 久久综合久久综合亚洲| 在线观看av一区| 国产成人午夜高潮毛片| 无码av中文一区二区三区桃花岛| 国产欧美日韩在线| 欧美日韩精品久久久| 国产成人av电影在线| 亚洲v日本v欧美v久久精品| 久久久av毛片精品| 欧美精品高清视频| 暴力调教一区二区三区| 裸体健美xxxx欧美裸体表演|