RedisTemplate加锁

时间:2025-03-21 22:49:19

@Autowired
   private RedisTemplate redisTemplate;

   /**
    * 加锁(自动重试)
    * 
    * @param key
    * @param lockKeyType
    * @return
    */
   public boolean tryLock(String key, String lockKeyType) {
      boolean flag = false;
      try {
         key = REDIS_LOCK_KEY_PREFIX + lockKeyType + key;
         ("加锁请求数据,key:{}", key);

         long lockTimeout = 500 * 161;
         long sleepTimeout = 500;

         for (int i = 1; i <= 160; i++) {
            flag = (key, lockTimeout);
            if (flag) {
               ("{}加锁第{}次,成功", key, i);
               break;
            } else {
//             ("{}加锁第{}次,失败", key, i);
               (sleepTimeout);
            }
         }
         if (flag) {
            ("{}加锁成功", key);
         } else {
            ("{}加锁失败", key);
         }
      } catch (Exception e) {
         ();
      }
      return flag;
   }

   /**
    * 加锁
    * @param key
    * @param lockKeyType
    * @return
    */
   public boolean lock(String key, String lockKeyType) {
      key = REDIS_LOCK_KEY_PREFIX + lockKeyType + key;
      ("加锁请求数据,key:{}", key);
      long lockTimeout = 1 * 1000;
      boolean flag = (key, lockTimeout);
      if (flag) {
         ("{}加锁成功", key);
      } else {
         ("{}加锁失败", key);
      }
      return flag;
   }

   private boolean lockOnce(String key, long timeout) {
      String value = key + "_"+();
      boolean flag = ().setIfAbsent(key, value,
            timeout, );
      return flag;
   }

   /**
    * 解锁
    *
    * @param key
    * @param lockKeyType
    */
   public void releaseLock(String key, String lockKeyType) {
      key = REDIS_LOCK_KEY_PREFIX + lockKeyType + key;
      ("解锁请求数据,key:{}", key);
      try {
         (key);
         ("{}解锁成功", key);
      } catch (Exception e) {
         ("{}解锁失败,{}", key, e);