jedisCluster中分布式鎖遇到的坑總結篇

2021-09-04 10:01:42 字數 885 閱讀 2749

不知道大家有沒有遇到過jediscluster.set()方法上鎖時出現上鎖成功但返回結果並不是ok,

具體需求如下:

1.跑批量訂單,需要對每個訂單進行操作。

2.其他地方可能操作這些訂單。

3.為了只有乙個地方操作,將所有的訂單逐一上鎖出現問題,

之後我對jediscluster進行測試 **如下我們做三次測試以確保實驗的準確性:

測試1:

結果如下

redis中檢視

測試2,這次只放置1000個:

結果測試3:

結果發現並無出現;

結論:

如上述可以看出次操作並無規律可循,不管處理數多少都可能會出現部分key存入成功但為正確返回的現象,因查閱許多資料都為發現有帖子出現過這類情況,故自行整理了一下 並最終找到解決辦法,希望可以幫助遇到相同問題的讀者解決,最終解決方案如下:

因個人認為出現這種問題的可能原因是set key值得時候 是操作的redis客戶端,導致redis集群在跳節點存入時返回出現差異

最後將

jediscluster.set(i + "ceshi"+i, "off", "nx", "ex", 60)

改寫為:

jediscluster.eval("return redis.call('set', keys[1],'1','nx', 'ex', '180') ", key,new arraylist<>())

成功解決問題,應用lua寫法直接對redis進行操作並未出現返回錯誤的情況。。。具體原因暫不明白,望大家踴躍討論!!!

使用jedisCluster操作Redis集群

第一步 建立乙個jedis物件。需要指定服務端的ip及埠。第二步 使用jedis物件運算元據庫,每個redis命令對應乙個方法。第三步 列印結果。第四步 關閉jedis test public void testjedis throws exception第一步 建立乙個jedispool物件。需要...

JedisCluster 鏈結redis集群

先貼 redis.clients jedis 2.8.2 jedispoolconfig config new jedispoolconfig config new jedispoolconfig config.setmaxtotal 60000 設定最大連線數 config.setmaxidle ...

Python中分布式程序原理

分布式程序是指將process程序分布到多台機器中,充分利用多台機器的效能完成複雜的任務.multiprocessing中的子模組managers支援吧多程序分布到多台機器上.實現思想 寫乙個服務端程序作為排程者,將任務分布到其他多個程序中,依靠網路通訊進行管理.服務端核心 import rando...