簡體   English   中英

從hazelcast IMap的密鑰中獲取密鑰值

[英]Getting key value from key of hazelcast IMap

我使用spring注釋將對象放置到hazelcast地圖中:

@Cacheable(value = "cacheName", key = "{ #someId1,#someId2}")

public String generateValue(Long someId1, Long someId2)

我想根據放置在Imap鍵上的條件使緩存中的對象無效。 我發現鍵是大小等於2的ArrayList。這是預期的結果。

 Set set = cache.keySet(); // this returns Set<ArrayList<Long>>

我嘗試在鍵上設置條件:

EntryObject e = new PredicateBuilder().getEntryObject();
Predicate predicateKey = e.key().get("__key#get(0)").equal(someId1).and(e.get("__key#get(1)").equal(someId2));

但是調用此謂詞最終會失敗:

Set<Long> idKeysToInvalidate = cache.keySet(predicateKey);

com.hazelcast.query.QueryException: java.lang.IllegalArgumentException: There is no suitable accessor for '__key#get(0)' on class 'class java.util.ArrayList'
at com.hazelcast.query.impl.getters.ReflectionHelper.createGetter(ReflectionHelper.java:176)

有人遇到過同樣的問題嗎?

我自己沒有做過,至少在按鍵上沒有做過,但是您可以嘗試__key#[0]否則請看這里: http : //docs.hazelcast.org/docs/3.8/manual/html-single/index.html #查詢功能於收藏和陣列

我解決了如下問題:

    EntryObject e = new PredicateBuilder().getEntryObject();
    List<Long> input = Arrays.asList(someId1, someId2);
    Predicate predicateKey = e.key().get("hashCode").equal(input.hashCode());
    Set<List> idKeysToInvalidate = cache.keySet(predicateKey);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM