添加更多锁

This commit is contained in:
Jerry Yan 2025-04-05 17:41:50 +08:00
parent b4aa3619ba
commit ff82644f47
2 changed files with 24 additions and 60 deletions

View File

@ -38,6 +38,7 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
private static final Map<String, IRateLimiter> addFaceLimiters = new ConcurrentHashMap<>();
private static final Map<String, IRateLimiter> addDbLimiters = new ConcurrentHashMap<>();
private static final Map<String, IRateLimiter> listDbLimiters = new ConcurrentHashMap<>();
private static final Map<String, IRateLimiter> listFaceLimiters = new ConcurrentHashMap<>();
private static final Map<String, IRateLimiter> searchFaceLimiters = new ConcurrentHashMap<>();
private static final Map<String, IRateLimiter> deleteDbLimiters = new ConcurrentHashMap<>();
private static final Map<String, IRateLimiter> deleteEntityLimiters = new ConcurrentHashMap<>();
@ -62,40 +63,21 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
private IRateLimiter getLimiter(LOCK_TYPE type) {
switch (type) {
case ADD_DB:
if (addDbLimiters.get(config.getAccessKeyId()) == null) {
addDbLimiters.put(config.getAccessKeyId(), new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
}
return addDbLimiters.get(config.getAccessKeyId());
return addDbLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
case ADD_ENTITY:
if (addEntityLimiters.get(config.getAccessKeyId()) == null) {
addEntityLimiters.put(config.getAccessKeyId(), new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
}
return addEntityLimiters.get(config.getAccessKeyId());
return addEntityLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
case ADD_FACE:
if (addFaceLimiters.get(config.getAccessKeyId()) == null) {
addFaceLimiters.put(config.getAccessKeyId(), new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
}
return addFaceLimiters.get(config.getAccessKeyId());
return addFaceLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
case LIST_DB:
if (listDbLimiters.get(config.getAccessKeyId()) == null) {
listDbLimiters.put(config.getAccessKeyId(), new FixedRateLimiter(500, TimeUnit.MILLISECONDS));
}
return listDbLimiters.get(config.getAccessKeyId());
return listDbLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(500, TimeUnit.MILLISECONDS));
case LIST_FACE:
return listFaceLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(2));
case SEARCH_FACE:
if (searchFaceLimiters.get(config.getAccessKeyId()) == null) {
searchFaceLimiters.put(config.getAccessKeyId(), new FixedRateLimiter(200, TimeUnit.MILLISECONDS));
}
return searchFaceLimiters.get(config.getAccessKeyId());
return searchFaceLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(200, TimeUnit.MILLISECONDS));
case DELETE_DB:
if (deleteDbLimiters.get(config.getAccessKeyId()) == null) {
deleteDbLimiters.put(config.getAccessKeyId(), new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
}
return deleteDbLimiters.get(config.getAccessKeyId());
return deleteDbLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
case DELETE_ENTITY:
if (deleteEntityLimiters.get(config.getAccessKeyId()) == null) {
deleteEntityLimiters.put(config.getAccessKeyId(), new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
}
return deleteEntityLimiters.get(config.getAccessKeyId());
return deleteEntityLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
default:
return new FixedRateLimiter(600, TimeUnit.MILLISECONDS);
}
@ -240,6 +222,7 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
@Override
public List<String> listFace(String dbName, String prefix, Integer offset, Integer size) {
IRateLimiter listFaceLimiter = getLimiter(LOCK_TYPE.LIST_FACE);
ListFaceEntitiesRequest listFaceEntitiesRequest = new ListFaceEntitiesRequest();
listFaceEntitiesRequest.setDbName(dbName);
listFaceEntitiesRequest.setOrder("asc");
@ -256,6 +239,10 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
}
try (ClientWrapper clientWrapper = getClient()) {
IAcsClient client = clientWrapper.getClient();
try {
listFaceLimiter.acquire();
} catch (InterruptedException ignored) {
}
try {
ListFaceEntitiesResponse response = client.getAcsResponse(listFaceEntitiesRequest);
return response.getData().getEntities().stream().map(ListFaceEntitiesResponse.Data.Entity::getEntityId).collect(Collectors.toList());
@ -337,6 +324,7 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
ADD_ENTITY,
ADD_FACE,
LIST_DB,
LIST_FACE,
SEARCH_FACE,
DELETE_DB,
DELETE_ENTITY,

View File

@ -320,45 +320,21 @@ public class BceFaceBodyAdapter implements IFaceBodyAdapter {
private IRateLimiter getLimiter(LOCK_TYPE type) {
switch (type) {
case ADD_DB:
if (addDbLimiters.get(config.getAppId()) == null) {
addDbLimiters.put(config.getAppId(), new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
}
return addDbLimiters.get(config.getAppId());
return addDbLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
case ADD_FACE:
if (addFaceLimiters.get(config.getAppId()) == null) {
addFaceLimiters.put(config.getAppId(), new FixedRateLimiter(config.getAddQps()));
}
return addFaceLimiters.get(config.getAppId());
return addFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(config.getAddQps()));
case LIST_DB:
if (listDbLimiters.get(config.getAppId()) == null) {
listDbLimiters.put(config.getAppId(), new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
}
return listDbLimiters.get(config.getAppId());
return listDbLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
case LIST_FACE:
if (listFaceLimiters.get(config.getAppId()) == null) {
listFaceLimiters.put(config.getAppId(), new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
}
return listFaceLimiters.get(config.getAppId());
return listFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
case SEARCH_FACE:
if (searchFaceLimiters.get(config.getAppId()) == null) {
searchFaceLimiters.put(config.getAppId(), new FixedRateLimiter(config.getSearchQps()));
}
return searchFaceLimiters.get(config.getAppId());
return searchFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(config.getSearchQps()));
case DELETE_DB:
if (deleteDbLimiters.get(config.getAppId()) == null) {
deleteDbLimiters.put(config.getAppId(), new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
}
return deleteDbLimiters.get(config.getAppId());
return deleteDbLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
case DELETE_ENTITY:
if (deleteEntityLimiters.get(config.getAppId()) == null) {
deleteEntityLimiters.put(config.getAppId(), new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
}
return deleteEntityLimiters.get(config.getAppId());
return deleteEntityLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
case DELETE_FACE:
if (deleteFaceLimiters.get(config.getAppId()) == null) {
deleteFaceLimiters.put(config.getAppId(), new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
}
return deleteFaceLimiters.get(config.getAppId());
return deleteFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
default:
return new FixedRateLimiter(500, TimeUnit.MILLISECONDS);
}