1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        phplockPHP進(jìn)程鎖

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

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

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

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

        php

        /**
         * 測試?yán)樱瑫r打開兩個頁面,可以發(fā)現(xiàn)總是同時只能一個頁面進(jì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
        "進(jìn)入鎖
        \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;
        }
        /**
         * 設(shè)置緩存
         *
         * @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
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            一级特黄老太婆片免费看 | 手机黄色在线 | 91视频色 | 国产午夜精品久久久久久免费视 | 精品黄网站 | 男女视频在一区观看免费 | 国产和美国黄色毛片 | 国产精品中文久久久久久 | 少妇性l交大片免费观看 | 日韩 欧美p片内射久久 |