从 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#querying-in-collections-and-arrays
我解决了如下问题:
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);
我使用 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#querying-in-collections-and-arrays
我解决了如下问题:
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);