亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種瀏覽器圖表的服務端緩存方法與流程

文檔序號:12465685閱讀:539來源:國知局

本發(fā)明涉及計算機技術領域,具體地說是一種瀏覽器圖表的服務端緩存方法。



背景技術:

圖表泛指在屏幕中顯示的,可直觀展示統(tǒng)計信息屬性(時間性、數(shù)量性等),對知識挖掘和信息直觀生動感受起關鍵作用的圖形結構,是一種很好的將對象屬性數(shù)據(jù)直觀、形象地“可視化”的手段。圖表設計隸屬于視覺傳達設計范疇。

在現(xiàn)有技術的瀏覽器中,圖表是必不可少的內容之一,用戶經常需要查詢該瀏覽器圖表。查詢圖表的核心就是數(shù)據(jù)輸出以及展現(xiàn)。如何能夠及時響應用戶請求,快速進行數(shù)據(jù)分析并將查詢結果反饋給用戶就成了提升用戶體驗的關鍵點。數(shù)據(jù)緩存是解決這個問題的最常見處理方式。

基于此,本發(fā)明提出了一種瀏覽器圖表的服務端緩存方法。該方法采用數(shù)據(jù)緩存技術實現(xiàn),數(shù)據(jù)緩存可以減少與數(shù)據(jù)庫的交互次數(shù),而且數(shù)據(jù)存儲于內存當中,也會大大提升數(shù)據(jù)的提取和計算效率。



技術實現(xiàn)要素:

本發(fā)明的技術任務是針對以上不足之處,提供一種實用性強、有效解決上述問題的瀏覽器圖表的服務端緩存方法。

一種瀏覽器圖表的服務端緩存方法,其實現(xiàn)過程為:

首先在瀏覽器圖表第一次加載時,在服務端對數(shù)據(jù)進行緩存;

當用戶發(fā)起獲取圖表數(shù)據(jù)的請求時,直接從該服務端的緩存當中獲取圖表數(shù)據(jù)。

當用戶在客戶端發(fā)起獲取圖表數(shù)據(jù)的請求時,服務端首先從緩存當中獲取數(shù)據(jù),如果緩存中存在請求所需數(shù)據(jù),那么直接將緩存數(shù)據(jù)返回給客戶端;如果緩存當中沒有所需數(shù)據(jù),則將所需數(shù)據(jù)正常加載瀏覽器圖標后再將其緩存到服務端。

當緩存當中沒有所需數(shù)據(jù)時,分以下兩步進行處理:

第一步、調用取數(shù)服務獲取圖表數(shù)據(jù)并返回給客戶端;

第二步、通過將調用取數(shù)服務所獲取的數(shù)據(jù)載入緩存當中。

服務端緩存的數(shù)據(jù)生命周期為20分鐘。

當瀏覽圖表結束后,將服務端的圖表緩存進行回收,具體為:每當當前瀏覽器功能關閉或者退出系統(tǒng)時,系統(tǒng)對圖表緩存進行回收處理,緩存失效并重新加載后,對圖表已經載入的數(shù)據(jù)進行更新。

本發(fā)明的一種瀏覽器圖表的服務端緩存方法和現(xiàn)有技術相比,具有以下有益效果:

本發(fā)明的一種瀏覽器圖表的服務端緩存方法,通過將圖表數(shù)據(jù)進行服務端緩存,避免了與數(shù)據(jù)庫的多次交互,解決得了圖表加載效率的問題;當?shù)谝淮渭虞d圖表時,在服務端對請求的圖表數(shù)據(jù)進行緩存,當用戶在做翻頁、導出以及打印操作時,系統(tǒng)不需要再次和數(shù)據(jù)庫進行交互,直接從緩存當中獲取圖表數(shù)據(jù),大幅度縮減了客戶端請求的響應時間,大大提升了用戶的操作體驗,實用性強,適用范圍廣泛,易于推廣。

附圖說明

附圖1為本發(fā)明的實現(xiàn)流程圖。

具體實施方式

下面結合附圖及具體實施例對本發(fā)明作進一步說明。

如附圖1所示,一種瀏覽器圖表的服務端緩存方法,包括以下幾個步驟和內容:

(一) 圖表初始化時,服務端對數(shù)據(jù)進行緩存。即在客戶端第一次加載圖表時,對圖表數(shù)據(jù)進行緩存處理。

(二) 客戶端發(fā)起獲取圖表數(shù)據(jù)的請求,每次調用取數(shù)引擎做取數(shù)操作前都要判斷是否存在數(shù)據(jù)緩存,服務端首先從緩存當中獲取數(shù)據(jù),如果緩存中存在請求所需數(shù)據(jù),那么直接將緩存數(shù)據(jù)返回給客戶端;如果緩存當中沒有所需數(shù)據(jù),再調用取數(shù)服務獲取數(shù)據(jù),在將數(shù)據(jù)返回客戶端的同時將數(shù)據(jù)放入緩存當中。

具體分以下兩步進行處理:

第一步調用取數(shù)服務進行取數(shù)操作并完成數(shù)據(jù)分析,將處理后的數(shù)據(jù)反饋給客戶端;

第二步通過異步操作(或者開啟子線程)調用取數(shù)服務進行取數(shù)操作并將數(shù)據(jù)放入緩存當中。

(三)限定緩存的生命周期,并在關閉當前功能或者退出系統(tǒng)時對緩存進行回收。當緩存占用過多系統(tǒng)資源時自動回收緩存。

