婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 淺析Redis分布式鎖

淺析Redis分布式鎖

熱門標簽:百度商家地圖標注怎么做 太原營銷外呼系統 竹間科技AI電銷機器人 玄武湖地圖標注 小紅書怎么地圖標注店 最簡單的百度地圖標注 西藏教育智能外呼系統價格 地圖標注費用 地圖標注如何即時生效

近期工作遇到需要業務場景如下,需要每天定時推送給另一系統一批數據,但是由于系統是集群部署的,會造成統一情況下任務爭用的情況,所以需要增加分布式鎖來保證一定時間范圍內有一個Job來完成定時任務. 前期考慮的方案有采用ZooKeeper分布式任務,Quartz分布式任務調度,但是由于Zookeeper需要增加額外組件,Quartz需要增加表,并且項目中現在已經有Redis這一組件存在,所以考慮采用Redis分布式鎖的情況來完成分布式任務搶占這一功能

記錄一下走過的彎路.

第一版本:

@Override
	public T> Long set(String key,T value, Long cacheSeconds) {
		if (value instanceof HashMap) {
			BoundHashOperations valueOperations = redisTemplate.boundHashOps(key);
			valueOperations.putAll((Map) value);
			valueOperations.expire(cacheSeconds, TimeUnit.SECONDS);
		}
		else{
		//使用map存儲
		BoundHashOperations valueOperations = redisTemplate.boundHashOps(key);
		valueOperations.put(key, value);
		//秒
		valueOperations.expire(cacheSeconds, TimeUnit.SECONDS);
		}
		return null;
	}


	@Override
	public void del(String key) {
		redisTemplate.delete(key);
	}

采用set 和 del 完成鎖的占用與釋放,后經測試得知,set不是線程安全,在并發情況下常常會導致數據不一致.

第二版本:

/**
   * 分布式鎖
   * @param range 鎖的長度 允許有多少個請求搶占資源
   * @param key
   * @return
   */
  public boolean getLock(int range, String key) {
    ValueOperationsString, Integer> valueOper1 = template.opsForValue();
    return valueOper1.increment(key, 1) = range;
  }

  /**
   * 初始化鎖, 設置等于0
   * @param key
   * @param expireSeconds
   * @return
   */
  public void initLock(String key, Long expireSeconds) {
    ValueOperationsString, Integer> operations = template.opsForValue();
    template.setKeySerializer(new GenericJackson2JsonRedisSerializer());
    template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
    operations.set(key, 0, expireSeconds * 1000);
  }

  /**
   * 釋放鎖
   * @param key
   */
  public void releaseLock(String key) {
    ValueOperationsString, Integer> operations = template.opsForValue();
    template.setKeySerializer(new GenericJackson2JsonRedisSerializer());
    template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
    template.delete(key);
  }

采用redis的 increament操作完成鎖的搶占.但是釋放鎖時,是每個線程都可以刪除redis中的key值. 并且initLock會降上一次的操作給覆蓋掉,所以也廢棄掉此方法

最終版本:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnection;
import org.springframework.stereotype.Service;
import org.springframework.util.ReflectionUtils;
import redis.clients.jedis.Jedis;
import java.lang.reflect.Field;
import java.util.Collections;
@Service
public class RedisLock {
  private static final String LOCK_SUCCESS = "OK";
  private static final String SET_IF_NOT_EXIST = "NX";
  private static final String SET_WITH_EXPIRE_TIME = "PX";
  private static final Long RELEASE_SUCCESS = 1L;
  @Autowired
  private RedisConnectionFactory connectionFactory;
  /**
   * 嘗試獲取分布式鎖
   * @param lockKey 鎖
   * @param requestId 請求標識
   * @param expireTime 超期時間
   * @return 是否獲取成功
   */
  public boolean lock(String lockKey, String requestId, int expireTime) {
    Field jedisField = ReflectionUtils.findField(JedisConnection.class, "jedis");
    ReflectionUtils.makeAccessible(jedisField);
    Jedis jedis = (Jedis) ReflectionUtils.getField(jedisField, connectionFactory.getConnection());

    String result = jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);

