<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] 參考鏈接:[https://juejin.im/post/5b16148a518825136137c8db](https://juejin.im/post/5b16148a518825136137c8db) ## 為何需要分布式鎖 * 效率:使用分布式鎖可以避免不同節點重復相同的工作,這些工作會浪費資源。比如用戶付了錢之后有可能不同節點會發出多封短信。 * 正確性:加分布式鎖同樣可以避免破壞正確性的發生,如果兩個節點在同一條數據上面操作,比如多個節點機器對同一個訂單操作不同的流程有可能會導致該筆訂單最后狀態出現錯誤,造成損失。 ## 分布式鎖的特點 當我們確定了在不同節點上需要分布式鎖,那么我們需要了解分布式鎖到底應該有哪些特點: * 互斥性:和我們本地鎖一樣互斥性是最基本,但是分布式鎖需要保證在不同節點的不同線程的互斥。 * 可重入性:同一個節點上的同一個線程如果獲取了鎖之后那么也可以再次獲取這個鎖。 * 鎖超時:和本地鎖一樣支持鎖超時,防止死鎖。 * 高效,高可用:加鎖和解鎖需要高效,同時也需要保證高可用防止分布式鎖失效,可以增加降級。 * 支持阻塞和非阻塞:和ReentrantLock一樣支持lock和trylock以及tryLock(long timeOut)。 * 支持公平鎖和非公平鎖(可選):公平鎖的意思是按照請求加鎖的順序獲得鎖,非公平鎖就相反是無序的。這個一般來說實現的比較少。 使用redis 加鎖: ``` std::string threadId = Thread.currentThread().getId() set(key,threadId,30,NX) ``` 解鎖: ``` if(threadId.equals(redisClient.get(key))){ del(key) } ``` 但是,這樣做又隱含了一個新的問題,**判斷和釋放鎖是兩個獨立操作,不是原子性**。 我們都是追求極致的程序員,所以這一塊要用Lua腳本來實現: ``` String luaScript = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";** redisClient.eval(luaScript , Collections.singletonList(key), Collections.singletonList(threadId)); ``` 這樣一來,驗證和刪除過程就是原子操作了。
                  <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>

                              哎呀哎呀视频在线观看