बस, मुझे उस तरीके को ओवरराइड करना है जिसमें कैश सही कुंजी चुनता है क्योंकि कुछ फ़ील्ड (उदाहरण के लिए, टाइमस्टैम्प, संदेश आईडी इत्यादि) पर विचार नहीं किया जाना चाहिए एक कुंजी पुनर्प्राप्त करना मैं मुख्य ऑब्जेक्ट के वास्तविक हैश फ़ंक्शन को संशोधित नहीं कर सकता क्योंकि यह पहले से ही मेरे कोड में पहचानने के लिए उपयोग किया जा रहा है।
क्या यह गुवा कैश के साथ संभव है? और एक कामकाज के साथ?
यह मेरा विन्यास है:कुंजी डालने पर कस्टम बराबर/हैश (गुवा कैश)
CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).recordStats().
expireAfterWrite(DEFAULT_AGE, TimeUnit.DAYS).build(
new CacheLoader<Request, Response>() {
@Override
public Response load(Request request) {
return request.getResponse();
}
});
और ये मेरे हैश फंक्शन (मेरे कोड में कहीं और प्रयोग किया जाता) है:
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + code;
result = prime * result + messageID; // <= **this one shouldn't evaluated**
result = prime * result + Arrays.hashCode(payload);
result = prime * result + (int) (timestamp^timestamp >>> 32); // <= **this one shouldn't evaluated**
result = prime * result + (type == null ? 0 : type.hashCode());
result = prime * result + version;
return result;
}
Btw
, के अपने स्वयं के कार्यान्वयन का उपयोग कैश के इस प्रकार है हैश फ़ंक्शन (उदाहरण के लिए, आत्मनिरीक्षण के माध्यम से) या क्या यह डिफ़ॉल्ट का उपयोग कर रहा है?
** संपादित करें: **
के रूप में प्रतिक्रिया में कहा, सबसे अच्छा तरीका यह परिणाम प्राप्त करने के लिए एक आवरण वर्ग है।
मेरे समाधान:
/**
* Nested class to store a request as a key in the cache. It is needed to
* normalize the variable fields of the normal requests.
*/
private static final class CachedRequest extends Request {
private static CachedRequest fromRequest(Request request) {
// set only the fields that cannot change between two same requests
// ...
}
@Override
public int hashCode() {
HashFunction hashFunction = Hashing.md5();
HashCode hashCode;
// ...
return hashCode.asInt();
}
@Override
public boolean equals(Object obj) {
// coherent with hashCode()
// ...
}
}
मैं कल्पना नहीं कर सकता कि यह एक बहुत ही उपयोगी उपयोगिता होगी यदि यह अपने स्वयं के हैश कार्यान्वयन का उपयोग करता है। – jtahlborn
भी, क्या आप आगे बता सकते हैं कि "मैं अपने हैश() फ़ंक्शन को संशोधित नहीं कर सकता क्योंकि यह पहले से ही" वास्तविक "वस्तुओं को बराबर पहचानने के लिए उपयोग किया जाता है।" – jtahlborn
असल में मैं इस सुविधा को जोड़ने के लिए नहीं कह रहा हूं, लेकिन अगर कोई जानता है कि इस स्थिति से कैसे निपटें। – Hamal000