public void Add(StoreData data) { var datalist = this.datalist;//GetCacheData(); if (datalist == null) { return; } string dk = GetDataKey(data.Type, data.Key); if (!datalist.ContainsKey(dk)) { keylist.Enqueue(dk); } datalist.AddOrUpdate(dk, data, (string k, StoreData oldData) => { return data; }); if (datalist.Count >= this.capacity * 2) { ThreadPool.QueueUserWorkItem(ClearAsync, null); } }
public void Add(IStore store, StoreData data) { var datalist = this.datalist;//GetCacheData(); if (datalist == null) { return; } StoreDataEntity entity = new StoreDataEntity { Store = store , Data = data }; string dk = GetDataKey(data.Type, data.Key); datalist.AddOrUpdate(dk, entity, (string k, StoreDataEntity oldData) => { return entity; }); if (datalist.Count >= this.capacity) { ThreadPool.QueueUserWorkItem(SaveAsync, null); } }
Store.StoreData ConvertHttpDataToStoreData(RequestInfo info, Common.HttpData httpdata) { Store.StoreData data = new Store.StoreData(); data.CreatedDate = DateTime.Now; data.Key = info.Key; data.Type = info.Type; string data_accept_encoding = httpdata.Headers["Content-Encoding"] ?? string.Empty; bool echoGZip = IsClientProvidedGZip(info.Context); if (httpdata.BodyData != null && httpdata.ContentLength > 0) { if (data_accept_encoding.IndexOf("gzip", StringComparison.OrdinalIgnoreCase) >= 0) { if (echoGZip) { data.BodyData = httpdata.BodyData; } else { data.BodyData = Common.GZip.GZipDecompress(httpdata.BodyData); } } else { if (echoGZip) { data.BodyData = Common.GZip.GZipCompress(httpdata.BodyData); } else { data.BodyData = httpdata.BodyData; } } } else { data.BodyData = new byte[0]; } if (httpdata.Headers.AllKeys.Contains("Server")) { httpdata.Headers.Remove("Server"); } if (httpdata.Headers.AllKeys.Contains("Connection")) { httpdata.Headers.Remove("Connection"); } if (httpdata.Headers.AllKeys.Contains("Content-Length")) { httpdata.Headers.Remove("Content-Length"); } if (httpdata.Headers.AllKeys.Contains("Date")) { httpdata.Headers.Remove("Date"); } if (echoGZip) { httpdata.Headers["Content-Encoding"] = "gzip"; } StringBuilder headers = new StringBuilder(); headers.Append(httpdata.Scheme); headers.Append(" "); headers.Append(httpdata.StatusCode.ToString()); headers.Append(" "); headers.Append(httpdata.StatusDescription); headers.Append("\r\n"); foreach (string k in httpdata.Headers.Keys) { if (BeFilterHeader(k)) { continue; } string v = httpdata.Headers[k]; headers.Append(k); headers.Append(": "); headers.Append(v); headers.Append("\r\n"); } byte[] headersData = Encoding.ASCII.GetBytes(headers.ToString()); int statusCacheSeconds = GetStatusCacheSeconds(httpdata.StatusCode); data.HeadersData = headersData; //设置了自定义缓存时间,并且状态值为200 //正确的状态值 if (httpdata.StatusCode >= 100 && httpdata.StatusCode < 400) { int cacheSeconds = info.Rule.ConfigRule.CacheSeconds; if (cacheSeconds <= 0) { cacheSeconds = statusCacheSeconds; } if (cacheSeconds > 0) { data.ExpiresAbsolute = data.CreatedDate.AddSeconds(cacheSeconds); data.Seconds = cacheSeconds; } else { data.ExpiresAbsolute = data.CreatedDate; } } else { if (statusCacheSeconds > 0) { data.ExpiresAbsolute = data.CreatedDate.AddSeconds(statusCacheSeconds); data.Seconds = statusCacheSeconds; } } return data; }