public void Set(string key, CachedRequest val) { if (Interlocked.Increment(ref memoryPressureCounterOnSet) % 25 == 0) // check every 25 sets { TryClearMemory(); } actualCache.AddOrUpdate(key, val, (s, o) => val); lruKeys.Push(key); }
public async Task CacheReqestAsync(CachedRequest cachedRequest) { if (cachedRequest == null || string.IsNullOrEmpty(cachedRequest.Request) || string.IsNullOrEmpty(cachedRequest.Request)) { return; } await database.InsertOrReplaceAsync(cachedRequest); }
public void Set(string key, CachedRequest val) { if (Interlocked.Increment(ref memoryPressureCounterOnSet) % 25 == 0) // check every 25 sets { TryClearMemory(); } int lastWrite; if (lastWritePerDb.TryGetValue(val.Database, out lastWrite)) { val.ReadTime = lastWrite; } actualCache.AddOrUpdate(key, val, (s, o) => val); lruKeys.Push(key); }
private void AddNewEntry(string operationKey, OperationRequest operationRequest) { if (!_cachedRequests.ContainsKey(operationKey)) { lock (_sync) { if (!_cachedRequests.ContainsKey(operationKey)) { ClearSpaceForNewEntry(); LinkedListNode <string> rank = _requestRanking.AddFirst(operationKey); CachedRequest entry = new CachedRequest(rank, operationRequest); _cachedRequests = _cachedRequests.SetItem(operationKey, entry); _first = rank; } } } }
public async Task CachedServiceClient_does_return_cached_ToOptimizedResults_Async() { var client = GetCachedServiceClient(); var request = new CachedRequest { Age = TimeSpan.FromHours(1) }; var response = await client.GetAsync(request); Assert.That(client.NotModifiedHits, Is.EqualTo(0)); Assert.That(response, Is.EqualTo(request)); response = await client.GetAsync(request); Assert.That(client.NotModifiedHits, Is.EqualTo(1)); Assert.That(response, Is.EqualTo(request)); }
public List<CachedRequest> RequestsInCache(Carrot.AuthStatus authStatus) { List<CachedRequest> cachedRequests = new List<CachedRequest>(); #if CACHE_ENABLED IntPtr sqlStatement = IntPtr.Zero; lock(this) { string sql = string.Format(kCacheReadSQL, (int)authStatus); if(sqlite3_prepare_v2(mDBPtr, sql, -1, out sqlStatement, IntPtr.Zero) == SQLITE_OK) { while(sqlite3_step(sqlStatement) == SQLITE_ROW) { CachedRequest request = new CachedRequest(); request.CacheId = sqlite3_column_int64(sqlStatement, 0); request.ServiceType = (Carrot.ServiceType)sqlite3_column_int(sqlStatement, 1); request.Endpoint = sqlite3_column_text(sqlStatement, 2); request.Parameters = Json.Deserialize(sqlite3_column_text(sqlStatement, 3)) as Dictionary<string, object>; request.RequestId = sqlite3_column_text(sqlStatement, 4); request.RequestDate = (long)sqlite3_column_double(sqlStatement, 5); request.Retries = sqlite3_column_int(sqlStatement, 6); request.Cache = this; cachedRequests.Add(request); } } else { Debug.Log("Failed to load requests from Carrot cache. Error: " + sqlite3_errmsg(mDBPtr)); } } sqlite3_finalize(sqlStatement); #else lock(this) { foreach(CarrotCache.CachedRequest crequest in mCachedRequests) { if((int)crequest.ServiceType <= (int)authStatus) { //Debug.Log("Somethingsomething: " + crequest); cachedRequests.Add(crequest); } } } #endif return cachedRequests; }
public CachedRequest CacheRequest(Carrot.ServiceType serviceType, string endpoint, Dictionary<string, object> parameters) { CachedRequest ret = new CachedRequest(); ret.ServiceType = serviceType; ret.Endpoint = endpoint; ret.Parameters = parameters; ret.RequestDate = (long)((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000); ret.RequestId = System.Guid.NewGuid().ToString(); ret.Retries = 0; #if CACHE_ENABLED IntPtr sqlStatement = IntPtr.Zero; string sql = string.Format(kCacheInsertSQL, ret.ServiceType, ret.Endpoint, Json.Serialize(ret.Parameters), ret.RequestId, ret.RequestDate, ret.Retries); lock(this) { if(sqlite3_prepare_v2(mDBPtr, sql, -1, out sqlStatement, IntPtr.Zero) == SQLITE_OK) { if(sqlite3_step(sqlStatement) == SQLITE_DONE) { ret.Cache = this; ret.CacheId = sqlite3_last_insert_rowid(mDBPtr); } else { Debug.Log("Failed to write request to Carrot cache. Error: " + sqlite3_errmsg(mDBPtr)); } } else { Debug.Log("Failed to write request to Carrot cache. Error: " + sqlite3_errmsg(mDBPtr)); } } sqlite3_finalize(sqlStatement); #else lock(this) { ret.Cache = this; mCachedRequests.Add(ret); } #endif return ret; }