代码之家  ›  专栏  ›  技术社区  ›  Jason

在cfquery中使用cachedwithin attibute

  •  5
  • Jason  · 技术社区  · 14 年前

    在cfquery中使用cachedwithin属性时,它如何将查询存储在内存中。它是否只按您分配给查询的名称来存储它?例如,如果在我的索引页上缓存一个小时的查询,并将其命名为getPeople,那么在不同的页面(或相同的页面)上使用相同名称的查询将使用缓存的结果还是使用更好的逻辑来确定它是否是同一个查询?

    另外,如果查询中有一个变量,缓存是否考虑了该变量的值?

    2 回复  |  直到 5 年前
        1
  •  6
  •   Ken Redler    9 年前

    它不仅是名称--它是您正在运行的确切查询。

    <cfquery name="getPeople" cachedwithin=".5" ...>
    select name from employee order by name
    </cfquery>
    

    <!--- Different name, same SQL: A new cached query --->
    <cfquery name="getEmployees" cachedwithin=".5" ...>
    select name from employee order by name
    </cfquery>
    
    <!--- Different SQL, same name: Redefining the cached query --->
    <!--- Note: As pointed out in comments, it's not really overwriting the old query
          of the same name, but making a new one in the cache. The first one by the
          same name is still in the cache, waiting for eviction. --->
    <cfquery name="getPeople" cachedwithin=".5" ...>
    select name from employee order by name desc
    </cfquery>
    

    cfqueryparam --您应该这样做--您的数据库将缓存 查询计划 cachedwithin ,每个具有已更改参数的查询将被视为不同于查询缓存透视图。请注意,这意味着如果您使用 缓存磷脂

        2
  •  3
  •   Henry    14 年前

    http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7fae.html

    要使用缓存数据,请执行当前查询 必须使用相同的 SQL语句,数据 源,查询名,用户名, .

    变量?是的,只要你用 <cfqueryparam>