Prevent Duplicate Storing in Redis
redis
Prevent Duplicate Storing in Redis
Enum 을 사용하여 Redis Key 를 사용하는 경우:
class RedisKey(private val key: String, private val enum: Enum) {
fun getKeyStr() = this.hashCode()
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other == null || javaClass != other.javaClass) return false
val redisKey = other as RedisKey
return key == redisKey.key && enum == redisKey.enum
}
override fun hashCode(): Int {
return key.hashCode() + enum.name.hashCode()
}
}
위 hashCode 메서드에서 enum.name() 대신 enum 자체를 넘겨준다면 JVM 이 재시작될때마다 새로운 주소값을 가진 인스턴스가 할당 되므로 조회가 안될 수 있다.
fun isDuplicated(redisKey: RedisKey): Boolean =
redisTemplate.opsForValue().isExistKey(redisKey.getKeyStr())