PartitionedHashMap<String,String> map=new PartitionedHashMap<>(props, "demo-cluster"); Cache<String,String> l1_cache=new Cache<>(); l1_cache.setMaxNumberOfEntries(5); l1_cache.disableReaping(); map.setL1Cache(l1_cache); Cache<String, String> l2_cache=map.getL2Cache(); l2_cache.enableReaping(10000); map.setMigrateData(migrate_data); map.start(); String val=readLine("val: "); String caching_time=readLine("ttl: "); map.put(key, val, Long.parseLong(caching_time)); break; case '2': key=readLine("key: "); val=map.get(key); System.out.println("val = " + val); break; case '3': key=readLine("key: "); map.remove(key); break; case '4': System.out.println("address: " + map.getLocalAddress()); System.out.println("L1 cache:\n" + map.getL1Cache()); System.out.println("L2 cache:\n" + map.getL2Cache()); break; case 'q':
private void migrateData() { for(Map.Entry<K,Cache.Value<V>> entry: l2_cache.entrySet()) { K key=entry.getKey(); Address node=getNode(key); if(!node.equals(local_addr)) { Cache.Value<V> val=entry.getValue(); put(key, val.getValue(), val.getTimeout()); l2_cache.remove(key); if(log.isTraceEnabled()) log.trace("migrated " + key + " from " + local_addr + " to " + node); } } }
public void viewAccepted(View new_view) { System.out.println("view = " + new_view); this.view=new_view; for(MembershipListener l: membership_listeners) { l.viewAccepted(new_view); } if(migrate_data) { migrateData(); } }
/** * Adds a key/value to the cache, replacing a previous item if there was one * @param key The key * @param val The value * @param caching_time Time to live. -1 means never cache, 0 means cache forever. All other (positive) values * are the number of milliseconds to cache the item */ @ManagedOperation public void put(K key, V val, long caching_time) { Address dest_node=getNode(key); if(dest_node.equals(local_addr)) { l2_cache.put(key, val, caching_time); } else { sendPut(dest_node, key, val, caching_time, false); } if(l1_cache != null && caching_time >= 0) l1_cache.put(key, val, caching_time); }
JmxConfigurator.register(connector, server, BASENAME + ":name=connector"); cache=new PartitionedHashMap(props, "memcached-cluster"); cache.setCallTimeout(rpc_timeout); cache.setCachingTime(caching_time); cache.setMigrateData(migrate_data); JmxConfigurator.register(cache, server, BASENAME + ":name=cache"); JmxConfigurator.register(cache.getL2Cache(), server, BASENAME + ":name=l2-cache"); cache.setL1Cache(l1_cache); if(l1_reaping_interval > 0) l1_cache.enableReaping(l1_reaping_interval); if(l1_max_entries > 0) l1_cache.setMaxNumberOfEntries(l1_max_entries); JmxConfigurator.register(cache.getL1Cache(), server, BASENAME + ":name=l1-cache"); Cache<String,byte[]> l2_cache=cache.getL2Cache(); if(l2_max_entries > 0) l2_cache.setMaxNumberOfEntries(l2_max_entries); cache.start(); connector.start();
if(num == -1) throw new EOFException(); cache.put(req.key, data, req.caching_time); output.write(STORED); output.flush(); if(req.keys != null && !req.keys.isEmpty()) { for(String key: req.keys) { val=cache.get(key); if(val != null) { int length=val.length; cache.remove(req.key); output.write(DELETED); output.flush();
@ManagedOperation public void remove(K key) { Address dest_node=getNode(key); try { if(dest_node.equals(local_addr)) { l2_cache.remove(key); } else { disp.callRemoteMethod(dest_node, new MethodCall(REMOVE, key), new RequestOptions(ResponseMode.GET_NONE, call_timeout)); } if(l1_cache != null) l1_cache.remove(key); } catch(Throwable t) { if(log.isWarnEnabled()) log.warn("_remove() failed", t); } }
@ManagedOperation public void start() throws Exception { hash_function=new ConsistentHashFunction<>(); addMembershipListener((MembershipListener)hash_function); ch=new JChannel(props); Marshaller m=new CustomMarshaller(); disp=new RpcDispatcher(ch, this).setMarshaller(m).setMethodLookup(methods::get).setMembershipListener(this); ch.connect(cluster_name); local_addr=ch.getAddress(); view=ch.getView(); }
@ManagedOperation public void put(K key, V val) { put(key, val, caching_time); }
JmxConfigurator.register(connector, server, BASENAME + ":name=connector"); cache=new PartitionedHashMap(props, "memcached-cluster"); cache.setCallTimeout(rpc_timeout); cache.setCachingTime(caching_time); cache.setMigrateData(migrate_data); JmxConfigurator.register(cache, server, BASENAME + ":name=cache"); JmxConfigurator.register(cache.getL2Cache(), server, BASENAME + ":name=l2-cache"); cache.setL1Cache(l1_cache); if(l1_reaping_interval > 0) l1_cache.enableReaping(l1_reaping_interval); if(l1_max_entries > 0) l1_cache.setMaxNumberOfEntries(l1_max_entries); JmxConfigurator.register(cache.getL1Cache(), server, BASENAME + ":name=l1-cache"); Cache<String,byte[]> l2_cache=cache.getL2Cache(); if(l2_max_entries > 0) l2_cache.setMaxNumberOfEntries(l2_max_entries); cache.start(); connector.start();
if(num == -1) throw new EOFException(); cache.put(req.key, data, req.caching_time); output.write(STORED); output.flush(); if(req.keys != null && !req.keys.isEmpty()) { for(String key: req.keys) { val=cache.get(key); if(val != null) { int length=val.length; cache.remove(req.key); output.write(DELETED); output.flush();
/** * Adds a key/value to the cache, replacing a previous item if there was one * @param key The key * @param val The value * @param caching_time Time to live. -1 means never cache, 0 means cache forever. All other (positive) values * are the number of milliseconds to cache the item */ @ManagedOperation public void put(K key, V val, long caching_time) { Address dest_node=getNode(key); if(dest_node.equals(local_addr)) { l2_cache.put(key, val, caching_time); } else { sendPut(dest_node, key, val, caching_time, false); } if(l1_cache != null && caching_time >= 0) l1_cache.put(key, val, caching_time); }
Address dest_node=getNode(key);
@ManagedOperation public void start() throws Exception { hash_function=new ConsistentHashFunction<>(); addMembershipListener((MembershipListener)hash_function); ch=new JChannel(props); Marshaller m=new CustomMarshaller(); disp=new RpcDispatcher(ch, this).setMarshaller(m).setMethodLookup(methods::get).setMembershipListener(this); ch.connect(cluster_name); local_addr=ch.getAddress(); view=ch.getView(); }
@ManagedOperation public void put(K key, V val) { put(key, val, caching_time); }
PartitionedHashMap<String,String> map=new PartitionedHashMap<>(props, "demo-cluster"); Cache<String,String> l1_cache=new Cache<>(); l1_cache.setMaxNumberOfEntries(5); l1_cache.disableReaping(); map.setL1Cache(l1_cache); Cache<String, String> l2_cache=map.getL2Cache(); l2_cache.enableReaping(10000); map.setMigrateData(migrate_data); map.start(); String val=readLine("val: "); String caching_time=readLine("ttl: "); map.put(key, val, Long.parseLong(caching_time)); break; case '2': key=readLine("key: "); val=map.get(key); System.out.println("val = " + val); break; case '3': key=readLine("key: "); map.remove(key); break; case '4': System.out.println("address: " + map.getLocalAddress()); System.out.println("L1 cache:\n" + map.getL1Cache()); System.out.println("L2 cache:\n" + map.getL2Cache()); break; case 'q':
private void migrateData() { for(Map.Entry<K,Cache.Value<V>> entry: l2_cache.entrySet()) { K key=entry.getKey(); Address node=getNode(key); if(!node.equals(local_addr)) { Cache.Value<V> val=entry.getValue(); put(key, val.getValue(), val.getTimeout()); l2_cache.remove(key); if(log.isTraceEnabled()) log.trace("migrated " + key + " from " + local_addr + " to " + node); } } }
@ManagedOperation public void remove(K key) { Address dest_node=getNode(key); try { if(dest_node.equals(local_addr)) { l2_cache.remove(key); } else { disp.callRemoteMethod(dest_node, new MethodCall(REMOVE, key), new RequestOptions(ResponseMode.GET_NONE, call_timeout)); } if(l1_cache != null) l1_cache.remove(key); } catch(Throwable t) { if(log.isWarnEnabled()) log.warn("_remove() failed", t); } }
public void viewAccepted(View new_view) { System.out.println("view = " + new_view); this.view=new_view; for(MembershipListener l: membership_listeners) { l.viewAccepted(new_view); } if(migrate_data) { migrateData(); } }
Address dest_node=getNode(key);