国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

利用Java代碼調用Lua腳本改造分布式鎖

這篇具有很好參考價值的文章主要介紹了利用Java代碼調用Lua腳本改造分布式鎖。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

4.8 利用Java代碼調用Lua腳本改造分布式鎖

lua腳本本身并不需要大家花費太多時間去研究,只需要知道如何調用,大致是什么意思即可,所以在筆記中并不會詳細的去解釋這些lua表達式的含義。

我們的RedisTemplate中,可以利用execute方法去執(zhí)行l(wèi)ua腳本,參數對應關系就如下圖股

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

Java代碼

private static final DefaultRedisScript<Long> UNLOCK_SCRIPT;
    static {
        UNLOCK_SCRIPT = new DefaultRedisScript<>();
        UNLOCK_SCRIPT.setLocation(new ClassPathResource("unlock.lua"));
        UNLOCK_SCRIPT.setResultType(Long.class);
    }

public void unlock() {
    // 調用lua腳本
    stringRedisTemplate.execute(
            UNLOCK_SCRIPT,
            Collections.singletonList(KEY_PREFIX + name),
            ID_PREFIX + Thread.currentThread().getId());
}
經過以上代碼改造后,我們就能夠實現(xiàn) 拿鎖比鎖刪鎖的原子性動作了~

小總結:

基于Redis的分布式鎖實現(xiàn)思路:

  • 利用set nx ex獲取鎖,并設置過期時間,保存線程標示
  • 釋放鎖時先判斷線程標示是否與自己一致,一致則刪除鎖
    • 特性:
      • 利用set nx滿足互斥性
      • 利用set ex保證故障時鎖依然能釋放,避免死鎖,提高安全性
      • 利用Redis集群保證高可用和高并發(fā)特性

筆者總結:我們一路走來,利用添加過期時間,防止死鎖問題的發(fā)生,但是有了過期時間之后,可能出現(xiàn)誤刪別人鎖的問題,這個問題我們開始是利用刪之前 通過拿鎖,比鎖,刪鎖這個邏輯來解決的,也就是刪之前判斷一下當前這把鎖是否是屬于自己的,但是現(xiàn)在還有原子性問題,也就是我們沒法保證拿鎖比鎖刪鎖是一個原子性的動作,最后通過lua表達式來解決這個問題

但是目前還剩下一個問題鎖不住,什么是鎖不住呢,你想一想,如果當過期時間到了之后,我們可以給他續(xù)期一下,比如續(xù)個30s,就好像是網吧上網, 網費到了之后,然后說,來,網管,再給我來10塊的,是不是后邊的問題都不會發(fā)生了,那么續(xù)期問題怎么解決呢,可以依賴于我們接下來要學習redission啦

測試邏輯:

第一個線程進來,得到了鎖,手動刪除鎖,模擬鎖超時了,其他線程會執(zhí)行l(wèi)ua來搶鎖,當第一天線程利用lua刪除鎖時,lua能保證他不能刪除他的鎖,第二個線程刪除鎖時,利用lua同樣可以保證不會刪除別人的鎖,同時還能保證原子性。文章來源地址http://www.zghlxwxcb.cn/news/detail-846273.html

