private long _lastExpire; // last time expiration ran /// <summary> /// Initializes a new instance of the <see cref="NearCacheBase"/> class. /// </summary> /// <param name="name">The name of the cache.</param> /// <param name="cluster">The cluster.</param> /// <param name="serializationService">The localization service.</param> /// <param name="loggerFactory">A logger factory.</param> /// <param name="nearCacheOptions">NearCache options.</param> protected NearCacheBase(string name, Cluster cluster, SerializationService serializationService, ILoggerFactory loggerFactory, NearCacheOptions nearCacheOptions) { if (string.IsNullOrWhiteSpace(name)) { throw new ArgumentException(ExceptionMessages.NullOrEmpty, nameof(name)); } Name = name; Cluster = cluster ?? throw new ArgumentNullException(nameof(cluster)); SerializationService = serializationService ?? throw new ArgumentNullException(nameof(serializationService)); LoggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory)); Options = nearCacheOptions ?? throw new ArgumentNullException(nameof(nearCacheOptions)); _entries = new ConcurrentAsyncDictionary <IData, NearCacheEntry>(); Statistics = new NearCacheStatistics(name); _lastExpire = Clock.Never; _maxSize = nearCacheOptions.MaxSize; _maxIdleMilliseconds = nearCacheOptions.MaxIdleSeconds * 1000; InMemoryFormat = nearCacheOptions.InMemoryFormat; _timeToLive = nearCacheOptions.TimeToLiveSeconds * 1000; _evictionPolicy = nearCacheOptions.EvictionPolicy; _evictionComparer = GetEvictionComparer(_evictionPolicy); _evictionPercentage = nearCacheOptions.EvictionPercentage; _cleanupInterval = nearCacheOptions.CleanupPeriodSeconds * 1000; }
/// <summary> /// Gets the record comparer corresponding to an eviction policy. /// </summary> /// <param name="policy">The eviction policy.</param> /// <returns>The record comparer corresponding to the specified eviction policy.</returns> private static IComparer <NearCacheEntry> GetEvictionComparer(EvictionPolicy policy) { return(policy switch { EvictionPolicy.Lfu => new LfuComparer(), EvictionPolicy.Lru => new LruComparer(), EvictionPolicy.None => new DefaultComparer(), _ => throw new NotSupportedException() });
private IComparer <CacheRecord> GetComparer(EvictionPolicy policy) { switch (policy) { case EvictionPolicy.Lfu: return(new LfuComparer()); case EvictionPolicy.Lru: return(new LruComparer()); } return(new DefaultComparer()); }
protected BaseNearCache(string name, HazelcastClient client, NearCacheConfig nearCacheConfig) { _name = name; Client = client; _maxSize = nearCacheConfig.MaxSize; _maxIdleMillis = nearCacheConfig.MaxIdleSeconds * 1000; _inMemoryFormat = nearCacheConfig.InMemoryFormat; _timeToLiveMillis = nearCacheConfig.TimeToLiveSeconds * 1000; _evictionPolicy = nearCacheConfig.EvictionPolicy; _records = new ConcurrentDictionary <IData, Lazy <NearCacheRecord> >(); _canCleanUp = new AtomicBoolean(true); _canEvict = new AtomicBoolean(true); _lastCleanup = Clock.CurrentTimeMillis(); _selectedComparer = GetComparer(_evictionPolicy); _stat = new NearCacheStatistics(); InvalidateOnChange = nearCacheConfig.InvalidateOnChange; }
public ClientNearCache(string mapName, ClientNearCacheType cacheType, ClientContext context, NearCacheConfig nearCacheConfig) { this.mapName = mapName; this.cacheType = cacheType; this.context = context; maxSize = nearCacheConfig.GetMaxSize(); maxIdleMillis = nearCacheConfig.GetMaxIdleSeconds() * 1000; inMemoryFormat = nearCacheConfig.GetInMemoryFormat(); timeToLiveMillis = nearCacheConfig.GetTimeToLiveSeconds() * 1000; invalidateOnChange = nearCacheConfig.IsInvalidateOnChange(); evictionPolicy = (EvictionPolicy)Enum.Parse(typeof(EvictionPolicy), nearCacheConfig.GetEvictionPolicy()); cache = new ConcurrentDictionary <IData, CacheRecord>(); canCleanUp = new AtomicBoolean(true); canEvict = new AtomicBoolean(true); lastCleanup = Clock.CurrentTimeMillis(); if (invalidateOnChange) { AddInvalidateListener(); } }
public void SetEvictionPolicy(EvictionPolicy value) { if (value is ObjectExpirationPolicy) { PropertyInfo propertyInfo = this.Type.GetProperty(((ObjectExpirationPolicy)value).TimestampPropertyName); if (propertyInfo == null) { throw new ArgumentException("Object expiration policy refers to a nonexistent timestamp property"); } if (propertyInfo.PropertyType != typeof(DateTime)) { throw new ArgumentException("Object expiration policy refers to an invalid timestamp property"); } if (propertyInfo.IsIgnored()) { throw new ArgumentException("Object expiration policy refers to an ignored timestamp property"); } } var client = this.Entry.client; var payload = new EvictionPolicyPayload(PayloadAction.Set, value, this.Entry.Id, client.ClientId); client.SendPublishEvent(payload); }
public void SetEvictionPolicy(EvictionPolicy value) { if (value is ObjectExpirationPolicy) { PropertyInfo propertyInfo = this.Type.GetProperty(((ObjectExpirationPolicy)value).TimestampPropertyName); if (propertyInfo == null) { throw new ArgumentException("Object expiration policy refers to a nonexistent timestamp property"); } if (propertyInfo.PropertyType != typeof(DateTime)) { throw new ArgumentException("Object expiration policy refers to an invalid timestamp property"); } if (propertyInfo.IsIgnored()) { throw new ArgumentException("Object expiration policy refers to an ignored timestamp property"); } } var client = this.Entry.client; var payload = new EvictionPolicyPayload(PayloadAction.Set, value, this.Entry.Id, client.ClientId); client.SendPublishEvent(payload); }
public static Job NewWithNeverExpireDefault(string id) { return(new Job(id, LogicOfTo <IHasId, IExpirable> .New((x) => { return EvictionPolicy.BuildNeverExpirable(); }))); }
public object Clone() { CacheServerConfigSetting config = new CacheServerConfigSetting(); config.cacheType = this.cacheType; config.InProc = InProc; config.Log = Log != null ? (Alachisoft.NCache.Config.Dom.Log)Log.Clone() : null; config.PerfCounters = PerfCounters != null ? (Alachisoft.NCache.Config.Dom.PerfCounters)PerfCounters.Clone() : null; config.Cleanup = Cleanup != null ? (Alachisoft.NCache.Config.Dom.Cleanup)Cleanup.Clone() : null; config.Storage = Storage != null ? (Alachisoft.NCache.Config.Dom.Storage)Storage.Clone() : null; config.EvictionPolicy = EvictionPolicy != null ? (Alachisoft.NCache.Config.Dom.EvictionPolicy)EvictionPolicy.Clone() : null; config.ExpirationPolicy = ExpirationPolicy != null ? (Alachisoft.NCache.Config.Dom.ExpirationPolicy)ExpirationPolicy.Clone() : null; config.backingSource = this.backingSource != null ? (Alachisoft.NCache.Config.Dom.BackingSource) this.backingSource.Clone() : null; config.QueryIndices = QueryIndices != null ? (Alachisoft.NCache.Config.Dom.QueryIndex)QueryIndices.Clone() : null; config.Notifications = Notifications != null ? (Alachisoft.NCache.Config.Dom.Notifications)Notifications.Clone() : null; config.SQLDependencyConfig = SQLDependencyConfig != null ? (Alachisoft.NCache.Config.Dom.SQLDependencyConfig)SQLDependencyConfig.Clone() : null; config.SynchronizationStrategy = SynchronizationStrategy != null ? (Alachisoft.NCache.Config.Dom.SynchronizationStrategy)SynchronizationStrategy.Clone() : null; config.cacheTopology = this.cacheTopology; config.DataFormat = this.DataFormat; config.ClientDeathDetection = ClientDeathDetection != null ? (ClientDeathDetection)ClientDeathDetection.Clone() : null; config.TaskConfiguration = TaskConfiguration != null ?(TaskConfiguration)TaskConfiguration.Clone() : null; config.ClientActivityNotification = ClientActivityNotification != null ? (ClientActivityNotification)ClientActivityNotification.Clone() : null; return(config); }
/// <summary> /// Converts the <see cref="sourceValue" /> parameter to the <see cref="destinationType" /> parameter using <see cref="formatProvider" /// /> and <see cref="ignoreCase" /> /// </summary> /// <param name="sourceValue">the <see cref="System.Object"/> to convert from</param> /// <param name="destinationType">the <see cref="System.Type" /> to convert to</param> /// <param name="formatProvider">not used by this TypeConverter.</param> /// <param name="ignoreCase">when set to <c>true</c>, will ignore the case when converting.</param> /// <returns> /// an instance of <see cref="EvictionPolicy" />, or <c>null</c> if there is no suitable conversion. /// </returns> public override object ConvertFrom(object sourceValue, global::System.Type destinationType, global::System.IFormatProvider formatProvider, bool ignoreCase) => EvictionPolicy.CreateFrom(sourceValue);
public static void AddBIPCache(string deviceName, int associativity, int setCount, int lineSize, int missTime, int hitTime, EvictionPolicy ev) { output.WriteLine("Root MemoryDevice Begin"); output.WriteLine("String DeviceType BIPMOESICache"); output.WriteLine("String DeviceName " + deviceName); output.WriteLine("Int DeviceID " + (index++)); output.WriteLine("Int LineSize " + lineSize); output.WriteLine("Int Associativity " + associativity); output.WriteLine("Int SetCount " + setCount); output.WriteLine("Int HitTime " + hitTime); output.WriteLine("Int MissTime " + missTime); if (deviceName.Contains("L1")) { output.WriteLine("Int TopCache 1"); } else { output.WriteLine("Int TopCache 0"); } if (ev == EvictionPolicy.LRU) { output.WriteLine("String EvictionPolicy LRU"); } else { output.WriteLine("String EvictionPolicy Random"); } output.WriteLine("End"); }
public object Clone() { CacheServerConfigSetting config = new CacheServerConfigSetting(); config.Name = Name != null ? (string)Name.Clone() : null; config.cacheType = this.cacheType; config.InProc = InProc; config.Alias = Alias; config.LastModified = LastModified != null ? (string)LastModified.Clone() : null; config.Log = Log != null ? (Alachisoft.NCache.Config.Dom.Log)Log.Clone() : null; config.PerfCounters = PerfCounters != null ? (Alachisoft.NCache.Config.Dom.PerfCounters)PerfCounters.Clone() : null; config.autoBalancing = this.autoBalancing != null ? (Alachisoft.NCache.Config.Dom.AutoLoadBalancing) this.autoBalancing.Clone() : null; config.Cleanup = Cleanup != null ? (Alachisoft.NCache.Config.Dom.Cleanup)Cleanup.Clone() : null; config.Storage = Storage != null ? (Alachisoft.NCache.Config.Dom.Storage)Storage.Clone() : null; config.EvictionPolicy = EvictionPolicy != null ? (Alachisoft.NCache.Config.Dom.EvictionPolicy)EvictionPolicy.Clone() : null; config.QueryIndices = QueryIndices != null ? (Alachisoft.NCache.Config.Dom.QueryIndex)QueryIndices.Clone() : null; config.cacheTopology = this.cacheTopology; return(config); }
public object Clone() { CacheServerConfigSetting config = new CacheServerConfigSetting(); config.cacheType = this.cacheType; config.InProc = InProc; config.LastModified = LastModified != null ? (string)LastModified.Clone() : null; config.Log = Log != null ? (Alachisoft.NCache.Config.Dom.Log)Log.Clone() : null; config.PerfCounters = PerfCounters != null ? (Alachisoft.NCache.Config.Dom.PerfCounters)PerfCounters.Clone() : null; #if SERVER config.autoBalancing = this.autoBalancing != null ? (Alachisoft.NCache.Config.Dom.AutoLoadBalancing) this.autoBalancing.Clone() : null; #endif config.Cleanup = Cleanup != null ? (Alachisoft.NCache.Config.Dom.Cleanup)Cleanup.Clone() : null; config.Storage = Storage != null ? (Alachisoft.NCache.Config.Dom.Storage)Storage.Clone() : null; config.EvictionPolicy = EvictionPolicy != null ? (Alachisoft.NCache.Config.Dom.EvictionPolicy)EvictionPolicy.Clone() : null; config.backingSource = backingSource != null ? (Alachisoft.NCache.Config.Dom.BackingSource) this.backingSource.Clone() : null; config.Security = Security != null ? (Alachisoft.NCache.Config.Dom.Security)Security.Clone() : null; config.Notifications = Notifications != null ? (Alachisoft.NCache.Config.Dom.Notifications)Notifications.Clone() : null; config.SynchronizationStrategy = SynchronizationStrategy != null ? (Alachisoft.NCache.Config.Dom.SynchronizationStrategy)SynchronizationStrategy.Clone() : null; config.cacheTopology = this.cacheTopology; config.DataFormat = this.DataFormat; config.ClientDeathDetection = ClientDeathDetection != null ? (ClientDeathDetection)ClientDeathDetection.Clone() : null; config.ClientActivityNotification = ClientActivityNotification != null ? (ClientActivityNotification)ClientActivityNotification.Clone() : null; return(config); }