<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### 分布式鎖使用場景:負載均衡,高并發下輪詢訪問redis(單一服務) 一:非常重要的一條redis命令 **SET key value [EX seconds] [PX milliseconds] [NX|XX]** 從 Redis 2.6.12 版本開始,*SET*命令的行為可以通過一系列參數來修改: * EXsecond:設置鍵的過期時間為second秒。SETkeyvalueEXsecond效果等同于SETEXkeysecondvalue。 * PXmillisecond:設置鍵的過期時間為millisecond毫秒。SETkeyvaluePXmillisecond效果等同于 PSETEXkeymillisecondvalue。 * NX:只在鍵不存在時,才對鍵進行設置操作。SETkeyvalueNX效果等同于SETNXkeyvalue。 * XX:只在鍵已經存在時,才對鍵進行設置操作。 二:官方提供了一套加鎖的算法 ``` $servers = [ ['127.0.0.1', 6379, 0.01], ['127.0.0.1', 6389, 0.01], ['127.0.0.1', 6399, 0.01], ]; $redLock = new RedLock($servers); //加鎖 $lock = $redLock->lock('my_resource_name', 1000); //刪除鎖 $redLock->unlock($lock) ``` 三:redis能用的的加鎖命令分表是`INCR`、`SETNX`、`SET`(執行代碼完成,都需要刪除鎖) (1)第一種鎖命令`INCR` 這種加鎖的思路是, key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 INCR 操作進行加一。? 然后其它用戶在執行 INCR 操作進行加一時,如果返回的數大于 1 ,說明這個鎖正在被使用當中。 (2) 第二種鎖`SETNX` 這種加鎖的思路是,如果 key 不存在,將 key 設置為 value? 如果 key 已存在,則?`SETNX`?不做任何動作 (3)第三種鎖SET 上面兩種方法都有一個問題,會發現,都需要設置 key 過期。那么為什么要設置key過期呢?如果請求執行因為某些原因意外退出了,導致創建了鎖但是沒有刪除鎖,那么這個鎖將一直存在,以至于以后緩存再也得不到更新。于是乎我們需要給鎖加一個過期時間以防不測。 $redis->set($key, $value, array('nx', 'ex' => $ttl)); (4) 雖然上面一步已經滿足了我們的需求,但是還是要考慮其它問題?? 1、 redis發現鎖失敗了要怎么辦?中斷請求還是循環請求?? 2、 循環請求的話,如果有一個獲取了鎖,其它的在去獲取鎖的時候,是不是容易發生搶鎖的可能?? 3、 鎖提前過期后,客戶端A還沒執行完,然后客戶端B獲取到了鎖,這時候客戶端A執行完了,會不會在刪鎖的時候把B的鎖給刪掉? . 解決辦法 針對問題1:使用循環請求,循環請求去獲取鎖? 針對問題2:針對第二個問題,在循環請求獲取鎖的時候,加入睡眠功能,等待幾毫秒在執行循環? 針對問題3:在加鎖的時候存入的key是隨機的。這樣的話,每次在刪除key的時候判斷下存入的key里的value和自己存的是否一樣 最終采取$lock = $redLock->lock('my_resource_name', 1000);
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看