Caching 我可以根据一天中的时间在Varnish缓存中设置不同的TTL吗

Caching 我可以根据一天中的时间在Varnish缓存中设置不同的TTL吗,caching,varnish,Caching,Varnish,我想知道是否有可能在VCL中检查一天中的当前时间,以便根据它设置不同的TTL。由于Varnish允许在VCL中嵌入C,我确信这是可行的,但我想知道它是否可以在香草VCL中实现。 如果只能用C来完成,我真的很欣赏一个例子(如果写起来很简单的话),因为我对C了解不多。你不能用VCL来处理日期。要正确使用inline-C代码总是有点棘手,但您可以从以下内容开始: C{ #include <time.h> #include <sys/time.h> }C sub vcl

我想知道是否有可能在VCL中检查一天中的当前时间,以便根据它设置不同的TTL。由于Varnish允许在VCL中嵌入C,我确信这是可行的,但我想知道它是否可以在香草VCL中实现。
如果只能用C来完成,我真的很欣赏一个例子(如果写起来很简单的话),因为我对C了解不多。

你不能用VCL来处理日期。要正确使用inline-C代码总是有点棘手,但您可以从以下内容开始:

C{
  #include <time.h>
  #include <sys/time.h>
}C

sub vcl_fetch {
  C{
    struct timeval tv;
    struct tm result;
    gettimeofday(&tv, NULL);
    localtime_r(& (tv.tv_sec), &result);
    /* compare the timeofday with: result.tm_hour, result.tm_min, result.tm_sec */
    if ( result.tm_hour < 12 ) {
      /* in the morning, only 1 minute caching */
      VRT_l_obj_ttl(sp, 60);
    } else {
      /* after noon, 1 hour caching */
      VRT_l_obj_ttl(sp, 3600);
    }
  }C

  # do other stuff here
}
C{
#包括
#包括
}C
子vcl_取数{
C{
结构时间值电视;
struct-tm结果;
gettimeofday(&tv,NULL);
本地时间(&(tv.tv_秒)和结果);
/*将一天的时间与:result.tm_hour、result.tm_min、result.tm_sec进行比较*/
如果(结果时间<12小时){
/*早上,只有1分钟*/
VRT_l_obj_ttl(sp,60);
}否则{
/*中午后,1小时缓存*/
VRT_l_obj_ttl(sp,3600);
}
}C
#在这里做其他事情
}
我在“default.vcl”中使用了代码“C{#include}C”,开始时出现了一个错误。
来自C编译器的消息:
./vcl.TfBe17Rg.c:429:21:time.h:没有这样的文件或目录
./vcl.TfBe17Rg.c:430:23:string.h:没有这样的文件或目录
运行C编译器失败,退出1