    if (LOCK_SUCCESS.equals(result)) {
      return true;
    }
    return false;

  }
  /**
   * 釋放分布式鎖
   * @param lockKey 鎖
   * @param requestId 請求標識
   * @return 是否釋放成功
   */
  public boolean releaseLock(String lockKey, String requestId) {

    String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
    Object result = getJedis().eval(script, Collections.singletonList(lockKey), Collections.singletonList(requestId));

    if (RELEASE_SUCCESS.equals(result)) {
      return true;
    }
    return false;
  }
  public Jedis getJedis() {
    Field jedisField = ReflectionUtils.findField(JedisConnection.class, "jedis");
    ReflectionUtils.makeAccessible(jedisField);
    Jedis jedis = (Jedis) ReflectionUtils.getField(jedisField, connectionFactory.getConnection());
    return jedis;
  }
}

標簽:揚州 唐山 林芝 澳門 贛州 景德鎮 香港 廣東

巨人網絡通訊聲明:本文標題《淺析Redis分布式鎖》,本文關鍵詞  淺析,Redis,分布式,鎖,淺析,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《淺析Redis分布式鎖》相關的同類信息!
  • 本頁收集關于淺析Redis分布式鎖的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91香蕉国产在线观看软件| 1区2区3区精品视频| 亚洲免费在线观看| 在线观看av一区| 日韩高清不卡一区二区三区| 日韩女优制服丝袜电影| 精品一区二区免费在线观看| 国产日本欧美一区二区| 色婷婷狠狠综合| 蜜桃av噜噜一区| 国产精品高潮呻吟| 欧美电影影音先锋| 国产成人午夜精品5599| 亚洲成av人片在线观看| 久久免费美女视频| 欧美日韩黄色一区二区| 久久99精品久久久| 国产精品丝袜一区| 日韩精品影音先锋| 99久久精品免费看国产免费软件| 丝袜美腿高跟呻吟高潮一区| 欧美激情在线一区二区三区| 欧美日韩一区三区| 成人国产免费视频| 蜜臀av一区二区| 亚洲午夜电影在线| 国产欧美日韩亚州综合 | 欧美日本韩国一区| 国产成人无遮挡在线视频| 日本怡春院一区二区| 日韩一区二区免费电影| 91国在线观看| 成人av片在线观看| 国产一区二区在线影院| 久久精品久久精品| 国产精品妹子av| 欧美一区日本一区韩国一区| 欧美在线视频全部完| 国产成人av电影在线| 六月丁香综合在线视频| 亚洲综合视频在线观看| 一区二区三区**美女毛片| 最新热久久免费视频| 国产精品视频一二三区| 欧美国产日韩在线观看| 中文一区二区完整视频在线观看| 欧美中文字幕一区| av成人免费在线观看| 成人短视频下载| 成人永久免费视频| 懂色av一区二区三区蜜臀| 国产精品一区在线观看乱码 | 欧美一区二区三区视频| 欧美日韩成人一区| 9191成人精品久久| 色综合久久九月婷婷色综合| 色天天综合久久久久综合片| 91久久香蕉国产日韩欧美9色| 91丨九色丨国产丨porny| 91香蕉视频在线| 国产精品123| 成人精品在线视频观看| 99精品国产视频| 欧美性大战久久| 777午夜精品视频在线播放| 欧美日韩国产精品成人| 91久久精品一区二区| 欧美日免费三级在线| 欧美一二三区在线| 欧美韩国日本一区| 国产日产欧美一区二区视频| 中文字幕亚洲精品在线观看| 亚洲少妇屁股交4| 日韩高清不卡在线| 狠狠色综合播放一区二区| 依依成人精品视频| 乱一区二区av| 色综合咪咪久久| 精品国产一二三| 亚洲色图欧美激情| 中文字幕色av一区二区三区| 午夜精品福利视频网站| 国产激情一区二区三区桃花岛亚洲| 成人免费av资源| 制服丝袜日韩国产| 国产精品乱码一区二区三区软件| 亚洲图片一区二区| 国产老妇另类xxxxx| 欧美色图第一页| 国产喂奶挤奶一区二区三区| 亚洲男人的天堂一区二区| 亚洲综合色噜噜狠狠| 国产麻豆日韩欧美久久| 欧美色老头old∨ideo| 国产日韩av一区| 视频一区二区三区入口| 91免费在线看| 国产日韩欧美制服另类| 日本欧美肥老太交大片| 91久久免费观看| 中文在线资源观看网站视频免费不卡| 三级欧美韩日大片在线看| 欧美另类一区二区三区| 日韩不卡在线观看日韩不卡视频| 51精品国自产在线| 精品一区二区三区久久| 国产日韩欧美激情| 91在线观看美女| 亚洲第一狼人社区| 欧美tk丨vk视频| 懂色av噜噜一区二区三区av| 亚洲图片你懂的| 欧美人狂配大交3d怪物一区| 美女视频网站久久| 国产精品丝袜黑色高跟| 色www精品视频在线观看| 亚洲成人在线免费| 精品国产乱码久久久久久免费| 成人一道本在线| 亚洲一线二线三线视频| 91精品国产综合久久精品app | 欧美在线观看视频一区二区 | 日韩精品中文字幕在线不卡尤物| 黄页视频在线91| 亚洲男人天堂av网| 日韩精品一区国产麻豆| 成人午夜视频网站| 亚洲成a人v欧美综合天堂| 日韩欧美一级在线播放| 国产精品原创巨作av| 亚洲综合色成人| 久久蜜桃香蕉精品一区二区三区| 99精品偷自拍| 美日韩一区二区| 亚洲天堂av一区| 日韩精品专区在线| 欧日韩精品视频| 国产传媒一区在线| 视频在线在亚洲| 亚洲视频免费在线| 精品99一区二区| 精品视频1区2区3区| 成人国产视频在线观看| 秋霞国产午夜精品免费视频| 国产精品亲子乱子伦xxxx裸| 欧美一级淫片007| 在线观看欧美精品| www.视频一区| 国产一区二区中文字幕| 亚洲a一区二区| 亚洲欧洲制服丝袜| 久久精品一区四区| xnxx国产精品| 日韩一区二区在线看| 欧美三区免费完整视频在线观看| 成人丝袜18视频在线观看| 久久精品国产亚洲一区二区三区| 亚洲一区二区欧美激情| 亚洲视频资源在线| 国产三级三级三级精品8ⅰ区| 日韩一区二区精品| 51精品视频一区二区三区| 欧美日韩一区二区三区在线看| 91啪在线观看| 成人成人成人在线视频| 国产成人亚洲精品狼色在线 | 国产成人精品免费在线| 韩国成人在线视频| 久久精品理论片| 久久国产精品99精品国产| 免费成人你懂的| 日本aⅴ精品一区二区三区| 成人av集中营| 国产综合色视频| 国产在线乱码一区二区三区| 奇米影视在线99精品| 日韩av一区二区在线影视| 污片在线观看一区二区| 亚洲在线视频网站| 亚洲va欧美va人人爽| 日产欧产美韩系列久久99| 丝袜美腿亚洲色图| 日韩成人一级大片| 日本视频一区二区三区| 午夜精品成人在线| 奇米一区二区三区| 激情图区综合网| 成人午夜伦理影院| 91免费版在线看| 欧美在线一二三| 精品日韩欧美一区二区| 国产午夜精品一区二区三区嫩草| 国产精品三级电影| 亚洲欧美日韩中文字幕一区二区三区| 国产精品白丝在线| 亚洲va中文字幕| 老司机精品视频在线| 国产精品一级在线| 色综合天天在线| 日韩一二三区视频|