Browse Source

Imrpvements to the cache

pull/4161/head
Andrii Shvaika 6 years ago
parent
commit
ab76d81c6f
  1. 6
      dao/src/main/java/org/thingsboard/server/dao/attributes/AttributeCacheKey.java
  2. 10
      dao/src/main/java/org/thingsboard/server/dao/attributes/CachedAttributesService.java

6
dao/src/main/java/org/thingsboard/server/dao/attributes/AttributeCacheKey.java

@ -20,10 +20,14 @@ import lombok.EqualsAndHashCode;
import lombok.Getter; import lombok.Getter;
import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.EntityId;
import java.io.Serializable;
@EqualsAndHashCode @EqualsAndHashCode
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public class AttributeCacheKey { public class AttributeCacheKey implements Serializable {
private static final long serialVersionUID = 2013369077925351881L;
private final String scope; private final String scope;
private final EntityId entityId; private final EntityId entityId;
private final String key; private final String key;

10
dao/src/main/java/org/thingsboard/server/dao/attributes/CachedAttributesService.java

@ -37,10 +37,12 @@ import org.thingsboard.server.dao.service.Validator;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.thingsboard.server.common.data.CacheConstants.ATTRIBUTES_CACHE; import static org.thingsboard.server.common.data.CacheConstants.ATTRIBUTES_CACHE;
@ -106,13 +108,11 @@ public class CachedAttributesService implements AttributesService {
return Futures.immediateFuture(cachedAttributes); return Futures.immediateFuture(cachedAttributes);
} }
ArrayList<String> notFoundAttributeKeys = new ArrayList<>(attributeKeys); Set<String> notFoundAttributeKeys = new HashSet<>(attributeKeys);
notFoundAttributeKeys.removeAll(wrappedCachedAttributes.keySet()); notFoundAttributeKeys.removeAll(wrappedCachedAttributes.keySet());
ListenableFuture<List<AttributeKvEntry>> result = attributesDao.find(tenantId, entityId, scope, notFoundAttributeKeys); ListenableFuture<List<AttributeKvEntry>> result = attributesDao.find(tenantId, entityId, scope, notFoundAttributeKeys);
return Futures.transform(result, foundInDbAttributes -> { return Futures.transform(result, foundInDbAttributes -> mergeDbAndCacheAttributes(entityId, scope, cachedAttributes, notFoundAttributeKeys, foundInDbAttributes), MoreExecutors.directExecutor());
return mergeDbAndCacheAttributes(entityId, scope, cachedAttributes, notFoundAttributeKeys, foundInDbAttributes);
}, MoreExecutors.directExecutor());
} }
@ -130,7 +130,7 @@ public class CachedAttributesService implements AttributesService {
return cachedAttributes; return cachedAttributes;
} }
private List<AttributeKvEntry> mergeDbAndCacheAttributes(EntityId entityId, String scope, List<AttributeKvEntry> cachedAttributes, ArrayList<String> notFoundAttributeKeys, List<AttributeKvEntry> foundInDbAttributes) { private List<AttributeKvEntry> mergeDbAndCacheAttributes(EntityId entityId, String scope, List<AttributeKvEntry> cachedAttributes, Set<String> notFoundAttributeKeys, List<AttributeKvEntry> foundInDbAttributes) {
for (AttributeKvEntry foundInDbAttribute : foundInDbAttributes) { for (AttributeKvEntry foundInDbAttribute : foundInDbAttributes) {
AttributeCacheKey attributeCacheKey = new AttributeCacheKey(scope, entityId, foundInDbAttribute.getKey()); AttributeCacheKey attributeCacheKey = new AttributeCacheKey(scope, entityId, foundInDbAttribute.getKey());
attributesCache.put(attributeCacheKey, foundInDbAttribute); attributesCache.put(attributeCacheKey, foundInDbAttribute);

Loading…
Cancel
Save