我正在編寫緩存提供程序來緩存任何類型的對象。當我從高速緩存中讀取值時,問題是轉換爲正確的類型。使用Redis和服務堆棧爲Piranha編寫緩存提供程序 - 跟蹤緩存的對象類型
using (var redisClient = redisClientsManager.GetClient())
{
redisClient.Set(key, value, new TimeSpan(1, 0, 0));
}
因此,很容易將對象放入緩存中,並將其轉換爲字符串。當我來到拉出來的緩存是它得到有趣
using (var redisClient = redisClientsManager.GetClient())
{
return redisClient.Get<object>(key);
}
因爲我們沒有正確的類型強制轉換爲這樣的默認這不起作用是返回JSON字符串。
我在想,也許我應該創建一個哈希我所有的食人魚對象則有這樣的事情
piranha:cache id = "{ some json }"
piranha:cache id:type = PAGETYPE
這將使我的設置,當我保存對象緩存對象類型。我想知道是否有更好的方法來獲取/設置緩存的對象類型?
理想情況下,代碼將顯式執行轉換,但是此刻redis中的緩存僅使用對象類型(我認爲)。
public object this[string key]
{
get
{
using (var redisClient = redisClientsManager.GetClient())
{
if (redisClient.HashContainsEntry(PiranhaHash, key))
{
string resultJson = redisClient.GetValueFromHash(PiranhaHash, key);
string objType = redisClient.GetValueFromHash(PiranhaHash, String.Format("{0}:Type", key));
Type t = JsonConvert.DeserializeObject<Type>(objType);
object result = JsonConvert.DeserializeObject(resultJson, t);
return result;
}
}
return null;
}
set
{
using (var redisClient = redisClientsManager.GetClient())
{
redisClient.SetEntryInHash(PiranhaHash, key, JsonConvert.SerializeObject(value));
redisClient.SetEntryInHash(PiranhaHash, String.Format("{0}:Type", key), JsonConvert.SerializeObject(value.GetType()));
}
}
}
然而,對於這種實現應該工作Page對象將不會從Json的正確deserialise,控制器將永遠是空的大部分。我認爲必須進行一些後端更改才能實現這一點。
哈坎嗨,我認爲這將是最好的解決辦法但我仍然不知道它會在這裏解決的問題,其中Page對象無法序列/妥善deserialised成JSON。 – Neil
嗨,我試了服務堆棧serialiser和牛頓軟件。明天我會嘗試爲你制定一個拉你的請求 – Neil