/// <inheritdoc/> public void Set <T>(Dictionary <CacheItemDefinition, T> objects) where T : class { GuardDisposed(); var valuesToStore = SaveToFirstLevelCacheAndGetSerializedValuesForSecondLevelCache(objects); if (valuesToStore.InNonSerializableCache.Count > 0) { var keys = valuesToStore.InNonSerializableCache.Select(x => x.Key.Key).ToArray(); var ttlResults = SecondLevelCache.GetTimeToLives(keys); RemoveTtlResultFromValuesToStore(ttlResults, valuesToStore); } SecondLevelCache.Set(valuesToStore.InSecondLevelCache); StoreValuesInFirstLevelCacheAndNonSerializableCache(valuesToStore); }
/// <inheritdoc/> public void Set <T>(string key, T value, TimeSpan?ttl) where T : class { GuardDisposed(); if (value == null) { return; } if (SerializationProvider.CanSerialize(value.GetType())) { byte[] bytes = SerializationProvider.Serialize(value); SecondLevelCache.Set(key, bytes, ttl: ttl); FirstLevelCache.Set(key, bytes, ttl: ttl); } else { var ph = new NonSerializableObjectPlaceHolder(); var ttlResult = SecondLevelCache.GetTimeToLive(key); if (ttlResult.KeyExists) { NonSerializableCache.Set(key, value, ttl: ttlResult.TimeToLive); } else { byte[] bytes = SerializationProvider.Serialize(ph); SecondLevelCache.Set(key, bytes, ttl: ttl); NonSerializableCache.Set(key, value, ttl: ttl); } } }