package nearcache;
import com.hazelcast.client.HazelcastClient;
import com.hazelcast.client.config.ClientConfig;
import com.hazelcast.config.Config;
import com.hazelcast.config.EvictionConfig;
import com.hazelcast.config.NativeMemoryConfig;
import com.hazelcast.config.NearCacheConfig;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.IMap;
import com.hazelcast.memory.MemorySize;
import static com.hazelcast.examples.helper.LicenseUtils.ENTERPRISE_LICENSE_KEY;
import static com.hazelcast.config.EvictionConfig.MaxSizePolicy.USED_NATIVE_MEMORY_PERCENTAGE;
import static com.hazelcast.config.InMemoryFormat.NATIVE;
import static com.hazelcast.config.NativeMemoryConfig.MemoryAllocatorType.STANDARD;
import static com.hazelcast.memory.MemoryUnit.MEGABYTES;
/**
* You have to set your Hazelcast Enterprise license key to make this code sample work.
* Please have a look at {@link com.hazelcast.examples.helper.LicenseUtils} for details.
*/
public class ClientHDNearCache {
public static void main(String[] args) {
// start server
HazelcastInstance server = Hazelcast.newHazelcastInstance(newConfig());
// start client
HazelcastInstance client = HazelcastClient.newHazelcastClient(newClientConfig("mapName"));
IMap<String, String> map = client.getMap("mapName");
for (int i = 0; i < 1000; i++) {
map.put("key-" + i, "value-" + i);
}
// first get() populates the Near cache with the remote entry
for (int i = 0; i < 1000; i++) {
map.get("key-" + i);
}
long ownedEntryCount = map.getLocalMapStats().getNearCacheStats().getOwnedEntryCount();
System.out.println("Near cache includes " + ownedEntryCount + " entries");
client.shutdown();
server.shutdown();
}
private static Config newConfig() {
Config config = new Config();
config.setLicenseKey(ENTERPRISE_LICENSE_KEY);
return config;
}
private static ClientConfig newClientConfig(String mapName) {
NativeMemoryConfig memoryConfig = new NativeMemoryConfig();
memoryConfig.setEnabled(true);
memoryConfig.setSize(new MemorySize(128, MEGABYTES));
memoryConfig.setAllocatorType(STANDARD);
NearCacheConfig nearCacheConfig = new NearCacheConfig();
EvictionConfig evictionConfig = nearCacheConfig.getEvictionConfig();
evictionConfig.setMaximumSizePolicy(USED_NATIVE_MEMORY_PERCENTAGE);
evictionConfig.setSize(90);
nearCacheConfig.setInMemoryFormat(NATIVE);
nearCacheConfig.setInvalidateOnChange(true);
nearCacheConfig.setCacheLocalEntries(true);
nearCacheConfig.setName(mapName);
ClientConfig clientConfig = new ClientConfig();
clientConfig.setNativeMemoryConfig(memoryConfig);
clientConfig.addNearCacheConfig(nearCacheConfig);
clientConfig.setLicenseKey(ENTERPRISE_LICENSE_KEY);
return clientConfig;
}
}