@Override public void init(String region, Properties properties) { this.region = region; J2CacheConfig config = new J2CacheConfig(); config.setSerialization(properties.getProperty("j2cache.serialization")); config.setBroadcast(properties.getProperty("j2cache.broadcast")); config.setL1CacheName(properties.getProperty("j2cache.L1.provider_class")); config.setL2CacheName(properties.getProperty("j2cache.L2.provider_class")); config.setSyncTtlToRedis(!"false".equalsIgnoreCase(properties.getProperty("j2cache.sync_ttl_to_redis"))); config.setDefaultCacheNullObject("true".equalsIgnoreCase(properties.getProperty("j2cache.default_cache_null_object"))); String l2_config_section = properties.getProperty("j2cache.L2.config_section"); if (l2_config_section == null || l2_config_section.trim().equals("")) { l2_config_section = config.getL2CacheName(); } final String l2_section = l2_config_section; properties.forEach((k, v) -> { String key = (String) k; if (key.startsWith(config.getBroadcast() + ".")) { config.getBroadcastProperties().setProperty(key.substring((config.getBroadcast() + ".").length()), (String) v); } if (key.startsWith(config.getL1CacheName() + ".")) { config.getL1CacheProperties().setProperty(key.substring((config.getL1CacheName() + ".").length()), (String) v); } if (key.startsWith(l2_section + ".")) { config.getL2CacheProperties().setProperty(key.substring((l2_section + ".").length()), (String) v); } }); J2CacheBuilder builder = J2CacheBuilder.init(config); channel = builder.getChannel(); }
/** * 加载配置 * * @return * @throws IOException */ private void initFromConfig(J2CacheConfig config) { SerializationUtils.init(config.getSerialization(), config.getSubProperties(config.getSerialization())); //初始化两级的缓存管理 this.holder = CacheProviderHolder.init(config, (region, key) -> { //当一级缓存中的对象失效时,自动清除二级缓存中的数据 Level2Cache level2 = this.holder.getLevel2Cache(region); level2.evict(key); if (!level2.supportTTL()) { //再一次清除一级缓存是为了避免缓存失效时再次从 L2 获取到值 this.holder.getLevel1Cache(region).evict(key); } log.debug("Level 1 cache object expired, evict level 2 cache object [{},{}]", region, key); if (policy != null) policy.sendEvictCmd(region, key); }); policy = ClusterPolicyFactory.init(holder, config.getBroadcast(), config.getBroadcastProperties()); log.info("Using cluster policy : {}", policy.getClass().getName()); }