1. 程式人生 > >簡單基本的 redis 鎖

簡單基本的 redis 鎖

 這個比較簡單的實現,不過也可以用的

之後考慮用lua指令碼實現

/**
 * 嘗試獲取簡單鎖
 * 這裡簡單的鎖 不考慮併發
 * 待擴充套件為 單條redis執行原子鎖 SETNX + EXPIRE
 * @param lockKey 鎖key
 * @param expireSeconds 超期時間 秒
 * @return 是否獲取成功
 */
public boolean tryGetDistributedLock(String lockKey, long expireSeconds) {
    if(StringUtils.isNotBlank(redisTemplate.opsForValue().get(lockKey))){
        return false;
    }
    redisTemplate.opsForValue().set(lockKey, "1", expireSeconds, TimeUnit.SECONDS);
    return true;
}

用法,手機發送簡訊鎖60秒 

	/**
	 * 獲得鎖
	 * 鎖60秒
	 *
	 * 這裡之後考慮 同時進行 ip 加鎖
	 * @param phone 手機號
	 * @param smsCodeTypeKey 型別key
	 * @return
	 */
	public static boolean tryGetDistributedLock(String phone, String smsCodeTypeKey){
		DataCache dataCache = (DataCache)SpringContextUtil.getBean("dataCache");
		return dataCache.tryGetDistributedLock(RedisKeyConst.CACHE_SMS_CODE_LOCK_PREFIX+smsCodeTypeKey+phone, 60);
	}