From 80b6cbfc9c861469146318d0b3dd5f8b8b525b8a Mon Sep 17 00:00:00 2001 From: xiejun <xiejun@vci-tech.com> Date: 星期五, 01 十一月 2024 15:11:19 +0800 Subject: [PATCH] Revert "集成获取mdm分发通用数据格式接口集成" --- Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/ratelimiter/RedisRateLimiterClient.java | 83 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 83 insertions(+), 0 deletions(-) diff --git a/Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/ratelimiter/RedisRateLimiterClient.java b/Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/ratelimiter/RedisRateLimiterClient.java new file mode 100644 index 0000000..5e7bd94 --- /dev/null +++ b/Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/ratelimiter/RedisRateLimiterClient.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2018-2028, DreamLu All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the dreamlu.net developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: DreamLu 鍗㈡槬姊� (596392912@qq.com) + */ + +package org.springblade.core.redis.ratelimiter; + +import lombok.RequiredArgsConstructor; +import org.springblade.core.tool.utils.CharPool; +import org.springframework.core.env.Environment; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.core.script.RedisScript; + +import java.util.Collections; +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** + * redis 闄愭祦鏈嶅姟 + * + * @author dream.lu + */ +@RequiredArgsConstructor +public class RedisRateLimiterClient implements RateLimiterClient { + /** + * redis 闄愭祦 key 鍓嶇紑 + */ + private static final String REDIS_KEY_PREFIX = "limiter:"; + /** + * 澶辫触鐨勯粯璁よ繑鍥炲�� + */ + private static final long FAIL_CODE = 0; + /** + * redisTemplate + */ + private final StringRedisTemplate redisTemplate; + /** + * redisScript + */ + private final RedisScript<List<Long>> script; + /** + * env + */ + private final Environment environment; + + @Override + public boolean isAllowed(String key, long max, long ttl, TimeUnit timeUnit) { + // redis key + String redisKeyBuilder = REDIS_KEY_PREFIX + + getApplicationName(environment) + CharPool.COLON + key; + List<String> keys = Collections.singletonList(redisKeyBuilder); + // 姣锛岃�冭檻涓讳粠绛栫暐鍜岃剼鏈洖鏀炬満鍒讹紝杩欎釜time鐢卞鎴风鑾峰彇浼犲叆 + long now = System.currentTimeMillis(); + // 杞负姣锛宲expire + long ttlMillis = timeUnit.toMillis(ttl); + // 鎵ц鍛戒护 + List<Long> results = this.redisTemplate.execute(this.script, keys, max + "", ttlMillis + "", now + ""); + // 缁撴灉涓虹┖杩斿洖澶辫触 + if (results == null || results.isEmpty()) { + return false; + } + // 鍒ゆ柇杩斿洖鎴愬姛 + Long result = results.get(0); + return result != FAIL_CODE; + } + + private static String getApplicationName(Environment environment) { + return environment.getProperty("spring.application.name", ""); + } + +} -- Gitblit v1.9.3