日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

如何用redis实现分布式锁?这篇文章教你用redisson实现分布式锁,封装之后的方法更好用!

發(fā)布時(shí)間:2025/3/19 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何用redis实现分布式锁?这篇文章教你用redisson实现分布式锁,封装之后的方法更好用! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

使用redission實(shí)現(xiàn)分布式鎖

添加配置類

import org.redisson.Redisson; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;/*** redisson 配置類*/ @Configuration public class RedissonConfig {@Value("${spring.redis.host}")private String host;@Value("${spring.redis.port}")private String port;@Value("${spring.redis.password}")private String password;@Beanpublic Redisson getRedisson(){Config config = new Config();config.useSingleServer().setAddress("redis://" + host + ":" + port);//.setPassword(password);//添加主從配置 // config.useMasterSlaveServers().setMasterAddress("").setPassword("").addSlaveAddress(new String[]{"",""});return (Redisson) Redisson.create(config);}}

測(cè)試

@RequestMapping("/redisson")public String redisson(){String lockKey = "product_001";//商品id作為鎖RLock lock = redisson.getLock(lockKey);try{//這里如果其他線程加鎖失敗,會(huì)while一直循環(huán)阻塞//同時(shí)在后臺(tái)起一個(gè)線程,每隔10秒(1/3的超時(shí)時(shí)間)會(huì)判斷這把鎖是否釋放,如果未釋放則刷新超時(shí)時(shí)間System.out.println("準(zhǔn)備嘗試獲取鎖");lock.lock(30, TimeUnit.SECONDS);System.out.println("進(jìn)來了,開始停8秒");Thread.sleep(8000);//這里寫邏輯} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();}return "success";}

原理

解析

1.使用redis設(shè)置過期時(shí)間(假如10秒),redisson會(huì)又一個(gè)監(jiān)聽線程,每隔一段時(shí)間(一般10*2/3=6秒)會(huì)刷新這個(gè)key的過期時(shí)間,防止業(yè)務(wù)沒有執(zhí)行完就釋放了鎖。

2.設(shè)置過期時(shí)間的目的:防止系統(tǒng)突然掛掉,死鎖。時(shí)間一過就可以釋放鎖。

3.當(dāng)鎖已經(jīng)被獲取之后,會(huì)一直不斷地嘗試獲取鎖(自旋鎖),直到鎖獲取成功,執(zhí)行業(yè)務(wù)邏輯。

4.鎖的key一般就是用業(yè)務(wù)的流水號(hào),或者商品的編號(hào),唯一的。

分布式鎖目的

1.高并發(fā)下實(shí)現(xiàn)串行化

2.實(shí)現(xiàn)冪等性(需要在代碼中進(jìn)行判斷)。

分布式鎖的缺點(diǎn)

1.降低系統(tǒng)性能。

2.系統(tǒng)繁雜更容易出現(xiàn)問題,不好維護(hù)。

?

總結(jié)

以上是生活随笔為你收集整理的如何用redis实现分布式锁?这篇文章教你用redisson实现分布式锁,封装之后的方法更好用!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。