色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用redis實現分布式鎖的lua腳本出現和資料說明

Wildesbeast ? 來源:搜狐新聞 ? 作者:程序猿的內心獨白 ? 2019-12-01 11:00 ? 次閱讀

1.lua簡介

從 Redis 2.6.0 版本開始,通過內置的 Lua 解釋器,可以使用 EVAL 命令對 Lua 腳本進行求值。

Redis 使用單個 Lua 解釋器去運行所有腳本,并且, Redis 也保證腳本會以原子性(atomic)的方式執行:當某個腳本正在運行的時候,不會有其他腳本或 Redis 命令被執行。這和使用 MULTI / EXEC 包圍的事務很類似。在其他別的客戶端看來,腳本的效果(effect)要么是不可見的(not visible),要么就是已完成的(already completed)。

2.Lua腳本配置流程

在resource目錄下面新增一個后綴名為.lua結尾的文件

編寫腳本執行內容

調用redisTemplate.execute方法執行腳本

3.lua eval:http://doc.redisfans.com//eval.html 4.本地起兩個服務節點作為演示。演示代碼如下:

本文采用定時調度模擬線程去獲取鎖(鏈接:詳解Scheduled定時調度)

使用-Dserver.port=9527,-Dserver.port=9528開啟多個節點

local lock_key = KEYS[1]

local lock_value = KEYS[2]

local result = redis.call(‘SETNX’,lock_key,lock_value)

if result == 1

then

redis.call(‘SETEX’,lock_key,60,lock_value)

return result

else

return result

end

lua腳本redis客戶端執行命令如下:

redis-cli --eval xxxx.lua value value 。..。..。

ps:執行成功返回1,失敗返回0

local lock_key = KEYS[1]

local lock_value = KEYS[2]

local lock_time_out = KEYS[3]

local result = redis.call(‘SET’,lock_key,lock_value,‘EX’,lock_time_out,‘NX’)

return result

ps:執行成功返回OK,失敗返回nil

@Component

public class RedisLock {

@Autowired

private RedisTemplate redisTemplate;

private DefaultRedis《Boolean》 lock;

@Value(“${server.port}”)

private String port;

@Scheduled(cron = “0/5 * * * * *”)

public void lock {

String lock = “LockNxExJob”;

Boolean absent = false;

try {

// 獲取鎖

absent = luaExpress (lock, port);

if (!absent) {

System.out.println (String.format (“獲取鎖失敗!被%s拿走”, redisTemplate.opsForValue .get (lock)));

} else {

System.out.println (String.format (“獲取鎖成功!值為:%s”, redisTemplate.opsForValue .get (lock)));

}

} catch (Exception e) {

e.printStackTrace ;

} finally {

// 釋放鎖

if (absent) redisTemplate.delete (lock);

}

}

public Boolean luaExpress(String key, String value) {

lock = new DefaultRedis《》 ;

lock.setSource (new ResourceSource (new ClassPathResource (“lua\redis.lua”)));

lock.setResultType (Boolean.class);

List《Object》 list = new ArrayList《》 ;

list.add (key);

list.add (value);

Boolean result = (Boolean) redisTemplate.execute (lock, list);

return result;

}

}

ps:當節點9527成功獲取分布式鎖,在沒有執行釋放鎖之前,服務節點宕掉了,節點9528則會無法獲取到鎖,直到設置鎖的超時時間結束,才能獲得鎖。避免了單節點掛掉了,鎖一直未被釋放的尷尬場景。

5.總結

Redis 使用單個 Lua 解釋器去運行所有腳本,并且, Redis 也保證腳本會以原子性(atomic)的方式執行:當某個腳本正在運行的時候,不會有其他腳本或 Redis 命令被執行,保證了只要能setnx成功就能setex。解決了服務獲取鎖成功,但突然宕機,未能設置超時時間問題。
責任編輯 LK

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4779

    瀏覽量

    68524
  • Lua
    Lua
    +關注

    關注

    0

    文章

    81

    瀏覽量

    10558
  • Redis
    +關注

    關注

    0

    文章

    374

    瀏覽量

    10871
