gpt4 book ai didi

java - 缓存键生成

转载 作者:行者123 更新时间:2023-11-30 12:00:53 26 4
gpt4 key购买 nike

我正在使用 ehcache(通过 Grails 插件)。将对象添加到缓存的方法要求键是可序列化的,因此典型的用法是:

def key = 22
def someObject = new Object();
cacheService.cache(key, true, someObject)

( boolean 参数表示对象应该被添加到分布式缓存还是本地缓存)

我的问题是我应该如何从值对象生成键,例如:

class Person implements Serializable {
String firstName
String lastName
Integer age
}

一种方法是提供 hashCode() 和 equals() 方法并使用 hashCode 作为键。在这种情况下,我不需要让 Person 类实现 Serializable。

或者,我可以简单地使用 Person 对象本身作为键。看起来我仍然需要提供 equals 和 hashCode 方法,但还需要实现 Serializable。但是,使用这种方法发生冲突的可能性似乎较小,因为一个 Person 只能等于另一个 Person 实例。

我假设 ehcache 使用一个键的 equals() 方法来确定该键是否已经存在于缓存中,这个假设是否正确?

上面列出的任何一种方法在本质上都比另一种更好,还是有另一种我没有考虑过的方法?

谢谢,唐

最佳答案

您的散列键问题大部分与可序列化问题正交。作为哈希键的答案,我会使用 Apache Commons HashCodeBuilder。它为您完成所有繁重的工作。与 equals 类似,使用 EqualsBuilder。

不过请记住,哈希码需要在对象的整个生命周期内保持不变,因此只对那些不会改变的内部元素进行哈希处理。

我会避免使用 Person 对象作为键,因为它会调用 equals() 来检查键比较,这可能比比较整数哈希码慢。

关于java - 缓存键生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1407523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com