public static CacheSyncMsg CreateStoreMsg(Guid sender, string key, object data, IDictionary <string, object> parameters) { var msg = new CacheSyncMsg() { CacheKey = key, Action = CacheAction.Store, Sender = sender }; msg.Options.Add("Parameters", parameters); if (data != null) { var dataType = data.GetType().AssemblyQualifiedName; msg.Options.Add("DataType", dataType); var dataStr = Convert.ToBase64String(BitSerializer.Serialize(data)); msg.Options.Add("Data", dataStr); } else { msg.Options.Add("Data", string.Empty); } return(msg); }
public static void CleanKey(string key, bool sync = true) { CacheProvider.Provider.Remove(key); if (sync) { var msg = CacheSyncMsg.CreateRemoveMsg(_sender, key); _subscriber.Publish(_channel, DynamicJson.Serialize(msg)); } }
public static CacheSyncMsg CreateClearMsg(Guid sender) { var msg = new CacheSyncMsg() { Action = CacheAction.Remove, Sender = sender }; return(msg); }
public static void Clear(bool sync = true) { CacheProvider.Provider.Clear(); if (sync) { var msg = CacheSyncMsg.CreateClearMsg(_sender); _subscriber.Publish(_channel, DynamicJson.Serialize(msg)); } }
public static CacheSyncMsg CreateRemoveMsg(Guid sender, string key) { var msg = new CacheSyncMsg() { CacheKey = key, Action = CacheAction.Remove, Sender = sender }; return(msg); }
public void Remove(string key) { _keys.TryRemove(key, out bool value); _storage.Remove(key); var msg = CacheSyncMsg.CreateRemoveMsg(_self, key); _subscriber.Publish(_channel, DynamicJson.Serialize(msg)); Console.WriteLine("Removed:" + key); }
public static CacheSyncMsg CreateUpdateExpireMsg(Guid sender, string key, int duration) { var msg = new CacheSyncMsg() { CacheKey = key, Action = CacheAction.UpdateExpire, Duration = duration, Sender = sender }; return(msg); }
public void Clear() { if (_storage.Count > 0) { _keys.Clear(); _storage = new MemoryCache(new MemoryCacheOptions()); GC.Collect(); var msg = CacheSyncMsg.CreateClearMsg(_self); _subscriber.Publish(_channel, DynamicJson.Serialize(msg)); } }
public static void CleanBatch(string prefix, bool sync = true) { var keys = CacheProvider.Provider.Keys(k => k.StartsWith(prefix)); Parallel.ForEach(keys, (key) => { CacheProvider.Provider.Remove(key); }); if (sync) { var msg = CacheSyncMsg.CreateRemoveBatchMsg(_sender, prefix); _subscriber.Publish(_channel, DynamicJson.Serialize(msg)); } }
public static CacheSyncMsg CreateRemoveBatchMsg(Guid sender, string prefix) { var msg = new CacheSyncMsg() { CacheKey = prefix, Action = CacheAction.Remove, Sender = sender }; msg.Options.Add("IsBatch", true); return(msg); }
public static void UpdateExpire(string key, int duration, bool sync = true) { var data = CacheProvider.Provider.Retrieve <object>(key); CacheProvider.Provider.Remove(key); var parms = new Dictionary <string, object>(); parms.Add("Duration", duration); parms.Add("Preset", null); CacheProvider.Provider.Store(key, data, parms); if (sync) { var msg = CacheSyncMsg.CreateUpdateExpireMsg(_sender, key, duration); _subscriber.Publish(_channel, DynamicJson.Serialize(msg)); } }
public static bool TryParseMsg(this RedisValue value, out CacheSyncMsg msg) { bool result = false; msg = null; if (!value.IsNullOrEmpty && value.HasValue) { try { msg = DynamicJson.Parse(value).Deserialize <CacheSyncMsg>(); if (msg != null) { result = true; } } catch (Exception ex) { throw new InvalidCastException($"TryParseMsg error: {ex.Message} value: {value}", ex); } } return(result); }
public void Store(string key, object data, IDictionary <string, object> parameters) { if (!_keys.ContainsKey(key)) { _keys.TryAdd(key, false); } if (parameters != null && parameters.Count > 0 && parameters.ContainsKey("Duration")) { int duration = (int)parameters["Duration"]; var tsDur = TimeSpan.FromSeconds(duration); var cts = new CancellationTokenSource(); MemoryCacheEntryOptions options = new MemoryCacheEntryOptions(); options.AbsoluteExpirationRelativeToNow = tsDur; options.AddExpirationToken(new CancellationChangeToken(cts.Token)); options.RegisterPostEvictionCallback(new PostEvictionDelegate((entry, value, reason, state) => { Console.WriteLine("reason:" + reason.ToString()); if (reason == EvictionReason.TokenExpired) { (state as ICacheProvider).Remove(entry as string); } }), this); _storage.Set(key, data, options); cts.CancelAfter(tsDur); } else { _storage.Set(key, data); } var msg = CacheSyncMsg.CreateStoreMsg(_self, key, data, parameters); _subscriber.Publish(_channel, DynamicJson.Serialize(msg)); }