查询缓存用于jQuery自动完成功能

6

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

我认为你做得很好 :). 我一直都在使用它。 - Dan Short
Railo有cachePut()和cacheGet()吗?当需要清除缓存时,可能比Cachedwithin更灵活。 - Henry
@Henry - 它确实有cachePut()和cacheGet()。我正在使用EHCache的这些缓存函数来缓存其他类型的数据,但查询缓存非常适合直接进行数据库缓存。此外,Railo支持<cfobjectcache/>标签,允许您在需要时刷新查询缓存。 - Neil Albrock
2个回答

1

你可以使用Jquery自动完成

cacheLength: 数字

设置客户端缓存以启用缓存,从而减少对服务器的调用次数并提高性能。


0

我曾经使用过这个技巧,并且取得了很大的成功。

假设你的数据不会意外增长,你肯定在做正确的事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接