Я пытаюсь использовать Azure кэш redis для уменьшения попаданий в мою базу данных, но я застрял на чем-то очень странном. Мой WebMethod выглядит так:
[WebMethod]
public static string HistoricalData(string searchterm, string topicId)
{
string constr = ConfigurationManager.ConnectionStrings["Azure"].ConnectionString;
var lazyConnection = new Lazy<ConnectionMultiplexer>(() => {
string cacheConnection = ConfigurationManager.ConnectionStrings["CacheConnection"].ToString();
return ConnectionMultiplexer.Connect(cacheConnection);
});
JavaScriptSerializer json = new JavaScriptSerializer();
List<HistoricalGraph> hg = new List<HistoricalGraph>();
json.MaxJsonLength = Int32.MaxValue;
IDatabase cache = lazyConnection.Value.GetDatabase();
var cachedCategory = cache.StringGet(topicId).ToString();
if (cachedCategory == null){
using (SqlConnection conn = new SqlConnection(constr))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("my_sp", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Type", "GetData");
cmd.Parameters.AddWithValue("@Topic", searchterm);
using (SqlDataReader r = cmd.ExecuteReader())
{
if (r.HasRows)
{
while (r.Read())
{
hg.Add(new HistoricalGraph
{
asin = r.GetValue(0).ToString() ?? "",
title = r.GetValue(1).ToString() ?? "",
tagBrand = r.GetValue(2).ToString() ?? "",
TagFieldValue1 = r.GetValue(3).ToString() ?? "",
TagFieldValue2 = r.GetValue(4).ToString() ?? "",
TagFieldValue3 = r.GetValue(5).ToString() ?? "",
TagFieldValue4 = r.GetValue(6).ToString() ?? "",
TagFieldValue5 = r.GetValue(7).ToString() ?? "",
pack = r.GetValue(8).ToString() ?? "",
date = r.GetValue(9).ToString() ?? "",
avgPrice = r.GetValue(10).ToString() ?? "",
units = r.GetValue(11).ToString() ?? "",
revenue = r.GetValue(12).ToString() ?? "",
image = r.GetValue(13).ToString() ?? ""
});
}
}
}
}
}
System.Diagnostics.Debug.WriteLine("From SQL");
var serializedData = json.Serialize(hg);
cache.StringSet(topicId, serializedData).ToString(); //Errors here
return serializedData;
}
else
{
System.Diagnostics.Debug.WriteLine("From Redis Cache");
return cachedCategory.ToString();
}
}
Redis StackExchange выдает ошибку мультиплексора, которая не очень наглядна, но если я перезагружаю страницу, он удаляет данные json из моего кэша redis. Строка json занимает в среднем около 8 МБ. Будем весьма благодарны за любые мысли или предложения по этому вопросу.