我正在处理一个需要在搜索表单中使用自动完成字段的应用程序,该应用程序是基于Railo 3.3的CFML编写的。我使用了jQuery UI自动完成插件,并已在服务器端实现了查找,如下所示:
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技术是否是一个好的模式?性能很好,内存占用合理(数据集相当小),所以感觉还不错,但我希望从那些之前尝试过并发现问题的人那里获得建议。非常感谢任何想法。