import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
public class FTPConnectionLimiterPerIPWithRedisTemplate {
private RedisTemplate<String, Object> redisTemplate;
public FTPConnectionLimiterPerIPWithRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
public boolean acquireLock(String ipAddress) {
ValueOperations<String, Object> valueOps = redisTemplate.opsForValue();
String key = "ftp_connection_lock_" + ipAddress;
int currentConnections = Integer.parseInt(valueOps.get(key).toString());
if (currentConnections < 1) {
valueOps.increment(key);
return true;
}
return false;
}
public void releaseLock(String ipAddress) {
ValueOperations<String, Object> valueOps = redisTemplate.opsForValue();
String key = "ftp_connection_lock_" + ipAddress;
int currentConnections = Integer.parseInt(valueOps.get(key).toString());
if (currentConnections > 0) {
valueOps.decrement(key);
}
}
public static void main(String[] args) {
// 假设已经配置好了 RedisTemplate
RedisTemplate<String, Object> redisTemplate =...;
FTPConnectionLimiterPerIPWithRedisTemplate limiter = new FTPConnectionLimiterPerIPWithRedisTemplate(redisTemplate);
String ip = "192.168.1.100"; // 示例 IP 地址
// 尝试获取锁
boolean acquired = limiter.acquireLock(ip);
if (acquired) {
// 执行 FTP 相关操作
System.out.println("IP: " + ip + " 成功获取连接,进行 FTP 操作...");
// 操作完成后释放锁
limiter.releaseLock(ip);
} else {
System.out.println("IP: " + ip + " 达到最大连接数,无法获取连接。");
}
}
}