解决多台服务记录冲突或者覆盖的问题,可以使用 Redis 的分布式锁来保证同一时刻只有一个服务可以进行记录接口调用次数的操作。具体实现步骤如下:
- 在 Redis 上创建一个计数器,用于记录接口调用次数。
- 使用 Redis 的分布式锁机制,保证同一时刻只有一个服务可以进行接口调用次数的记录。可以使用 Redisson 等 Redis 客户端库来实现分布式锁。
- 在记录接口调用次数的代码中,加入获取分布式锁的逻辑,保证同一时刻只有一个服务可以进行记录操作。
public class ApiCounter { private RedissonClient redissonClient; public ApiCounter(RedissonClient redissonClient) { this.redissonClient = redissonClient; } public void recordApiCall(String apiName) { String lockKey = "api-call-lock-" + apiName; RLock lock = redissonClient.getLock(lockKey); try { lock.lock(); // 获取分布式锁成功,进行接口调用次数记录 String counterKey = "api-call-counter-" + apiName; RAtomicLong counter = redissonClient.getAtomicLong(counterKey); counter.incrementAndGet(); } finally { // 释放分布式锁 lock.unlock(); } } }