日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java基于mongodb實(shí)現(xiàn)分布式鎖的示例代碼

瀏覽:38日期:2023-02-10 15:59:00
目錄原理 實(shí)現(xiàn) 使用 原理

通過(guò)線(xiàn)程安全findAndModify 實(shí)現(xiàn)鎖

實(shí)現(xiàn)

定義鎖存儲(chǔ)對(duì)象:

/** * mongodb 分布式鎖 */@Data@NoArgsConstructor@AllArgsConstructor@Document(collection = 'distributed-lock-doc')public class LockDocument { @Id private String id; private long expireAt; private String token;}

定義Lock API:

public interface LockService { String acquire(String key, long expiration); boolean release(String key, String token); boolean refresh(String key, String token, long expiration);}

獲取鎖:

@Override public String acquire(String key, long expiration) {Query query = Query.query(Criteria.where('_id').is(key));String token = this.generateToken();Update update = new Update() .setOnInsert('_id', key) .setOnInsert('expireAt', System.currentTimeMillis() + expiration) .setOnInsert('token', token);FindAndModifyOptions options = new FindAndModifyOptions().upsert(true) .returnNew(true);LockDocument doc = mongoTemplate.findAndModify(query, update, options, LockDocument.class);boolean locked = doc.getToken() != null && doc.getToken().equals(token);// 如果已過(guò)期if (!locked && doc.getExpireAt() < System.currentTimeMillis()) { DeleteResult deleted = this.mongoTemplate.remove(Query.query(Criteria.where('_id').is(key) .and('token').is(doc.getToken()) .and('expireAt').is(doc.getExpireAt())),LockDocument.class); if (deleted.getDeletedCount() >= 1) {// 成功釋放鎖, 再次嘗試獲取鎖return this.acquire(key, expiration); }}log.debug('Tried to acquire lock for key {} with token {} . Locked: {}', key, token, locked);return locked ? token : null; }

原理:

先嘗試upsert鎖對(duì)象,如果成功且token一致,說(shuō)明拿到鎖 否則加鎖失敗 如果未拿到鎖,但是鎖已過(guò)期,嘗試刪除鎖 如果刪除成功,再次嘗試拿鎖如果失敗,說(shuō)明鎖可能已經(jīng)續(xù)期了

釋放和續(xù)期鎖:

@Override public boolean release(String key, String token) { Query query = Query.query(Criteria.where('_id').is(key) .and('token').is(token)); DeleteResult deleted = mongoTemplate.remove(query, LockDocument.class); boolean released = deleted.getDeletedCount() == 1; if (released) { log.debug('Remove query successfully affected 1 record for key {} with token {}', key, token); } else if (deleted.getDeletedCount() > 0) { log.error('Unexpected result from release for key {} with token {}, released {}', key, token, deleted); } else { log.error('Remove query did not affect any records for key {} with token {}', key, token); } return released; } @Override public boolean refresh(String key, String token, long expiration) { Query query = Query.query(Criteria.where('_id').is(key) .and('token').is(token)); Update update = Update.update('expireAt', System.currentTimeMillis() + expiration); UpdateResult updated = mongoTemplate.updateFirst(query, update, LockDocument.class); final boolean refreshed = updated.getModifiedCount() == 1; if (refreshed) { log.debug('Refresh query successfully affected 1 record for key {} ' + 'with token {}', key, token); } else if (updated.getModifiedCount() > 0) { log.error('Unexpected result from refresh for key {} with token {}, ' + 'released {}', key, token, updated); } else { log.warn('Refresh query did not affect any records for key {} with token {}. ' + 'This is possible when refresh interval fires for the final time ' + 'after the lock has been released', key, token); } return refreshed; }使用

private LockService lockService;private void tryAcquireLockAndSchedule() {while (!this.stopSchedule) { // 嘗試拿鎖 this.token = this.lockService.acquire(SCHEDULER_LOCK, 20000); if (this.token != null) { // 拿到鎖 } else {// 等待LOCK_EXPIRATION, 再次嘗試Thread.sleep(LOCK_EXPIRATION); }} } 先嘗試拿鎖,如果獲取到token,說(shuō)明拿鎖成功 否則可以sleep一段時(shí)間后再拿鎖

完整代碼,可到github查看 https://github.com/jadepeng/docker-pipeline/blob/main/pipeline-master/src/main/java/com/github/jadepeng/pipeline/service/impl/MongoLockService.java

到此這篇關(guān)于java基于mongodb實(shí)現(xiàn)分布式鎖的示例代碼的文章就介紹到這了,更多相關(guān)java mongodb實(shí)現(xiàn)分布式鎖內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美在线观看视频一区| 在线综合亚洲| 久久高清精品| 麻豆91小视频| 精品福利久久久| 日本特黄久久久高潮| 一区二区三区四区日韩| 欧美另类专区| 蜜臀久久久久久久| 亚洲精品成a人ⅴ香蕉片| 亚洲日本三级| 国产精品入口久久| 日韩av自拍| 影院欧美亚洲| 亚洲aa在线| 国产不卡av一区二区| 日韩久久电影| 91精品婷婷色在线观看| 精品视频一二| 日韩在线短视频| 亚洲视频www| 日韩国产在线观看| 国产一区 二区| 亚洲国产福利| 国产一区二区三区不卡视频网站 | 欧美成人基地| 国产欧美日韩影院| 日韩a一区二区| 欧美在线亚洲| 久久不见久久见中文字幕免费| 亚洲午夜天堂| 亚洲乱码久久| 麻豆理论在线观看| 国产美女精品视频免费播放软件| 国产一级成人av| 婷婷综合网站| 国产剧情在线观看一区| 99国产精品免费视频观看| 日韩精品a在线观看91| 婷婷综合六月| 69堂免费精品视频在线播放| 国产精品成人3p一区二区三区| 久久av一区| 日韩高清欧美| 极品av在线| 国产精品jk白丝蜜臀av小说| 免费久久精品视频| 99久久激情| 色黄视频在线观看| 老鸭窝一区二区久久精品| 日韩国产高清在线| 涩涩涩久久久成人精品| 男女性色大片免费观看一区二区 | 91亚洲一区| 欧美日韩一区二区三区不卡视频 | 欧美一区=区| 亚洲www啪成人一区二区| 国产精品流白浆在线观看| 一区二区三区四区精品视频| 欧美a级一区| 亚洲精品一区三区三区在线观看| 亚洲精品少妇| 日本在线视频一区二区| 中文字幕一区二区三区日韩精品 | 激情综合网址| 久久精品青草| 视频小说一区二区| 国产精选在线| 国产不卡人人| 成人精品视频| 久久男人av资源站| 日韩欧美在线中字| 欧美三级精品| 欧美日韩免费观看视频| 欧美日韩免费观看视频| 亚洲爱爱视频| 黄色网一区二区| 首页国产精品| 欧美成a人国产精品高清乱码在线观看片在线观看久| 日韩1区2区3区| 亚洲va久久久噜噜噜久久| 免费视频国产一区| 国产日韩综合| 欧美日韩中文字幕一区二区三区| 欧美国产不卡| 日韩在线观看一区| 一本大道色婷婷在线| 国产精品丝袜xxxxxxx| 欧美亚洲色图校园春色| 日韩高清中文字幕一区| 国产精品xxx在线观看| 国产成年精品| 久久久一二三| 午夜影院欧美| 激情丁香综合| 日韩va亚洲va欧美va久久| 在线国产一区二区| 亚洲成人一区在线观看| 久久毛片亚洲| 久久丁香四色| 久久激情婷婷| 日本亚洲最大的色成网站www| 欧美亚洲tv| 91精品一区国产高清在线gif| 久久精品一区二区三区中文字幕| 亚洲精品**中文毛片| 日韩不卡一区| 国产suv精品一区| 久久裸体视频| 亚洲韩日在线| 亚洲一区二区成人| 国产精品xvideos88| 中文字幕日本一区二区| 日产午夜精品一线二线三线| 亚洲a一区二区三区| 日本不卡在线视频| 久久99精品久久久野外观看| 亚洲深夜影院| 日韩久久视频| 欧美激情日韩| 久久成人亚洲| 日韩成人综合| 国产精品15p| 亚洲精品影视| 不卡中文字幕| 日韩伦理一区| 国内精品亚洲| 福利在线一区| 777久久精品| 国产一区二区精品| 久久人人88| 91tv亚洲精品香蕉国产一区| 国产不卡精品在线| 91亚洲人成网污www| 精品香蕉视频| 精品视频久久| 国产精品日韩精品在线播放| 国产日产精品_国产精品毛片| 日韩av二区在线播放| 青青草91视频| 日本免费一区二区视频| 蜜桃久久久久久久| 男女性色大片免费观看一区二区 | 亚洲天堂资源| 日韩黄色大片| 欧美影院三区| 亚洲va在线| 午夜在线精品偷拍| 亚洲人www| 日韩av资源网| 国产精品视频一区二区三区综合| 亚洲精品婷婷| 国产乱人伦精品一区| 日韩超碰人人爽人人做人人添| 欧美亚洲三区| 国产精品成人**免费视频 | 欧美激情麻豆| 香蕉视频亚洲一级| 九一精品国产| 日本大胆欧美人术艺术动态| 日韩手机在线| 亚洲精品三级| 欧美激情五月| 精品免费av在线| 中文在线中文资源| 中文另类视频| 欧美不卡高清| 在线亚洲人成| 久久香蕉精品| 国产第一亚洲| 亚洲人成网77777色在线播放| 国产精品久久久久久久久久妞妞| 日韩精品第一区| 深夜日韩欧美| 日韩国产专区| 国产精品任我爽爆在线播放| 亚洲一区二区三区四区五区午夜| 国产精品伦一区二区| 一区二区电影在线观看| 久久激情中文| 国产欧美大片| 成人午夜国产| 麻豆一区在线| 日韩高清三区| 99riav国产精品| 国产精品毛片久久久| 日韩三区免费| 久久成人av| 日韩精品免费观看视频| 秋霞影院一区二区三区| 国产精品伦一区二区| 九一成人免费视频| 国产不卡av一区二区| 中文精品视频| 国产91在线播放精品| 国产精品magnet| 欧美专区18| 欧美日韩视频| 国产精品av一区二区| 久久视频精品|