收藏 人收藏

    評論

    相關推薦

    redis分布式場景實現

    今天帶大家深入剖析一下Redis分布式,徹底搞懂它。 場景 既然要搞懂Redis分布式,那肯
    的頭像 發表于 09-25 17:09 ?714次閱讀

    在 Java 中利用 redis 實現一個分布式服務

    在 Java 中利用 redis 實現一個分布式服務
    發表于 07-05 13:14

    Redis 分布式的正確實現方式

    分布式一般有三種實現方式:1. 數據庫樂觀;2. 基于Redis分布式
    的頭像 發表于 05-31 14:19 ?3588次閱讀

    Redis分布式的正確使用方式探討

    大家指出哈,一起學習一起進步。 什么是分布式 方案一:SETNX + EXPIRE 方案二:SETNX + value值是(系統時間+過期時間) 方案三:使用Lua腳本(包含SETN
    的頭像 發表于 03-30 10:53 ?1499次閱讀
    <b class='flag-5'>Redis</b><b class='flag-5'>分布式</b><b class='flag-5'>鎖</b>的正確使用方式探討

    Redis分布式真的安全嗎?

    今天我們來聊一聊Redis分布式
    的頭像 發表于 11-02 14:07 ?1000次閱讀

    如何使用注解實現redis分布式

    使用 Redis 作為分布式,將的狀態放到 Redis 統一維護,解決集群中單機 JVM 信息不互通的問題,規定操作順序,保護用戶的數據
    發表于 04-25 12:42 ?658次閱讀
    如何使用注解<b class='flag-5'>實現</b><b class='flag-5'>redis</b><b class='flag-5'>分布式</b><b class='flag-5'>鎖</b>!

    深入理解redis分布式

    深入理解redis分布式 哈嘍,大家好,我是指北君。 本篇文件我們來介紹如何Redis實現分布式
    的頭像 發表于 10-08 14:13 ?948次閱讀
    深入理解<b class='flag-5'>redis</b><b class='flag-5'>分布式</b><b class='flag-5'>鎖</b>

    redis分布式如何實現

    Redis分布式是一種基于Redis實現的機制,可以用于多個進程或多臺服務器之間對共享資源的并發訪問控制。在
    的頭像 發表于 11-16 11:29 ?524次閱讀

    redis分布式可能出現的問題

    Redis分布式是一種常用的機制,用于解決多個進程或多臺服務器對共享資源的并發訪問問題。然而,由于分布式環境的復雜性,使用
    的頭像 發表于 11-16 11:40 ?1375次閱讀

    redis分布式死鎖處理方案

    引言: 隨著分布式系統的廣泛應用,尤其是在大規模并發操作下,對并發控制的需求越來越高。Redis分布式作為一種常見的分布式
    的頭像 發表于 11-16 11:44 ?1748次閱讀

    redis分布式的應用場景有哪些

    Redis分布式是一種基于Redis實現分布式
    的頭像 發表于 12-04 11:21 ?1428次閱讀

    如何實現Redis分布式

    機制,下面將詳細介紹如何實現Redis分布式。 一、引言 在分布式系統中,多個節點可能同時讀寫同一共享資源。如果沒有
    的頭像 發表于 12-04 11:24 ?698次閱讀

    redis分布式可能出現的問題及解決方案

    Redis分布式是一種常見的解決分布式系統中并發問題的方案。雖然Redis分布式鎖具有許多優點
    的頭像 發表于 12-04 11:29 ?967次閱讀

    淺析Redis 分布式解決方案

    Redis 分布式解決方案是一種基于Redis實現分布式
    的頭像 發表于 12-04 14:00 ?489次閱讀

    redis分布式的缺點

    Redis分布式是一種常見的用于解決分布式系統中資源爭用問題的解決方案。盡管Redis分布式
    的頭像 發表于 12-04 14:05 ?1247次閱讀
    主站蜘蛛池模板: 大相蕉伊人狼人久草av| 久久精品熟女亚洲AV国产| 午夜片无码区在线观看| 好男人视频免费高清在线观看www| 亚洲国产成人私人影院| 久久精品亚洲AV高清网站性色| 4hu四虎免费影院www| 日本高清天码一区在线播放| 国产99视频精品一区| 亚洲视频精品在线观看| 秘密教学93话恩爱久等了免费| 东京热百度影音| 野花视频在线观看免费最新动漫| 美丽的姑娘BD在线观看| 丰满五十老女人性视频| 亚洲综合视频| 欧美人xxxxx| 狠狠撩色姣姣综合久久| 99视频在线观看免费视频| 亚洲 欧美 国产 综合 在线| 看看妇女的B免费看| 国产精品97久久AV色婷婷| 伊人久综合| 午夜福利在线观看6080| 任你躁国语自产二区在线播放| 美女被撕开胸罩狂揉大乳| 2020国产成人免费视频| 伦理片92伦理午夜| a级毛片高清免费视频| 日韩av片无码一区二区不卡电影| 黑人巨大交牲老太| brazzers巨臀系列| 在线播放免费人成毛片视频| 天美传媒在线完整免费观看网站 | 久久全国免费久久青青小草| 福利片午夜| 99久久久久亚洲AV无码| 一边亲着一面膜下奶韩剧免费| 日欧一片内射VA在线影院| 捆绑调教网站| 黄色毛片a|