簡單基本的 redis 鎖
阿新 • • 發佈:2018-11-19
這個比較簡單的實現,不過也可以用的
之後考慮用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); }