use of top.tangyh.basic.model.cache.CacheKey in project lamp-util by zuihou.
the class SuperCacheServiceImpl method delCache.
protected void delCache(T model) {
Object id = getId(model);
if (id != null) {
CacheKey key = cacheKeyBuilder().key(id);
cacheOps.del(key);
}
}
use of top.tangyh.basic.model.cache.CacheKey in project lamp-util by zuihou.
the class SuperCacheServiceImpl method findByIds.
@Override
@Transactional(readOnly = true)
public List<T> findByIds(@NonNull Collection<? extends Serializable> ids, Function<Collection<? extends Serializable>, Collection<T>> loader) {
if (ids.isEmpty()) {
return Collections.emptyList();
}
// 拼接keys
List<CacheKey> keys = ids.stream().map(cacheKeyBuilder()::key).collect(Collectors.toList());
// 切割
List<List<CacheKey>> partitionKeys = Lists.partition(keys, MAX_BATCH_KEY_SIZE);
// 用切割后的 partitionKeys 分批去缓存查, 返回的是缓存中存在的数据
List<T> valueList = partitionKeys.stream().map(ks -> (List<T>) cacheOps.find(ks)).flatMap(Collection::stream).collect(Collectors.toList());
// 所有的key
List<Serializable> keysList = Lists.newArrayList(ids);
// 缓存不存在的key
Set<Serializable> missedKeys = Sets.newLinkedHashSet();
List<T> allList = new ArrayList<>();
for (int i = 0; i < valueList.size(); i++) {
T v = valueList.get(i);
Serializable k = keysList.get(i);
if (v == null) {
missedKeys.add(k);
} else {
allList.add(v);
}
}
// 加载miss 的数据,并设置到缓存
if (CollUtil.isNotEmpty(missedKeys)) {
if (loader == null) {
loader = this::listByIds;
}
Collection<T> missList = loader.apply(missedKeys);
missList.forEach(this::setCache);
allList.addAll(missList);
}
return allList;
}
use of top.tangyh.basic.model.cache.CacheKey in project lamp-util by zuihou.
the class SuperCacheServiceImpl method setCache.
protected void setCache(T model) {
Object id = getId(model);
if (id != null) {
CacheKey key = cacheKeyBuilder().key(id);
cacheOps.set(key, model);
}
}
Aggregations