到了這里,關于利用Java代碼調用Lua腳本改造分布式鎖的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【Redis】5、Redis 的分布式鎖、Lua 腳本保證 Redis 命令的原子性

    【Redis】5、Redis 的分布式鎖、Lua 腳本保證 Redis 命令的原子性

    ?? 分布式鎖:滿足分布式系統(tǒng)或集群模式下 多進程可見 并且 互斥的 鎖 ?? 分布式鎖的核心是實現(xiàn)多進程之間鎖的互斥 ,而滿足這一點的方式有很多,常見的有三種: ??鎖獲取了,還沒有來得及設置過期時間服務器就宕機了 ??保證 setnx(獲取鎖)和 expire 設置過期時間兩

    2024年02月15日
    瀏覽(21)
  • Java中利用Redis,ZooKeeper,數據庫等實現(xiàn)分布式鎖(遙遙領先)

    Java中利用Redis,ZooKeeper,數據庫等實現(xiàn)分布式鎖(遙遙領先)

    1.1 什么是分布式鎖 在我們進行單機應用開發(fā)涉及并發(fā)同步的時候,我們往往采用synchronized或者ReentrantLock的方式來解決多線程間的代碼同步問題。但是當我們的應用是在分布式集群工作的情況下,那么就需要一種更加高級的鎖機制,來處理種跨機器的進程之間的數據同步問題

    2024年02月03日
    瀏覽(26)
  • java分布式項目需要進行注意的事項(代碼層面)

    在分布式系統(tǒng)中,使用主鍵自增會引發(fā)一系列問題。以下是幾個主要原因: 高并發(fā)沖突:在分布式系統(tǒng)中,多個節(jié)點同時生成主鍵時會產生沖突。因為每個節(jié)點都有自己的自增序列,同時生成的主鍵可能會有重復。 單點故障:使用主鍵自增通常依賴于一個中心節(jié)點或數據庫

    2024年04月22日
    瀏覽(24)
  • 分布式系統(tǒng)中的分布式鏈路追蹤與分布式調用鏈路

    本文分享自天翼云開發(fā)者社區(qū)《分布式系統(tǒng)中的分布式鏈路追蹤與分布式調用鏈路》,作者:c****w 在分布式系統(tǒng)中,由于服務間的調用關系復雜,需要實現(xiàn)分布式鏈路追蹤來跟蹤請求在各個服務中的調用路徑和時間消耗。這對問題排查和性能監(jiān)控都很重要。 常用的分布式鏈

    2024年01月19日
    瀏覽(29)
  • 分布式調用與高并發(fā)處理 Zookeeper分布式協(xié)調服務

    分布式調用與高并發(fā)處理 Zookeeper分布式協(xié)調服務

    單機架構 一個系統(tǒng)業(yè)務量很小的時候所有的代碼都放在一個項目中就好了,然后這個項目部署在一臺服務器上,整個項目所有的服務都由這臺服務器提供。 缺點: 服務性能存在瓶頸,用戶增長的時候性能下降等。 不可伸縮性 代碼量龐大,系統(tǒng)臃腫,牽一發(fā)動全身 單點故障

    2024年02月12日
    瀏覽(102)
  • 利用 docker 實現(xiàn)JMeter分布式壓測

    利用 docker 實現(xiàn)JMeter分布式壓測

    在工作中經常需要對一些關鍵接口做高QPS的壓測,JMeter是由Java 語言開發(fā),沒創(chuàng)建一個線程(虛擬用戶),JVM默認會為每個線程分配1M的堆棧內存空間。受限于單臺試壓機的配置很難實現(xiàn)太高的并發(fā)。所以,通過JMeter實現(xiàn)分布式,可以整合多臺主機的硬件資源,實現(xiàn)同時對被測

    2024年02月05日
    瀏覽(31)
  • lua腳本獲取table類型-Java使用lua腳本操作redis獲取zset元素的集合

    lua腳本獲取table類型-Java使用lua腳本操作redis獲取zset元素的集合 7.0點贊功能-定時持久化到數據庫-lua腳本的編寫_嗶哩嗶哩_bilibili https://www.bilibili.com/video/BV1bu411j75u 這個腳本主要是放到Springboot工程里的, 這里如果是向放到字段控制臺執(zhí)行,那就要加入 eval 以及其他參數:

    2024年02月13日
    瀏覽(17)
  • 分布式調用與高并發(fā)處理 Nginx

    分布式調用與高并發(fā)處理 Nginx

    Nginx是一款輕量級的Web服務器、反向代理服務器,由于它的內存占用少,啟動極快,高并發(fā)能力強,在互聯(lián)網項目中廣泛應用。Nginx 專為性能優(yōu)化而開發(fā),使用 異步非阻塞事件驅動模型 。 常見服務器 Apache Tomcat ? 沒有Nginx的情況 ? 有了Nginx的話 ?HTTP服務器 Nginx本身也是一個

    2024年02月15日
    瀏覽(20)
  • 【SkyWalking】分布式服務追蹤與調用鏈系統(tǒng)

    【SkyWalking】分布式服務追蹤與調用鏈系統(tǒng)

    SkyWalking是一個開源的觀測平臺,官網:Apache SkyWalking; 可監(jiān)控: 分布式追蹤調用鏈 、jvm內存變化、監(jiān)控報警、查看服務器基本配置信息。 在整個skywalking的系統(tǒng)中,有三個角色: 1.skywalking agent?和業(yè)務系統(tǒng)(jar)關聯(lián)在一起 ,負責收集各種監(jiān)控數據; 2.skywalking oapservice負責處

    2024年02月11日
    瀏覽(28)
  • 關于Unity在Xlua調用Lua腳本函數時報錯This type must add to CSharpCallLua 解決辦法

    使用委托來獲取xlua中的function是不行的 報錯腳本示范 即使全部接口打好標簽并且在編輯器中把兼容等級改為4.X 打包出去還是會出問題 建議在lua腳本中建立一個空的table 再把方法塞進去 比如 然后在c#端 就可以正常運作這個方法了

    2024年02月12日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包