使用XmemcachedClient设置缓存对象过期时间的问题

使用XmemcachedClient设置缓存对象过期时间的问题

前几天在做一个涉及到memcache的项目,使用XmemcachedClient来操作memcache,由于是一个季度的数据,保存数据时这样的
 memcachedClient.set(key, expiredTime, value)
其中设置了过期时间为90天
int  cacheExpireTime  =   60 * 60 * 24 * 90 ;
结果就杯具了,保存后用get方法取时都是null;后来无意中把过期时间改成小于30天,就完全没有问题,经过谷歌大神的帮忙,终于发现了原因。
服务端的处理
时间处理源代码【memcached.c】如下:
#define REALTIME_MAXDELTA 
60 * 60 * 24 * 30                       //  定义30天的秒数
static  rel_time_t realtime( const  time_t exptime)  {
       
if (exptime == 0return 0;
       
if (exptime > REALTIME_MAXDELTA) {                       // 超过30天,是绝对时间
              if (exptime <= process_started)                         // 小于进程启动日期
                      return (rel_time_t)1;                                  //
              return (rel_time_t)(exptime - process_started);   // 返回进程启动之后的时间差
       }
 else {                                                                   // 不超过30天,是相对时间
              return (rel_time_t)(exptime + current_time);       // exptime + (tvsec - process_started)
       }

}
原来超过30天就自动转换成绝对时间,和进程启动时间比较,显然60*60*24*90小于启动日期的绝对数,所以对象一存入就过期了,肯定取不到数据。
具体的问题请围观这篇文章: http://blog.sina.com.cn/s/blog_539d361e0100nc9h.html。

我的微博 http://t.sina.com.cn/1401900445

你可能感兴趣的:(使用XmemcachedClient设置缓存对象过期时间的问题)