in jetcache-support/jetcache-redis-lettuce/src/main/java/com/alicp/jetcache/redis/lettuce/RedisLettuceCache.java [292:317]
protected CacheResult do_PUT_IF_ABSENT(K key, V value, long expireAfterWrite, TimeUnit timeUnit) {
try {
CacheValueHolder<V> holder = new CacheValueHolder(value, timeUnit.toMillis(expireAfterWrite));
byte[] newKey = buildKey(key);
RedisFuture<String> future = stringAsyncCommands.set(newKey, valueEncoder.apply(holder), SetArgs.Builder.nx().px(timeUnit.toMillis(expireAfterWrite)));
CacheResult result = new CacheResult(future.handle((rt, ex) -> {
if (ex != null) {
JetCacheExecutor.defaultExecutor().execute(() -> logError("PUT_IF_ABSENT", key, ex));
return new ResultData(ex);
} else {
if ("OK".equals(rt)) {
return new ResultData(CacheResultCode.SUCCESS, null, null);
} else if (rt == null) {
return new ResultData(CacheResultCode.EXISTS, null, null);
} else {
return new ResultData(CacheResultCode.FAIL, rt , null);
}
}
}));
setTimeout(result);
return result;
} catch (Exception ex) {
logError("PUT_IF_ABSENT", key, ex);
return new CacheResult(ex);
}
}