diff --git a/core/src/main/kotlin/org/dreamexposure/discal/core/cache/CacheRepository.kt b/core/src/main/kotlin/org/dreamexposure/discal/core/cache/CacheRepository.kt index 797ce61a..0f7a8ae3 100644 --- a/core/src/main/kotlin/org/dreamexposure/discal/core/cache/CacheRepository.kt +++ b/core/src/main/kotlin/org/dreamexposure/discal/core/cache/CacheRepository.kt @@ -2,10 +2,13 @@ package org.dreamexposure.discal.core.cache import discord4j.common.util.Snowflake import java.time.Duration +import kotlin.random.Random interface CacheRepository { val ttl: Duration get() = Duration.ofMinutes(60) + val ttlWithJitter: Duration + get() = ttl.plusSeconds(Random.Default.nextLong(-333,333)) // Write suspend fun put(guildId: Snowflake? = null, key: K, value: V) diff --git a/core/src/main/kotlin/org/dreamexposure/discal/core/cache/JdkCacheRepository.kt b/core/src/main/kotlin/org/dreamexposure/discal/core/cache/JdkCacheRepository.kt index 344550cd..9afbbb1f 100644 --- a/core/src/main/kotlin/org/dreamexposure/discal/core/cache/JdkCacheRepository.kt +++ b/core/src/main/kotlin/org/dreamexposure/discal/core/cache/JdkCacheRepository.kt @@ -19,14 +19,14 @@ class JdkCacheRepository(override val ttl: Duration) : CacheReposito override suspend fun put(guildId: Snowflake?, key: K, value: V) { val guildedMap = getGuildedCache(guildId) - guildedMap[key] = Pair(Instant.now().plus(ttl), value) + guildedMap[key] = Pair(Instant.now().plus(ttlWithJitter), value) cache[guildId] = guildedMap } override suspend fun putMany(guildId: Snowflake?, values: Map) { val guildedMap = getGuildedCache(guildId) - guildedMap.putAll(values.mapValues { Pair(Instant.now().plus(ttl), it.value) }) + guildedMap.putAll(values.mapValues { Pair(Instant.now().plus(ttlWithJitter), it.value) }) cache[guildId] = guildedMap } diff --git a/core/src/main/kotlin/org/dreamexposure/discal/core/cache/RedisStringCacheRepository.kt b/core/src/main/kotlin/org/dreamexposure/discal/core/cache/RedisStringCacheRepository.kt index d521efb3..4d4e3324 100644 --- a/core/src/main/kotlin/org/dreamexposure/discal/core/cache/RedisStringCacheRepository.kt +++ b/core/src/main/kotlin/org/dreamexposure/discal/core/cache/RedisStringCacheRepository.kt @@ -25,12 +25,12 @@ class RedisStringCacheRepository( } override suspend fun put(guildId: Snowflake?, key: K, value: V) { - valueOps.setAndAwait(formatKey(guildId, key), objectMapper.writeValueAsString(value), ttl) + valueOps.setAndAwait(formatKey(guildId, key), objectMapper.writeValueAsString(value), ttlWithJitter) } override suspend fun putMany(guildId: Snowflake?, values: Map) { values.forEach { (key, value) -> - valueOps.setAndAwait(formatKey(guildId, key), objectMapper.writeValueAsString(value), ttl) + valueOps.setAndAwait(formatKey(guildId, key), objectMapper.writeValueAsString(value), ttlWithJitter) } }