2011-09-09 61 views
6

我正在研究需要搜索表單上的自動填充字段的應用程序。該應用程序是在Railo 3.3上的CFML。我使用jQuery UI自動完成,並已實施了服務器端的像這樣的查詢:查詢緩存以提供動力jQuery自動完成

private struct function getStationDetails(required numeric uic) 
{ 
    var qryCacheStations = new query(); 
    var qryStations = new query(); 
    var cacheData = ""; 
    var resultData = ""; 
    var stcResult = {}; 

    qryCacheStations.setDatasource(variables.instance['dataSource']);  
    qryCacheStations.setSQL("select distinct uic, name, crs from stations order by name"); 
    qryCacheStations.setCachedwithin(createTimeSpan(1,0,0,0)); 
    cacheData = qryCacheStations.execute().getResult(); 

    qryStations.setDBType("query"); 
    qryStations.setAttributes(srcTbl = cacheData); 
    qryStations.setSQL("select name, crs from srcTbl where uic = :uic"); 

    qryStations.addParam(name="uic",value=arguments.uic,CFSQLType="CF_SQL_INTEGER"); 

    resultData = qryStations.execute().getResult(); 

    stcResult = { 
     name = resultData['name'][1], 
     crs = resultData['crs'][1] 
    } 

    return stcResult; 
} 

基本上我加載整個電臺列表進入第一個查找的緩存,搭配1天到期(數據很少發生變化),然後使用查詢查詢將相關結果返回給客戶端。

我的問題很簡單,這種積極的緩存和QoQs技術是一種很好的模式嗎?性能看起來不錯,內存佔用也是合理的(數據集很小),所以它'感覺'很好,但我正在尋找那些以前可能嘗試過並發現問題的人的任何建議?

任何想法將非常感激。

+0

我想你釘了:)。我一直使用這個。 –

+0

確實Railo有cachePut()和cacheGet()嗎?可能會更靈活,然後Cachedwithin在刷新緩存的時候 – Henry

+0

@Henry - 它確實有cachePut()和cacheGet()。我將這些緩存函數與EHCache一起用於其他類型的數據,但查詢緩存非常適合直接DB緩存。此外,Railo還支持標記,允許您在需要時刷新查詢緩存。 –

回答

1

您可以使用jQuery的自動完成

cacheLength:數

設置緩存能夠在客戶端,從而可以減少呼叫服務器的數量,可以提高性能

0

我用這個完全相同的技術取得了巨大的成功。

假設您的數據沒有意外增長,那麼您絕對是做了正確的事情。