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

您的位置:首頁技術文章
文章詳情頁

SpringBoot集成redis實現分布式鎖的示例代碼

瀏覽:32日期:2023-03-28 18:13:28
1、準備

使用redis實現分布式鎖,需要用的setnx(),所以需要集成Jedis

需要引入jar,jar最好和redis的jar版本對應上,不然會出現版本沖突,使用的時候會報異常redis.clients.jedis.Jedis.set(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;

我使用的redis版本是2.3.0,Jedis使用的是3.3.0

<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.3.0</version> </dependency>2、配置參數

spring: redis: host: localhost port: 6379 password: root timeout: 5000 # Redis數據庫索引(默認為0) database: 0 # 連接池最大連接數(使用負值表示沒有限制) jedis: pool: # 連接池最大連接數(使用負值表示沒有限制) max-active: 8 # 連接池最大阻塞等待時間(使用負值表示沒有限制) max-wait: -1 # 連接池中的最大空閑連接 max-idle: 8 # 連接池中的最小空閑連接 min-idle: 0 # 獲取連接時檢測是否可用 testOnBorrow: true3、配置JedisPool

import lombok.extern.slf4j.Slf4j;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig; /** * Jedis配置項 * @autho ConnorSong * @date 2021/1/21 9:55 上午 */@Configuration@Slf4jpublic class JedisPoolCinfigration { @Bean public JedisPoolConfig jedisPoolConfig(@Value('${spring.redis.jedis.pool.max-active}') int maxActive, @Value('${spring.redis.jedis.pool.max-idle}') int maxIdle, @Value('${spring.redis.jedis.pool.min-idle}') int minIdle, @Value('${spring.redis.jedis.pool.max-wait}') long maxWaitMillis, @Value('${spring.redis.jedis.pool.testOnBorrow}') boolean testOnBorrow) { JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxTotal(maxActive); jedisPoolConfig.setMaxIdle(maxIdle); jedisPoolConfig.setMinIdle(minIdle); jedisPoolConfig.setMaxWaitMillis(maxWaitMillis); jedisPoolConfig.setTestOnBorrow(testOnBorrow); return jedisPoolConfig; } @Bean public JedisPool jedisPool(@Value('${spring.redis.host}') String host,@Value('${spring.redis.password}') String password,@Value('${spring.redis.port}') int port,@Value('${spring.redis.timeout}') int timeout, JedisPoolConfig jedisPoolConfig) { log.info('=====創建JedisPool連接池====='); if (StringUtils.isNotEmpty(password)) { return new JedisPool(jedisPoolConfig, host, port, timeout, password); } return new JedisPool(jedisPoolConfig, host, port, timeout); }}4、分布式鎖工具類

import lombok.extern.slf4j.Slf4j;import redis.clients.jedis.Jedis;import redis.clients.jedis.params.SetParams; import java.util.Collections; /** * jedis分布式鎖工具類 * @autho ConnorSong * @date 2021/1/20 6:26 下午 */@Slf4jpublic class JedisLockUtils { private static final String LOCK_SUCCESS = 'OK'; private static final Long RELEASE_SUCCESS = 1L; /** * 嘗試獲取分布式鎖 * @param jedis Redis客戶端 * @param lockKey 鎖 * @param lockValue value * @param expireTime 超期時間(秒) * @return 是否獲取成功 */ public static boolean tryGetLock(Jedis jedis, String lockKey, String lockValue, int expireTime) { log.info('----獲取Jedis分布式鎖----lockKey:{}', lockKey); try { //方案一,具有原子性,并且可以設置過期時間,避免拿到鎖后,業務代碼出現異常,無法釋放鎖 String result = jedis.set(lockKey, lockValue, new SetParams().nx().ex(expireTime)); if (LOCK_SUCCESS.equals(result)) {return true; } return false; //方案二,setnx()具有原子性,但是有后續判斷,整體不具有原子性,不能設置過期時間// //setnx(lockkey, 當前時間+過期超時時間),如果返回 1,則獲取鎖成功;如果返回 0 則沒有獲取到鎖// String value = new Date().getTime() + expireTime + '';// if(1 == jedis.setnx(lockKey, value)){//return true;// }else{//String oldExpireTime = jedis.get(lockKey);//if(Long.valueOf(oldExpireTime)< new Date().getTime()){// //鎖超時,可以獲取鎖重新設置鎖// //計算 newExpireTime = 當前時間+過期超時時間,然后 getset(lockkey, newExpireTime) 會返回當前 lockkey的值currentExpireTime// long newExpireTime = new Date().getTime() + expireTime;// String currentExpireTime = jedis.getSet(lockKey, newExpireTime + '');// if(currentExpireTime.equals(oldExpireTime)){// return true;// }//}//return false;// } }finally { returnResource(jedis); } } /** * 釋放分布式鎖 * @param jedis Redis客戶端 * @param lockKey 鎖 * @return 是否釋放成功 */ public static boolean closeLock(Jedis jedis, String lockKey, String lockValue) { log.info('----釋放Jedis分布式鎖----lockKey:{}, lockValue:{}', lockKey, lockValue); try { String script = 'if redis.call(’get’, KEYS[1]) == ARGV[1] then return redis.call(’del’, KEYS[1]) else return 0 end'; Object result = jedis.eval(script, Collections.singletonList(lockKey), Collections.singletonList(lockValue)); if (RELEASE_SUCCESS.equals(result)) {return true; } return false; }finally { returnResource(jedis); } } /** * 關閉資源 * @param jedis */ public static void returnResource(final Jedis jedis){ if(null != jedis){ jedis.close(); } }}

到此這篇關于SpringBoot集成redis實現分布式鎖的示例代碼的文章就介紹到這了,更多相關SpringBoot redis分布式鎖內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩免费看片| 日韩电影免费网址| re久久精品视频| 久久久久国产精品一区二区| 高清在线一区| 国产精品不卡| 久久免费视频66| 久久久亚洲欧洲日产| 麻豆精品蜜桃视频网站| 久久在线91| 亚洲黄色中文字幕| 欧洲亚洲一区二区三区| 国产精品一区2区3区| 日本v片在线高清不卡在线观看| 视频一区免费在线观看| 亚洲欧洲日韩精品在线| 日韩精品一区二区三区免费视频| 青草综合视频| 久久成人福利| 亚洲综合电影| 在线国产一区二区| 视频一区二区不卡| 日韩1区2区日韩1区2区| 国产精选久久| 国产一区二区三区成人欧美日韩在线观看| 国内一区二区三区| 日韩在线不卡| 国产一区成人| 一区二区精品| 国产精品永久| 欧美少妇精品| 国产亚洲永久域名| 欧美精品观看| 高清久久一区| 国产亚洲精品v| 91麻豆精品激情在线观看最新 | 蜜臀a∨国产成人精品| 免费看精品久久片| 国产区精品区| 美女福利一区二区三区| 国产视频欧美| 欧美一区二区三区久久| 精品久久一区| 伊人久久亚洲热| 欧美日韩一区二区三区不卡视频| 精品精品99| 亚洲精品一区二区妖精| 日本少妇一区二区| 欧美韩日一区| 在线精品观看| 日韩成人免费| 亚洲一区二区三区四区电影| 精品国产亚洲一区二区三区大结局 | 免费人成黄页网站在线一区二区| 欧美私人啪啪vps| 亚洲电影有码| 麻豆成人91精品二区三区| 国精品一区二区| 国产亚洲久久| 婷婷成人基地| 鲁大师精品99久久久| 国产日韩综合| a国产在线视频| 亚洲精品少妇| 久久精品亚洲人成影院| 欧美日韩1区| 国产一区日韩欧美| 国产精品亚洲成在人线| 久久一区二区中文字幕| 91福利精品在线观看| 欧美不卡视频| 国产一区二区三区成人欧美日韩在线观看 | 美女网站久久| 成人精品视频| 天堂俺去俺来也www久久婷婷| 91看片一区| 国产精品xxxav免费视频| 国产精品婷婷| 快播电影网址老女人久久| 欧美亚洲自偷自偷| 欧美日韩国产在线一区| 福利在线免费视频| 国产日产一区| 亚洲麻豆一区| 狠狠爱成人网| 欧美三级网址| 国产成人精品一区二区三区在线| 日韩国产一二三区| 中文在线不卡| 日韩精品水蜜桃| 麻豆91小视频| 国产精品一区二区av交换| 美女黄网久久| 午夜av一区| 一区二区亚洲精品| 午夜久久中文| 国产精品久久久久久久免费观看| 国产亚洲精品美女久久| 亚洲性视频在线| av不卡在线| 婷婷综合社区| 免费污视频在线一区| 国产一区二区三区国产精品| 国产精品一区二区99| 日韩精品一级| 日韩精品第二页| 蜜臀精品一区二区三区在线观看| 99成人在线视频| www在线观看黄色| 国产激情欧美| 日韩不卡一二三区| 亚洲三级网站| 亚洲bt欧美bt精品777| 久久国产高清| av亚洲在线观看| 激情欧美一区二区三区| 久久亚洲国产| 伊人成人在线视频| 免播放器亚洲| 免费人成精品欧美精品 | 国产精品视频一区二区三区综合| 中文字幕一区二区精品区| 99国产精品99久久久久久粉嫩| 神马午夜久久| 亚洲福利免费| 亚洲不卡视频| 欧美伊人久久| 国产精品mm| 麻豆免费精品视频| 国产成人精品福利| 亚洲国产成人二区| se01亚洲视频 | 日本午夜大片a在线观看| 理论片午夜视频在线观看| 精品资源在线| 福利在线免费视频| 亚洲欧美一区在线| 日韩精品一级中文字幕精品视频免费观看| 久久亚洲欧洲| 日韩精品社区| 国产精品v亚洲精品v日韩精品| 久久不见久久见中文字幕免费| 欧美黑人巨大videos精品| 国模精品一区| 欧美日中文字幕| 亚洲一卡久久| 日本欧美一区二区| 久久精品国产99| 午夜av成人| 亚洲欧美日韩高清在线| 中文字幕日本一区二区| 久久国产麻豆精品| av在线日韩| 亚洲一区二区成人| 欧美亚洲一区二区三区| 久久97视频| 欧美+日本+国产+在线a∨观看| 日韩在线一区二区| 欧美aa在线视频| 亚洲91精品| 日韩激情一区| 丝袜脚交一区二区| 涩涩涩久久久成人精品| 国产欧美日韩一区二区三区在线| 国产免费av一区二区三区| 国产91欧美| 亚洲欧美激情诱惑| 青青草精品视频| 日韩欧美自拍| 蜜臀av国产精品久久久久| 麻豆一区二区在线| 婷婷丁香综合| 国产精品麻豆成人av电影艾秋| 日韩欧美一区免费| 亚洲v天堂v手机在线| 国产成人精品免费视| 亚洲欧美久久| 久久久久黄色| 在线亚洲观看| 欧美韩一区二区| 99精品美女| 青青国产精品| 波多视频一区| 日本综合精品一区| 色婷婷久久久| 国产精品免费精品自在线观看| 久久久久网站| 国产午夜精品一区在线观看| 欧美中文一区二区| 欧美精品中文| 日韩欧美激情| 欧美日韩国产免费观看视频| 欧美精品99| 玖玖玖国产精品| 日韩福利一区| 日本中文字幕视频一区| 久久一级电影| 久久精品网址| 日本不卡一区二区| 亚洲精品99|