private byte[] GetAndRefresh(string key, bool getData) { if (key == null) { throw new ArgumentNullException(nameof(key)); } // This also resets the LRU status as desired. // TODO: Can this be done in one operation on the server side? Probably, the trick would just be the DateTimeOffset math. object[] results; byte[] value = null; if (getData) { var ret = _redisClient.HMGet <byte[]>(key, AbsoluteExpirationKey, SlidingExpirationKey, DataKey); results = new object[] { ret[0] == null ? null : Encoding.UTF8.GetString(ret[0]), ret[1] == null ? null : Encoding.UTF8.GetString(ret[1]), value = ret[2] }; } else { results = _redisClient.HMGet(key, AbsoluteExpirationKey, SlidingExpirationKey); } // TODO: Error handling if (results.Length >= 2) { MapMetadata(results, out DateTimeOffset? absExpr, out TimeSpan? sldExpr); Refresh(key, absExpr, sldExpr); } if (results.Length >= 3) { return(value); } return(null); }