Skip to content

Commit 95f4f67

Browse files
authored
Merge pull request #40 from SLNE-Development/fix/simple-redis-cache
Fix/Simple Redis Cache
2 parents abfa802 + b307e12 commit 95f4f67

2 files changed

Lines changed: 28 additions & 10 deletions

File tree

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ kotlin.stdlib.default.dependency=false
33
org.gradle.parallel=true
44
#org.gradle.caching=true
55
#org.gradle.configureondemand=true
6-
version=1.21.11-1.4.3
6+
version=1.21.11-1.4.4

surf-redis-core/src/main/kotlin/dev/slne/surf/redis/cache/SimpleRedisCacheImpl.kt

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -233,12 +233,7 @@ class SimpleRedisCacheImpl<K : Any, V : Any>(
233233
}
234234

235235
val bucket = api.redissonReactive.getBucket<String>(redisKey, StringCodec)
236-
val raw = bucket.get().awaitSingleOrNull()
237-
238-
if (raw == null) {
239-
nearCache.put(localKey, CacheEntry.Null)
240-
return null
241-
}
236+
val raw = bucket.get().awaitSingleOrNull() ?: return null
242237

243238
bucket.expire(ttl.toJavaDuration()).awaitSingleOrNull()
244239
refreshTtl(localKey, redisKey)
@@ -293,15 +288,38 @@ class SimpleRedisCacheImpl<K : Any, V : Any>(
293288
cacheNull: Boolean,
294289
loader: suspend () -> V?
295290
): V? {
296-
val existing = getCached(key)
297-
if (existing != null) return existing
298-
if (nearCache.getIfPresent(localKey(key)) == CacheEntry.Null) return null
291+
val localKey = localKey(key)
292+
293+
when (val entry = nearCache.getIfPresent(localKey)) {
294+
is CacheEntry.Value -> return entry.value
295+
CacheEntry.Null -> return null
296+
null -> Unit
297+
}
298+
299+
300+
val redisKey = redisKey(key)
301+
val bucket = api.redissonReactive.getBucket<String>(redisKey, StringCodec)
302+
val raw = bucket.get().awaitSingleOrNull()
303+
304+
if (raw != null) {
305+
bucket.expire(ttl.toJavaDuration()).awaitSingleOrNull()
306+
refreshTtl(localKey, redisKey)
307+
return if (raw == NULL_MARKER) {
308+
nearCache.put(localKey, CacheEntry.Null)
309+
null
310+
} else {
311+
val value = api.json.decodeFromString(serializer, raw)
312+
nearCache.put(localKey, CacheEntry.Value(value))
313+
value
314+
}
315+
}
299316

300317
val loaded = loader()
301318
when {
302319
loaded != null -> put(key, loaded)
303320
cacheNull -> putNull(key)
304321
}
322+
305323
return loaded
306324
}
307325

0 commit comments

Comments
 (0)