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分布式ロックも楽観的なロックです.つまり、リソースがロックされていても、その後のユーザーはブロックされず、異常/情報を返して、操作(ここでは買い占め)が成功しないことを教えます.
実現は簡単だ.次のクラスを見てください.
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)