public virtual object Get(object key)
{
key.ThrowIfNull();
log.DebugFormat("get from cache: regionName='{0}', key='{1}'", RegionName, key);
try
{
var cacheKey = CacheNamespace.GetKey(key);
var setOfActiveKeysKey = CacheNamespace.GetSetOfActiveKeysKey();
var db = GetDatabase();
var resultValues = (RedisValue[])db.ScriptEvaluate(getScript, new
{
key = cacheKey,
setOfActiveKeysKey = setOfActiveKeysKey
});
if (resultValues[0].IsNullOrEmpty)
{
log.DebugFormat("cache miss: regionName='{0}', key='{1}'", RegionName, key);
return null;
}
else
{
var serializedResult = resultValues[0];
var deserializedValue = options.Serializer.Deserialize(serializedResult);
if (deserializedValue != null && slidingExpiration != RedisCacheConfiguration.NoSlidingExpiration)
{
db.ScriptEvaluate(slidingExpirationScript, new
{
key = cacheKey,
expiration = expiration.TotalMilliseconds,
slidingExpiration = slidingExpiration.TotalMilliseconds
}, fireAndForgetFlags);
}
return deserializedValue;
}
}
catch (Exception e)
{
log.ErrorFormat("could not get from cache: regionName='{0}', key='{1}'", RegionName, key);
var evtArg = new ExceptionEventArgs(RegionName, RedisCacheMethod.Get, e);
options.OnException(this, evtArg);
if (evtArg.Throw)
{
throw new RedisCacheException(RegionName, "Failed to get item from cache. See inner exception.", e);
}
return null;
}
}