Springboot統合redis分散ロックの実現

1700 ワード

まずpomでxmlに必要なredis依存性とキャッシュ依存性を追加
    org.springframework.boot     spring-boot-starter-data-redis  
SpringBootのymlプロファイルの下にredisの構成を追加します.
spring:   redis:     host: 127.0.0.1     port: 6379     password: domcj  
自分のRedisサーバーのアドレス、ポート、パスワードを入力してください.パスワードがない人はpasswordを必要としません.
分散ロック次は分散ロックです.イベントでは、商品の特価が販売され、時間制限で秒殺シーンが行われると仮定します.例えばダブル11です.通常のやり方では、楽観ロックと悲観ロックがあります.楽観ロックと悲観ロックは何ですか.私は紹介しません.実はここのRedis分布式ロックも楽観的なロックです.つまり、リソースがロックされていても、その後のユーザーはブロックされず、異常/情報を返して、操作(ここでは買い占め)が成功しないことを教えます.
実現は簡単だ.次のクラスを見てください.
package com.domcj.myredis.redis.test;

import javax.annotation.Resource;

import org.springframework.data.redis.core.RedisTemplate;

/**
 * @description: !
 * @author: chenjian
 * @date: 2019/03/06 22:33
 */
public class DistributedLock {

   @Resource
   private RedisTemplate redisTemplate; 
   public boolean lock(String key, int expireTime) {
      long currentTime = System.currentTimeMillis() + expireTime;
      String valueStr = String.valueOf(currentTime);
      if (redisTemplate.opsForValue().setIfAbsent(key, valueStr)) {  //  redis  setnx  
         //      ,   key   
         return true;
      }
      //      -          ,              
      String currentValue  = (String) redisTemplate.opsForValue().get(key);
      //     
      if (currentValue !=null&&Long.parseLong(currentValue)