進一步的,緩存的生命周期為20分鐘,與session的生命周期一致。每當當前功能關閉或者退出系統(tǒng)時,對圖表緩存進行回收處理。當緩存占用過多系統(tǒng)資源時,根據(jù)優(yōu)先級進行緩存回收。

(四) 緩存失效并重新加載后,對圖表已經載入的數(shù)據(jù)進行更新,并對數(shù)據(jù)進行糾錯處理。

(五) 針對實效性較高的圖表,提供緩存設置的開發(fā)。

進一步的,本發(fā)明的具體代碼如下:

/// <summary>

/// 緩存依賴項Key值

/// </summary>

public string Key { get; set; }

/// <summary>

/// 異步調用取數(shù)委托

/// </summary>

/// <returns></returns>

public delegate QueryResult AysnGetData();

/// <summary>

/// 異步調用取數(shù)的標志位字典對象

/// </summary>

private static readonly Dictionary<string, bool> AysnDictionary = new Dictionary<string, bool>();

/// <summary>

/// 獲取圖表數(shù)據(jù)

/// </summary>

/// <returns></returns>

public QueryResult GetPageData(GetBindingDataObject request)

{

Request = request;

IDataOperate operate = DataOperateFactory.CreateDataOperate(request);

bool flag = false; //緩存設置的開發(fā)標志位

RuntimeOptions runtimeOptions = ExportHelper.GetRuntimeOptions(Request.RuntimeOptionsID, Request.QueryID);

if (runtimeOptions != null && runtimeOptions.otherOptions != null)

{

//判斷緩存設置的開關是否開啟

if (runtimeOptions.otherOptions.dataCahce)

flag = true;

}

if (flag)

SetCacheDependent(); //設置緩存依賴

//從緩存中獲取結果集

QueryResult result = HttpRuntime.Cache.Get(Id + Request.QueryID) as QueryResult;

if (flag)

{

if (result == null)

{

//異步調用取數(shù)過程中,結果集未緩存,直接調用取數(shù)接口取數(shù)

if (!AysnDictionary.ContainsKey(Id + Request.QueryID))

{

result = operate.GetData(AnalysisXmlParam(false));

//異步調用取數(shù),并將結果集加入到緩存當中

BeginPageDataForCache();

}

else

{

if (!AysnDictionary[Id + Request.QueryID])

result = operate.GetData(AnalysisXmlParam(false));

}

}

else

{

result = OperateDataWithCache(result);

}

}

else

{

result = operate.GetData(AnalysisXmlParam(false));

}

return result;

}

/// <summary>

/// 設置緩存依賴項

/// </summary>

private void SetCacheDependent()

{

bool flag = true;

Key = Id + UserId;//緩存依賴項的key值

//判斷緩存依賴項的key是否放生變動,如果有變動清楚緩存依賴項,并插入新的緩存依賴項

if (HttpRuntime.Cache.Count > 0)

{

foreach (System.Collections.DictionaryEntry item in HttpRuntime.Cache)

{

if (item.Key.ToString().Contains(UserId) && item.Key.ToString() != Key)

{

flag = false;

HttpRuntime.Cache.Remove(item.Key.ToString());

AysnDictionary.Clear();

HttpRuntime.Cache.Insert(Key, "cacheDependent");

break;

}

}

if (flag)

{

string cacheDependent = HttpRuntime.Cache.Get(Key) as string;

if (cacheDependent == null)

{

HttpRuntime.Cache.Insert(Key, "cacheDependent");

AysnDictionary.Clear();

}

}

}

else

{

HttpRuntime.Cache.Insert(Key, "cacheDependent");

}

}

/// <summary>

/// 異步調用取數(shù)

/// </summary>

private void BeginPageDataForCache()

{

if (AysnDictionary.ContainsKey(Id + Request.QueryID))

AysnDictionary[Id + Request.QueryID] = false;

else

AysnDictionary.Add(Id + Request.QueryID, false);

// ReSharper disable once RedundantDelegateCreation

AysnGetData aysnGetData = new AysnGetData(GetPageDataForCache);

aysnGetData.BeginInvoke(EndPageDataForCache, aysnGetData);

}

/// <summary>

/// 異步調用取數(shù),異步調用結束將取數(shù)結果加入緩存當中

/// </summary>

/// <param name="result"></param>

private void EndPageDataForCache(IAsyncResult result)

{

AysnGetData aysnGetData = result.AsyncState as AysnGetData;

if (aysnGetData != null)

{

var queryResult = aysnGetData.EndInvoke(result);

var t = new TimeSpan(0, 0, 5, 0);

// ReSharper disable once RedundantExplicitArrayCreation

var dependency = new CacheDependency(null, new string[] { Key });

if (queryResult.Data.Tables.Count > 0 && queryResult.Data.Tables[0].Rows.Count > 0)

HttpRuntime.Cache.Insert(Id + Request.QueryID, queryResult, dependency, Cache.NoAbsoluteExpiration, t);

AysnDictionary.Clear();

}

}。

通過上面具體實施方式,所述技術領域的技術人員可容易的實現(xiàn)本發(fā)明。但是應當理解,本發(fā)明并不限于上述的具體實施方式。在公開的實施方式的基礎上,所述技術領域的技術人員可任意組合不同的技術特征,從而實現(xiàn)不同的技術方案。

除說明書所述的技術特征外,均為本專業(yè)技術人員的已知技術。

當前第1頁1 2 3 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1