婷婷综合国产,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
    久久99九九99精品| 国产在线精品一区在线观看麻豆| 亚洲欧洲国产专区| 93久久精品日日躁夜夜躁欧美| 国产欧美日韩一区二区三区在线观看| 免费观看一级特黄欧美大片| 6080国产精品一区二区| 奇米精品一区二区三区四区| 欧美精品久久一区二区三区| 日韩成人午夜精品| 欧美不卡一区二区三区四区| 国产成人日日夜夜| 亚洲人精品午夜| 91福利社在线观看| 久久精品噜噜噜成人88aⅴ| 精品99999| 99re6这里只有精品视频在线观看| 亚洲在线一区二区三区| 日韩手机在线导航| 国产传媒久久文化传媒| 亚洲精品久久久久久国产精华液| 91久久精品日日躁夜夜躁欧美| 亚洲国产成人porn| 精品av综合导航| 色吊一区二区三区| 久久精品国产99国产精品| 欧美激情综合在线| 欧美精品 日韩| 91丝袜国产在线播放| 午夜私人影院久久久久| 欧美精品精品一区| 国产suv精品一区二区883| 亚洲成人一区在线| 欧美一级黄色片| 色婷婷一区二区| 国产一区二区三区国产| 亚洲成av人片在线观看无码| 日本一区二区三区四区| 日韩欧美在线网站| 欧美色国产精品| 一本色道a无线码一区v| 国产精品亚洲第一区在线暖暖韩国| 亚洲特黄一级片| 久久午夜电影网| 欧美一级搡bbbb搡bbbb| 91成人免费网站| 成人高清视频在线| 成人一区在线观看| 高清国产一区二区| 国产一区二区在线免费观看| 日韩高清国产一区在线| 一区二区国产盗摄色噜噜| 国产精品久久精品日日| 欧美国产欧美综合| 国产视频不卡一区| www精品美女久久久tv| 欧美tickling挠脚心丨vk| 欧美片网站yy| 6080午夜不卡| 欧美区在线观看| 欧美日韩成人一区| 欧美日韩亚洲另类| 51午夜精品国产| 9191久久久久久久久久久| 欧美私模裸体表演在线观看| 91豆麻精品91久久久久久| 色久综合一二码| 欧美系列亚洲系列| 91精品国产手机| 日韩午夜激情视频| 国产亚洲美州欧州综合国| 久久精品一二三| 国产三级精品三级在线专区| 在线观看中文字幕不卡| 日本乱人伦aⅴ精品| 欧美日韩国产大片| 在线中文字幕一区二区| 在线电影欧美成精品| 91精品国产欧美日韩| 7799精品视频| 欧美刺激午夜性久久久久久久| 日韩精品一区二区三区swag| 日韩欧美自拍偷拍| 久久精品无码一区二区三区| 国产精品久久久久永久免费观看 | 日韩欧美区一区二| 欧美一卡在线观看| 国产欧美视频在线观看| 亚洲日本一区二区| 日本美女一区二区三区| 国产精品2024| 欧美日韩高清一区| 国产精品三级av| 日本一区中文字幕| 99久久99久久精品国产片果冻| 欧美视频一区二区三区四区| 久久影音资源网| 亚洲国产精品久久艾草纯爱| 国产精品中文欧美| 欧美精品精品一区| 亚洲视频小说图片| 极品美女销魂一区二区三区免费| 99精品偷自拍| 欧美日韩一区二区三区免费看| 26uuu亚洲综合色欧美| 中文字幕在线观看不卡视频| 美腿丝袜亚洲色图| 在线视频国产一区| 中日韩免费视频中文字幕| 亚洲国产一区二区三区| 成人精品国产免费网站| 91.麻豆视频| 久久亚洲精华国产精华液| 亚洲欧洲日产国码二区| 日韩激情av在线| 99re在线精品| 久久久久久电影| 首页国产欧美久久| 波多野结衣亚洲| 久久久久国产精品人| 免费在线成人网| 欧美三级中文字幕| 国产午夜精品福利| 三级久久三级久久| 欧美日韩大陆一区二区| 亚洲欧美日韩在线播放| 国产乱码精品一区二区三| 欧美一区二区三区四区五区| 亚洲欧美偷拍卡通变态| 精品一区二区三区日韩| 国产乱码精品一区二区三区五月婷| 国产福利91精品一区二区三区| 欧美美女黄视频| 丝袜诱惑亚洲看片| 欧美性猛交xxxx乱大交退制版| 欧美国产乱子伦| www.亚洲精品| 中文字幕中文字幕一区| 成人aaaa免费全部观看| 精品国产免费人成在线观看| 日韩国产欧美一区二区三区| 欧美亚洲综合网| 亚洲成av人片一区二区梦乃| 91福利在线播放| 亚洲一区欧美一区| 欧美色精品在线视频| 亚洲国产精品久久久男人的天堂| av电影天堂一区二区在线观看| 国产视频一区在线观看| 国产一区二区美女| 欧美成人猛片aaaaaaa| 日韩精品一区第一页| 色欧美片视频在线观看| 亚洲免费观看高清完整| 99久久国产免费看| 亚洲女厕所小便bbb| av亚洲精华国产精华精| 亚洲欧美偷拍三级| 欧美日韩精品综合在线| 亚洲精品福利视频网站| 91麻豆国产福利在线观看| 综合av第一页| 日本福利一区二区| 亚洲成人三级小说| 精品国产99国产精品| 成人av电影在线| 亚洲欧美日韩人成在线播放| 久久国产精品色婷婷| 国产校园另类小说区| 色爱区综合激月婷婷| 免费精品视频在线| 日本一区二区三区四区| 99视频一区二区三区| 天天影视网天天综合色在线播放| 精品免费一区二区三区| 色综合天天综合| 亚洲猫色日本管| 日韩免费观看2025年上映的电影| 成人免费看黄yyy456| 亚洲国产精品精华液网站| 国产日本欧美一区二区| 欧美色大人视频| 精品一区二区三区在线视频| 中文字幕一区二区三区乱码在线| 欧美sm美女调教| 99re这里只有精品6| 亚洲免费伊人电影| 中文字幕不卡在线播放| 欧美调教femdomvk| 色综合中文字幕| k8久久久一区二区三区| 三级成人在线视频| 亚洲精品国产视频| 国产精品你懂的| 国产目拍亚洲精品99久久精品| 欧美一区二区三区啪啪| 色94色欧美sute亚洲线路二| 精品一区二区精品| 18成人在线视频| 亚洲免费三区一区二区|