Я собираюсь использовать кэш redis, где ключом является карта clojure (сериализована в байты с помощью nippy).
Могу ли я использовать хэш карты clojure в качестве ключа в кэше redis?
Другими словами, зависит ли хеш карты clojure только от значения структуры данных и не зависит от выделения памяти.
Расследование:
Я прошел по коду и нашелout IHashEq
интерфейс, который реализуется структурами данных clojure.
В результате IHashEq
impl заканчивается вызовом Object.hashCode
, который имеет следующий контракт:
Всякий раз, когда он вызываетсяодин и тот же объект более одного раза во время выполнения приложения Java, метод {@code hashCode}
должен последовательно возвращать одно и то же целое число при условии, что никакая информация, используемая в {@code equals}
сравнениях объекта, не изменяется.
Это целое число не должно оставаться согласованнымот одного выполнения приложения до другого выполнения того же приложения.
Ну, просто хочу уточнить, что я не может использовать хеш в качестве постоянного идентификатора в другом процессе, потому что:
- два равных значения дают два одинаковых хеш-кода, но не наоборот.Таким образом, существует вероятность столкновения
- , поэтому нет гарантии, что хеш карты clojure будет одинаковым для одинаковых значений в разных процессах jvm
Пожалуйста, подтвердите.