将hash(map)用作持久缓存中的键

问题描述 投票:0回答:1

我将使用redis缓存,其中键是clojure映射(通过nippy序列化为字节)。

我可以将clojure映射的哈希值用作Redis缓存中的键吗?

换句话说,clojure映射哈希是否依赖于[[only依赖于数据结构值,并且不依赖于任何内存分配。

调查:

我浏览了代码,发现由Clojure数据结构实现的IHashEq接口。结果,IHashEq impl以具有以下协定的Object.hashCode的调用结束:

无论何时在同一对象上多次调用它,Java应用程序的执行,{@code hashCode}方法如果没有信息,则必须一致地返回相同的整数在{@code equals}比较中使用的对象上被修改。一次执行一次时,此整数不必保持一致应用程序再次执行同一应用程序。

嗯,只想澄清一下,我

不能

在其他进程中使用哈希作为持久化的ID,因为:
    两个相等的值给出两个相等的哈希码,但反之则不然。所以有碰撞的可能
  • 无法保证clojure映射哈希在不同的jvm进程中对于相同的值将是相同的
  • 请确认。
  • clojure
    1个回答
    0
    投票
    请注意两点:

    • 两个相等的值将产生相同的哈希码,但是两个不相等的值也可能给出相同的哈希码。因此发生碰撞的可能性使它成为错误的按键选择。
    • 不同的JVM应该为给定的值生成相同的哈希码,给定相同版本的Java和Clojure(很可能是针对不同版本,尽管不能保证)。
    © www.soinside.com 2019 - 2024. All rights reserved.