<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          phplockPHP進程鎖

          聯(lián)合創(chuàng)作 · 2023-10-01 03:47

          PHP在多進程模式下(并發(fā)的web訪問)由于沒有內置的鎖支持,在處理一些資源的之后,很容易出現(xiàn)并發(fā)性問題。

          在web開發(fā)中我們經(jīng)常對我們的數(shù)據(jù)庫耗時操作做緩存,但是可能出現(xiàn)一個陷阱,在緩存失效的一瞬間,大量的訪問得到緩存失效的標示,都去后端查詢數(shù)據(jù)庫,導致

          同時大量的數(shù)據(jù)庫耗時查詢,出現(xiàn)數(shù)據(jù)庫宕機等問題。此問題隱藏深,不容易查找。本項目主要用于解決php的進程間鎖問題。

          php

          /**
           * 測試例子,同時打開兩個頁面,可以發(fā)現(xiàn)總是同時只能一個頁面進入到鎖區(qū)間的代碼
           * @link http://code.google.com/p/phplock/
           * @author sunli
           * @blog http://sunli.cnblogs.com
           * @svnversion  $Id: test.php 4 2009-11-25 05:05:13Z sunli1223 $
           * @version v1.0 beta1
           * @license Apache License Version 2.0
           * @copyright  [email protected]
           */


          require 'class.phplock.php';

          $lock
          = new PHPLock ( 'lock/', 'lockname' );
          $lock
          ->startLock ();
          $status
          = $lock->Lock ();
          if (! $status) {
                  echo
          "加鎖失敗";
                 
          exit ();
          }
          //process code
          echo
          "進入鎖
          \r\n"
          ;
          ob_end_flush
          ();
          flush
          ();
          ob_flush
          ();
          sleep
          ( 10 ); //休眠20秒,模擬并發(fā)操作
          echo
          "執(zhí)行完成
          \r\n"
          ;
          $lock
          ->unlock ();
          $lock
          ->endLock ();
          echo
          "釋放鎖完成
          \r\n"
          ;
          /**
           * cache操作
           *
           * @return $array
           */

          function getCache($key) {
                 
          return $cache;
          }
          /**
           * 設置緩存
           *
           * @param string $key
           * @param array $value
           */

          function setCache($key, $value) {

          }
          $key
          = 'cachekey';
          $cache
          = getCache ( $key );
          if (! $cache) {
                 
          //緩存不存在,開始加鎖
                  $lock
          = new PHPLock ( 'lock/', $key );
                  $lock
          ->startLock ();
                  $lock
          ->Lock ();
                 
          //嘗試判斷緩存是否有數(shù)據(jù),可能已經(jīng)有訪問重建緩存了,就不需要再次查詢數(shù)據(jù)庫
                  $cache
          = getCache ( $key );
                 
          if (! $cache) {
                         
          //數(shù)據(jù)庫查詢操作,代碼省略了
                          $data
          = $dbdata;
                          setCache
          ( $key, $data );
                 
          }
                 
          //釋放鎖
                  $lock
          ->unlock ();
                  $lock
          ->endLock ();
          }

          ?>
          瀏覽 18
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  婬乱A片欧美大片无码芳芳 | 做爱免费无码 | gogo高清无码视频 | 做爱高清无码视频免费 | 日本欧美成人片AAAA |