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())