【问题标题】:Hazelcast IMap localkeyset sortingHazelcast IMap 本地键集排序
【发布时间】:2016-06-25 03:58:15
【问题描述】:

IMap 的本地键集是否已排序?或者,我是否可以代理要排序的支持数据结构?

我在 IMap 中存储临时密钥,并且不时寻找最旧的本地密钥。到目前为止,我正在做一个新的 TreeSet(imap.localKeyset()),但是,我想知道是否可以让本地支持数据结构自行排序。

谢谢, 苏塔努

【问题讨论】:

    标签: java sorting hazelcast sortedmap hazelcast-imap


    【解决方案1】:

    不,localKeySet 没有排序,只是一个常规 Set。如果您想保持顺序,我宁愿使用 Queue 而不是 TreeMap(除非您想根据其他一些参数而不是添加的 TimeStamp 对其进行排序)并实现一个 localEntryListener 来控制此 Queue。
    另一种选择是使用 TreeSet。

    public class HazelcastNode {
    
        private static Queue localEntryQueue = new LinkedList<>();
    
        public HazelcastNode(){
            HazelcastInstance hz = Hazelcast.newHazelcastInstance();
    
            hz.getMap("hzMap").addLocalEntryListener(new MyLocalMapListner());
        }
    
        public static void main(String[] args){
    
            HazelcastNode node = new HazelcastNode();
    
            //Get the Head of the queue which will be the oldest local entry
            HazelcastNode.localEntryQueue.peek();
        }
    
        private class MyLocalMapListner implements MapListener,EntryAddedListener,
                EntryRemovedListener,
                EntryUpdatedListener,
                EntryEvictedListener,
                EntryExpiredListener{
    
            @Override
            public void entryAdded(EntryEvent entryEvent) {
                HazelcastNode.localEntryQueue.add(entryEvent.getKey());
            }
    
            @Override
            public void entryEvicted(EntryEvent entryEvent) {
                HazelcastNode.localEntryQueue.remove(entryEvent.getKey());
            }
    
            @Override
            public void entryExpired(EntryEvent entryEvent) {
                HazelcastNode.localEntryQueue.remove(entryEvent.getKey());
            }
    
            @Override
            public void entryRemoved(EntryEvent entryEvent) {
                HazelcastNode.localEntryQueue.remove(entryEvent.getKey());
            }
    
            @Override
            public void entryUpdated(EntryEvent entryEvent) {
            }
        }
    }
    

    【讨论】:

    • 感谢您的回答。我最初有类似的设计,但使用了 TreeSet(问题中的错别字,现已更正),因为我需要排序。但是,我正在考虑优化的方法,如果我可以使用现有的数据结构。我想本地地图是 ConcurrentHashMaps,我希望 Hazelcast 可能会提供某种扩展机制,通过它我可以“插入”自定义地图。
    • 我认为 Hazelcast 不允许您插入自定义地图/键集实现。此外,Hazelcast 仅返回 keySet/values 的副本,而不是实际引用。
    猜你喜欢
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多